diff options
643 files changed, 89484 insertions, 20739 deletions
diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 338278f461..3df4409041 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -28,6 +28,7 @@ jobs: doc-test: true bin: "./bin/godot.linuxbsd.opt.tools.64.mono" build-mono: true + proj-conv: true artifact: true - name: Editor with doubles and GCC sanitizers (target=debug, tools=yes, float=64, tests=yes, use_asan=yes, use_ubsan=yes) @@ -147,6 +148,17 @@ jobs: curr="$(pwd)/libvk_swiftshader.so" sed -i "s|PATH_TO_CHANGE|$curr|" vk_swiftshader_icd.json + # Test 3.x -> 4.x project converter + - name: Test project converter + if: ${{ matrix.proj-conv }} + run: | + mkdir converter_test + cd converter_test + touch project.godot + ../${{ matrix.bin }} --headless --audio-driver Dummy --validate-conversion-3to4 + cd .. + rm converter_test -rf + # Download and extract zip archive with project, folder is renamed to be able to easy change used project - name: Download test project if: ${{ matrix.proj-test }} @@ -36,6 +36,7 @@ Eveline Jarosz <marqin.pl@gmail.com> <marqin.pl+git@gmail.com> Fabian <supagu@gmail.com> Ferenc Arn <tagcup@yahoo.com> Ferenc Arn <tagcup@yahoo.com> <tagcup@users.noreply.github.com> +FireForge <67974470+fire-forge@users.noreply.github.com> <isaacr.7.2005@gmail.com> foxydevloper <12120644+foxydevloper@users.noreply.github.com> Fredia Huya-Kouadio <fhuyakou@gmail.com> Fredia Huya-Kouadio <fhuyakou@gmail.com> <fhuya@google.com> @@ -56,6 +57,7 @@ Ignacio Etcheverry <ignalfonsore@gmail.com> <neikeq@users.noreply.github.com> Ilaria Cislaghi <cislaghi.ilaria@gmail.com> Ilaria Cislaghi <cislaghi.ilaria@gmail.com> <ilaria.cislaghi@simedis.com> Indah Sylvia <ISylvox@yahoo.com> +iwek <miwanczuk7@gmail.com> J08nY <johny@neuromancer.sk> <jancar.jj@gmail.com> J08nY <johny@neuromancer.sk> <J08nY@users.noreply.github.com> Jake Young <young9003@gmail.com> @@ -143,6 +145,7 @@ Wilhem Barbier <nounoursheureux@openmailbox.org> <schtroumps31@gmail.com> Will Nations <willnationsdev@gmail.com> yg2f <yoann@terminajones.com> Yuri Sizov <yuris@humnom.net> <pycbouh@users.noreply.github.com> +Yuri Sizov <yuris@humnom.net> <yaschik4ilicha@gmail.com> Zae <zaevi@live.com> Zak Stam <zakscomputers@hotmail.com> Zher Huei Lee <lee.zh.92@gmail.com> diff --git a/AUTHORS.md b/AUTHORS.md index 4d52e3d1e0..36be7c4501 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -60,6 +60,7 @@ name is available. Carter Anderson (cart) Chris Bradfield (cbscribe) Clay John (clayjohn) + ConteZero Dana Olson (adolson) Daniel J. Ramirez (djrm) Daniel Rakos (aqnuep) @@ -86,6 +87,7 @@ name is available. Fabio Alessandrelli (Faless) fabriceci Ferenc Arn (tagcup) + FireForge (fire-forge) follower foxydevloper François Belair (Razoric480) @@ -109,6 +111,7 @@ name is available. Ian Bishop (ianb96) Ibrahn Sahir (ibrahn) Ignacio Etcheverry (neikeq) + Igor Kordiukiewicz (IgorKordiukiewicz) Ilaria Cislaghi (QbieShay) Indah Sylvia (ISylvox) J08nY @@ -150,6 +153,7 @@ name is available. Mariano Javier Suligoy (MarianoGnu) Mario Schlack (hurikhan) Marios Staikopoulos (marstaik) + Mark Riedesel (klowner) Markus Sauermann (Sauermann) Martin Capitanio (capnm) Martin LiÅ¡ka (marxin) @@ -163,6 +167,7 @@ name is available. merumelu Meru Patel (Janglee123) Michael Alexsander (YeldhamDev) + MichaÅ‚ IwaÅ„czuk (iwek7) MichiRecRoom (LikeLakers2) Morris "Tabor" Arroad (mortarroad) mrezai @@ -182,6 +187,7 @@ name is available. Paul Batty (Paulb23) Paul Joannon (paulloz) Paul Trojahn (ptrojahn) + PaweÅ‚ Fertyk (pfertyk) Pawel Kowal (pkowal1982) Pawel Lampe (Scony) Pedro J. Estébanez (RandomShaper) @@ -212,6 +218,7 @@ name is available. Shiqing (kawa-yoiko) Silc 'Tokage' Renew (TokageItLab) Simon Wenner (swenner) + smix8 Stijn Hinlopen (hinlopen) Swarnim Arun (minraws) TC (floppyhammer) @@ -234,7 +241,7 @@ name is available. Xavier Cho (mysticfall) yg2f (SuperUserNameMan) Yuri Rubinsky (Chaosus) - Yuri Sizov (pycbouh) + Yuri Sizov (YuriSizov) Zae Chao (zaevi) Zak Stam (zaksnet) Zher Huei Lee (leezh) @@ -26,7 +26,6 @@ generous deed immortalized in the next stable release of Godot Engine. ## Bronze sponsors - Ben Nolan Brandon Lamb Bri Daniel Kaplan @@ -36,6 +35,7 @@ generous deed immortalized in the next stable release of Godot Engine. Kitcat490 Kyle Szklenski Maxim Karsten + Nik Rudenko Moonwards <https://www.moonwards.com> TrampolineTales <https://trampolinetales.com> @@ -46,6 +46,7 @@ generous deed immortalized in the next stable release of Godot Engine. Andrew Bowen Andrew Dunai anti666 + Chris Bolton Christian Baune Christopher Montesano Christopher Shifflett @@ -53,15 +54,10 @@ generous deed immortalized in the next stable release of Godot Engine. Darrin Massena David Mydlarz Digital Grows - Dov Zimring Edward Flick Florian Neumann - Gamechuck GameDev.net Hein-Pieter van Braam - Jasper Brooks - Jeffery Chiu - John G Gentzel Jonah Stich Justin Arnold Justo Delgado Baudà @@ -105,10 +101,9 @@ generous deed immortalized in the next stable release of Godot Engine. David Snopek Ed Morley First Last - Florian Rämisch Hunter Jones Jacobus Dens - Jakub Grzesik + Jasper Brooks Javier Roman Joan Fons Jonathan Wright @@ -131,6 +126,7 @@ generous deed immortalized in the next stable release of Godot Engine. Sarksus Sean Sergey + Sergio Airaldi Sofox Stephan Kessler Stephen Molyneaux @@ -150,7 +146,6 @@ generous deed immortalized in the next stable release of Godot Engine. Alexander J Maynard Alex Khayrullin alice gambrell - Amar Å ahinović Andrew Cunningham Andrew Farr Andriy @@ -158,8 +153,12 @@ generous deed immortalized in the next stable release of Godot Engine. Antoni Batchelli Arch Henderson III Arthur S. Muszynski + BasicIncomePlz + BoomHorseHat + BrizzleBrip c64cosmin Cameron Connolly + Charles Gray Charlie Whitfield Chase Taranto Chris Petrich @@ -171,20 +170,15 @@ generous deed immortalized in the next stable release of Godot Engine. CzechBlueBear D DagobertDick - dan didenko - Daniel Daniel Hernández Alcojor Daniel Tebbutt Darrian Little - Daylon + David Thomason + Daylon J Williams Dennis Belfrage - Dev To be curious - Dima Fedotov + Dev To Be curious Dimitri Nüscheler - Dmitriy Khudorozhkov Donn Eddy - Douglas Hammond - EerieExpanse Eric Brand Eugenio Hugo Salgüero Jáñez EXUREI @@ -192,13 +186,12 @@ generous deed immortalized in the next stable release of Godot Engine. flesk foxydevloper Fransiska - Freeman Gabrielius VaiÅ¡kÅ«nas Gary Hulst - gavlig Geoffroy Warin - GGGames.org + George Venizelos gisora + GlassBrick GrayDwarf Guilherme Felipe de C. G. da Silva Harry Tumber @@ -208,6 +201,7 @@ generous deed immortalized in the next stable release of Godot Engine. Hu Hund Hunter Barabas HurrieCrane + Jaap Marsman Jamal Bencharki James Couzens Jan Sælid @@ -219,6 +213,7 @@ generous deed immortalized in the next stable release of Godot Engine. Jesús Chicharro Joel Fivat Johnathan Kupferer + John Stinson Josef Stumpfegger Jose Malheiro Jose Manuel Muñoz Perez @@ -227,23 +222,21 @@ generous deed immortalized in the next stable release of Godot Engine. Joshua Lesperance Juan Velandia Judd - Julián Absatz Julian Todd Juraj Móza JUSTIN CARROLL Kelteseth + Kevan + Khora kickmaniac kinfox - Kos Lakshaya Goel Laszlo Kiss leetNightshade Leo Fidel R Liban Liam Smyth LoparPanda - LordZaruflex Luca Vazzano - Luke MadScientistCarl Marcus Dobler Marcus Richter @@ -254,7 +247,6 @@ generous deed immortalized in the next stable release of Godot Engine. Martin Soucek matt Matt Greene - Matthew Hall Max Kryschi medecau Michael Dürwald @@ -271,11 +263,13 @@ generous deed immortalized in the next stable release of Godot Engine. Paul Hocker Paul Von Zimmerman Pavel Kotlyar + Pedro Pete Goodwin Peter Richmond Petr Malac PhaineOfCatz RafaÅ‚ Michno + RAMupgrade Raymond Harris Reilt Rene Tailleur @@ -283,7 +277,6 @@ generous deed immortalized in the next stable release of Godot Engine. Rickard Hermanson Rob Robert McDermott - Robert Willes Rob McInroy Rocknight Studios RodZilla @@ -293,6 +286,7 @@ generous deed immortalized in the next stable release of Godot Engine. Russ Ryan Breaker Ryan Heath + Ryan Miller Ryan Scott Samuel Hummerstone Samuel Judd @@ -307,17 +301,15 @@ generous deed immortalized in the next stable release of Godot Engine. Song Junwoo spacechase0 Stephan Hennion - Stephen Brown Steven Landow Stoned Xander - Super Izzo - Sven F. - Thomas Bjarnelöf + Teslatech Thomas Kurz - Timothy van der Valk + Tim Suess Tobias Bocanegra Tobias Raggl Todd Smith + Tom Glenn Tom Wor Torbulous toto bibi @@ -331,7 +323,6 @@ generous deed immortalized in the next stable release of Godot Engine. xzibiting Yifan Lai Yuancheng Zhang - Ðртём Равбецкий ## Silver donors @@ -344,12 +335,14 @@ generous deed immortalized in the next stable release of Godot Engine. Adam McCurdy Adam N Webber Adam Smeltzer - Adam SzymaÅ„ski Adisibio + Adriano Orioli Adrien de Pierres Agustinus Arya Aidan O'Flannagain Aki Mimoto + Akio Yamazaki + Alaksandr SuÅ¡a Alan Beauchamp Albert Gyulgazyan Alberto Salazar Muñoz @@ -362,9 +355,9 @@ generous deed immortalized in the next stable release of Godot Engine. Alex Chan Alex Clavelle alex raeside - Alex (Well Done Games) Allan Davis Allen Schade + Amar Å ahinović Andre Altmueller Andre Stackhouse Andrew Groot @@ -377,13 +370,15 @@ generous deed immortalized in the next stable release of Godot Engine. Antti Vesanen Arch Toasty Arda Erol - Arseniy M Arthur Brainville Arturo Rosales Ashley Claymore Aubrey Falconer Auré Franky aurelien condomines + Austin Finlinson + Austin Miller + Azar Gurbanov AzulCrescent b110110 Balázs Batári @@ -398,14 +393,10 @@ generous deed immortalized in the next stable release of Godot Engine. bitbrain Bjarne Voigtländer Black Block - Blair Allen Blunderjack - Bobby CC Wong Brad Harms Bram - Brandon - Brian Klein - Brodie Fairhall + Brian Ford Bronson Zgeb Burney Waring Caleb Gartner @@ -418,24 +409,26 @@ generous deed immortalized in the next stable release of Godot Engine. Cassidy James Chad Steadman Checkpoint Charlie - ChrBohm Chris Jagusch Chris Langford + Chris Ridenour Christian Mauduit Christian Winter Christoffer Dahlblom Christophe Gagnier Christopher Chin Christoph Woinke - Codecat + ClicheChloe Cody Parker Conall O Conner Lane Corchari Corey W Craig Post + CT + Cullen Canejo Dakota Watkins - Daniel Cheney + Danielle Cheney Daren Scot Wilson Dave Walker David Baker @@ -444,7 +437,6 @@ generous deed immortalized in the next stable release of Godot Engine. David Maziarka David Rapisarda Devin Carraway - Diego Pereira Dimitri Roche Dmytro Korchynskyi Dominik Wetzel @@ -459,8 +451,10 @@ generous deed immortalized in the next stable release of Godot Engine. Edward Herbert Edward Swartz Egon Elbre + eiki kanou Elgenzay Elias Nykrem + Elijah Anderson Emerson MX Ephemeral Eric Stokes @@ -477,15 +471,14 @@ generous deed immortalized in the next stable release of Godot Engine. Felix Bohmann Fer DC Filip Lundby - Francisco Garcia Florez Frank - freakazoid FrostMarble Game Endeavor Garett Bass Gary Thomas gebba George Marques + Gon Shibayama Green Fox Greg Lincoln Greg Olson @@ -496,18 +489,15 @@ generous deed immortalized in the next stable release of Godot Engine. Guldoman Guo Hongci gurehamu - Hal A Haplo Hayden Foley Heribert Hirth - Hinken Ian Richard Kunert Ian Williams - Idilio Alfaro IndustrialRobot - Ivan Nikolaev + Inki Crow iveks - izzy neuhaus + izzy kestrel Jackson Harmer Jacob D Jaguar @@ -523,7 +513,6 @@ generous deed immortalized in the next stable release of Godot Engine. Jamie Massey Janis Skuja Jan Vetulani - Japortie JARKKO PARVIAINEN Jason Bolton Jason Evans @@ -536,10 +525,8 @@ generous deed immortalized in the next stable release of Godot Engine. Jim Engstrand Joe Hurdle Joe Klemmer - Joel Höglund John Anders Stav John Bruce - John Gabriel Jonas Jonas Arndt Jonas Bernemann @@ -550,7 +537,6 @@ generous deed immortalized in the next stable release of Godot Engine. Jonathan Ellis Jonathan G Jonathan Turner - Jon Bonazza Jon Sully Jordan West Jordy Goodridge @@ -562,22 +548,19 @@ generous deed immortalized in the next stable release of Godot Engine. Josh Taylor Joshua Heidrich Joshua Segall - jromkjrom Juanfran Juan Maggi Juan Uys Jueast Julian le Roux Julian Murgia - June Little Justin Hamilton - Justin Oaksford Justin Spedding KaDokta Karol Wojtasiuk (Drakonter) Katsuomi Kobayashi Keedong Park - keeganstoybox + Keegan Scott Keinan Powers Keith Bradner Kenji Kawabata @@ -585,43 +568,43 @@ generous deed immortalized in the next stable release of Godot Engine. Kent Jofur Kerotasma Ketafuki - Kiri Jolly + killaQueen Kodera Software Kolandrious Kquona - Krishna Nadoor Kristian Nygaard Jensen - KR McGinley - Kronarq KsyTek Games kycho Kyle Burnett Kyle Jacobs - Kyuppin La diagonale du poulpe Lasse le Dous Laurent CHEA Laurent Dethoor Laxman Pradhan Leland Vakarian + Lemin LEMMiNO + Leonardo Baumle Leonardo Dimano + Levi Lindsey Linus Lind Lundgren Logan Apple Ludovic DELVAL Luigi Renna Luis Gaemperle + Luis M Luke Kasz - LunaticInAHat Major Haul Malcolm Marco Lardelli + Marcos Heitor Carvalho + Markie Music Mark Jad Mark Malone Markus Martin Markus Michael Egger Markus Strompen - Martin FIbik Martin Holas Martin Linklater Martin LiÅ¡ka @@ -629,33 +612,34 @@ generous deed immortalized in the next stable release of Godot Engine. Martin Zabinski Matt Edwards Matthew Booe - Matt Sylvia Maverick - Max Fiedler Maxime Blade Maxime Santerre Maxwell + McStuffings + meinkush Melissa Mears Merlyn Morgan-Graham Metal Demon 2000 mhilbrunner Michael - Michael Bruce-Lockhart Michael Haney Michael Morrison - Michael Toporkov MichaÅ‚ Skwarek Mikael Nordenberg + Mikail Freitas Mikayla Mike Birkhead Mike Copley - Mitchell + Miss Mitchell J. Wagner + Mitchell White MJacred ModularMind Molinghu Molly Jameson MoltenGears + Moowool moulefrite MrAZIE Mrjemandem @@ -673,46 +657,46 @@ generous deed immortalized in the next stable release of Godot Engine. Niclas Eriksen Nicolas Goll-Perrier Nicolas Rosset + Nicolò Brigadoi Calamari Nils Nordmark Nima Farid Noel Billig Noesis - oceoh Okatima Oleg Reva Oliver Ambrose oscar1000108 Oscar Domingo + Panagiotis Xynos Pascal Patrick Indermühle Patrickm Patrick Nafarrete Patrick Wuttke - Paul E Hansen Paul Gieske PaweÅ‚ Kowal PaweÅ‚ Åyczkowski Peter Höglund - Philip Cohoe Philip Ludington (MrPhil) + Philip Woods Pierre Caye - pingudroid + Pixel Archipel pj Point08 Preethi Vaidyanathan PsycHead + Puntigames pwab - RabidTunes RackBar Dingum Rafa Laguna Raffaele Aramo Ragnar Pettersson Rainer Amler - Rami Hanano Rammeow - RAMupgrade + Recep Karademir red1939 Remi Rampin + Remtaine Reneator René Habermann Riccardo Marini @@ -733,20 +717,18 @@ generous deed immortalized in the next stable release of Godot Engine. Roy Scayged Ryan Groom Rykk - Sam Caulfield Sam Edson Sammy Fischer Sangeeth Pavithran schroedinger's possum Scott Longley - Sean Wall + Sean Dee Sebastian Michailidis SeongWan Kim Sessamekesh SeungJong k Shaidak Shane - Shane Abraham Shane Sicienski Shane Spoor Silver1063 @@ -764,6 +746,7 @@ generous deed immortalized in the next stable release of Godot Engine. Soheib El-Harrache Solene Waked Sophie Winter + Squidgy Squirrel Stéphane Roussel Stephen Rice @@ -791,7 +774,6 @@ generous deed immortalized in the next stable release of Godot Engine. Tim Gleason Tim Klein Timothy B. MacDonald - tinyBigGAMES LLC Title Plinsut TMoney Toadile @@ -804,11 +786,12 @@ generous deed immortalized in the next stable release of Godot Engine. Travis O'Brien Trent Skinner tril zerobyte - Troy Bonneau Tryggve Sollid Turgut Temucin + tweedle Tycho Tyler Stafos + Ukko K. UltyX Uther v01tech @@ -825,15 +808,12 @@ generous deed immortalized in the next stable release of Godot Engine. William Bodin William Edwards William F Siqueira - William Hogben Woonki Moon Wyatt Goodin - xenomat yakcyll Yan Shi Yegor Smirnov Zach H. - Zak Stephens Zher Huei Lee è•æƒŸå… è²´å® å°æ¾ diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 12d936d456..7145e628c1 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -41,7 +41,6 @@ #include "core/os/keyboard.h" #include "core/variant/variant_parser.h" #include "core/version.h" - #include "modules/modules_enabled.gen.h" // For mono. const String ProjectSettings::PROJECT_DATA_DIR_NAME_SUFFIX = "godot"; @@ -1200,6 +1199,10 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF_BASIC("audio/buses/default_bus_layout", "res://default_bus_layout.tres"); custom_prop_info["audio/buses/default_bus_layout"] = PropertyInfo(Variant::STRING, "audio/buses/default_bus_layout", PROPERTY_HINT_FILE, "*.tres"); + GLOBAL_DEF_RST("audio/general/2d_panning_strength", 1.0f); + custom_prop_info["audio/general/2d_panning_strength"] = PropertyInfo(Variant::FLOAT, "audio/general/2d_panning_strength", PROPERTY_HINT_RANGE, "0,4,0.01"); + GLOBAL_DEF_RST("audio/general/3d_panning_strength", 1.0f); + custom_prop_info["audio/general/3d_panning_strength"] = PropertyInfo(Variant::FLOAT, "audio/general/3d_panning_strength", PROPERTY_HINT_RANGE, "0,4,0.01"); PackedStringArray extensions = PackedStringArray(); extensions.push_back("gd"); diff --git a/core/core_bind.cpp b/core/core_bind.cpp index 194c7fdefd..8fafc459e3 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -2076,9 +2076,9 @@ bool ClassDB::has_integer_constant(const StringName &p_class, const StringName & return success; } -int ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name) const { +int64_t ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name) const { bool found; - int c = ::ClassDB::get_integer_constant(p_class, p_name, &found); + int64_t c = ::ClassDB::get_integer_constant(p_class, p_name, &found); ERR_FAIL_COND_V(!found, 0); return c; } diff --git a/core/core_bind.h b/core/core_bind.h index e4d15d5c9d..c2098b1b59 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -604,7 +604,7 @@ public: PackedStringArray get_integer_constant_list(const StringName &p_class, bool p_no_inheritance = false) const; bool has_integer_constant(const StringName &p_class, const StringName &p_name) const; - int get_integer_constant(const StringName &p_class, const StringName &p_name) const; + int64_t get_integer_constant(const StringName &p_class, const StringName &p_name) const; bool has_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false) const; PackedStringArray get_enum_list(const StringName &p_class, bool p_no_inheritance = false) const; diff --git a/core/core_constants.cpp b/core/core_constants.cpp index bbc937d575..1f46223a1d 100644 --- a/core/core_constants.cpp +++ b/core/core_constants.cpp @@ -42,19 +42,19 @@ struct _CoreConstant { bool ignore_value_in_docs = false; #endif const char *name = nullptr; - int value = 0; + int64_t value = 0; _CoreConstant() {} #ifdef DEBUG_METHODS_ENABLED - _CoreConstant(const StringName &p_enum_name, const char *p_name, int p_value, bool p_ignore_value_in_docs = false) : + _CoreConstant(const StringName &p_enum_name, const char *p_name, int64_t p_value, bool p_ignore_value_in_docs = false) : enum_name(p_enum_name), ignore_value_in_docs(p_ignore_value_in_docs), name(p_name), value(p_value) { } #else - _CoreConstant(const char *p_name, int p_value) : + _CoreConstant(const char *p_name, int64_t p_value) : name(p_name), value(p_value) { } @@ -73,13 +73,13 @@ static Vector<_CoreConstant> _global_constants; // This just binds enum classes as if they were regular enum constants. #define BIND_CORE_ENUM_CLASS_CONSTANT(m_enum, m_prefix, m_member) \ - _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int)m_enum::m_member)); + _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int64_t)m_enum::m_member)); #define BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(m_enum, m_name, m_member) \ - _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_name), #m_name, (int)m_enum::m_member)); + _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_name), #m_name, (int64_t)m_enum::m_member)); #define BIND_CORE_ENUM_CLASS_CONSTANT_NO_VAL(m_enum, m_prefix, m_member) \ - _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int)m_enum::m_member, true)); + _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int64_t)m_enum::m_member, true)); #define BIND_CORE_ENUM_CONSTANT_CUSTOM(m_custom_name, m_constant) \ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_constant, #m_constant), m_custom_name, m_constant)); @@ -103,13 +103,13 @@ static Vector<_CoreConstant> _global_constants; // This just binds enum classes as if they were regular enum constants. #define BIND_CORE_ENUM_CLASS_CONSTANT(m_enum, m_prefix, m_member) \ - _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int)m_enum::m_member)); + _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int64_t)m_enum::m_member)); #define BIND_CORE_ENUM_CLASS_CONSTANT_CUSTOM(m_enum, m_name, m_member) \ - _global_constants.push_back(_CoreConstant(#m_name, (int)m_enum::m_member)); + _global_constants.push_back(_CoreConstant(#m_name, (int64_t)m_enum::m_member)); #define BIND_CORE_ENUM_CLASS_CONSTANT_NO_VAL(m_enum, m_prefix, m_member) \ - _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int)m_enum::m_member)); + _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int64_t)m_enum::m_member)); #define BIND_CORE_ENUM_CONSTANT_CUSTOM(m_custom_name, m_constant) \ _global_constants.push_back(_CoreConstant(m_custom_name, m_constant)); @@ -213,6 +213,25 @@ void register_global_constants() { BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F14); BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F15); BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F16); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F17); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F18); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F19); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F20); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F21); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F22); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F23); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F24); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F25); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F26); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F27); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F28); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F29); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F30); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F31); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F32); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F33); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F34); + BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F35); BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_MULTIPLY); BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_DIVIDE); BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, KP_SUBTRACT); @@ -552,6 +571,7 @@ void register_global_constants() { BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_ENUM_SUGGESTION); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_EXP_EASING); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_LENGTH); + BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_LINK); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_KEY_ACCEL); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_FLAGS); @@ -587,6 +607,7 @@ void register_global_constants() { BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_OBJECT_TOO_BIG); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_NODE_PATH_VALID_TYPES); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_SAVE_FILE); + BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_GLOBAL_SAVE_FILE); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_INT_IS_OBJECTID); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_INT_IS_POINTER); BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_ARRAY_TYPE); @@ -752,6 +773,6 @@ const char *CoreConstants::get_global_constant_name(int p_idx) { return _global_constants[p_idx].name; } -int CoreConstants::get_global_constant_value(int p_idx) { +int64_t CoreConstants::get_global_constant_value(int p_idx) { return _global_constants[p_idx].value; } diff --git a/core/core_constants.h b/core/core_constants.h index 9302c23959..d5b3b156b2 100644 --- a/core/core_constants.h +++ b/core/core_constants.h @@ -39,7 +39,7 @@ public: static StringName get_global_constant_enum(int p_idx); static bool get_ignore_value_in_docs(int p_idx); static const char *get_global_constant_name(int p_idx); - static int get_global_constant_value(int p_idx); + static int64_t get_global_constant_value(int p_idx); }; #endif // GLOBAL_CONSTANTS_H diff --git a/core/extension/extension_api_dump.cpp b/core/extension/extension_api_dump.cpp index 9e8addf8aa..edd48cf9cd 100644 --- a/core/extension/extension_api_dump.cpp +++ b/core/extension/extension_api_dump.cpp @@ -334,14 +334,14 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() { { // Global enums and constants. Array constants; - HashMap<String, List<Pair<String, int>>> enum_list; + HashMap<String, List<Pair<String, int64_t>>> enum_list; for (int i = 0; i < CoreConstants::get_global_constant_count(); i++) { - int value = CoreConstants::get_global_constant_value(i); + int64_t value = CoreConstants::get_global_constant_value(i); String enum_name = CoreConstants::get_global_constant_enum(i); String name = CoreConstants::get_global_constant_name(i); if (!enum_name.is_empty()) { - enum_list[enum_name].push_back(Pair<String, int>(name, value)); + enum_list[enum_name].push_back(Pair<String, int64_t>(name, value)); } else { Dictionary d; d["name"] = name; @@ -353,11 +353,11 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() { api_dump["global_constants"] = constants; Array enums; - for (const KeyValue<String, List<Pair<String, int>>> &E : enum_list) { + for (const KeyValue<String, List<Pair<String, int64_t>>> &E : enum_list) { Dictionary d1; d1["name"] = E.key; Array values; - for (const Pair<String, int> &F : E.value) { + for (const Pair<String, int64_t> &F : E.value) { Dictionary d2; d2["name"] = F.first; d2["value"] = F.second; diff --git a/core/extension/native_extension.cpp b/core/extension/native_extension.cpp index 5738b42049..ebdfa20725 100644 --- a/core/extension/native_extension.cpp +++ b/core/extension/native_extension.cpp @@ -281,6 +281,7 @@ void NativeExtension::_get_library_path(const GDNativeExtensionClassLibraryPtr p Error NativeExtension::open_library(const String &p_path, const String &p_entry_symbol) { Error err = OS::get_singleton()->open_dynamic_library(p_path, library, true, &library_path); if (err != OK) { + ERR_PRINT("GDExtension dynamic library not found: " + p_path); return err; } @@ -289,15 +290,20 @@ Error NativeExtension::open_library(const String &p_path, const String &p_entry_ err = OS::get_singleton()->get_dynamic_library_symbol_handle(library, p_entry_symbol, entry_funcptr, false); if (err != OK) { + ERR_PRINT("GDExtension entry point '" + p_entry_symbol + "' not found in library " + p_path); OS::get_singleton()->close_dynamic_library(library); return err; } GDNativeInitializationFunction initialization_function = (GDNativeInitializationFunction)entry_funcptr; - initialization_function(&gdnative_interface, this, &initialization); - level_initialized = -1; - return OK; + if (initialization_function(&gdnative_interface, this, &initialization)) { + level_initialized = -1; + return OK; + } else { + ERR_PRINT("GDExtension initialization function '" + p_entry_symbol + "' returned an error."); + return FAILED; + } } void NativeExtension::close_library() { @@ -384,6 +390,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St } if (err != OK) { + ERR_PRINT("Error loading GDExtension config file: " + p_path); return Ref<Resource>(); } @@ -391,6 +398,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St if (r_error) { *r_error = ERR_INVALID_DATA; } + ERR_PRINT("GDExtension config file must contain 'configuration.entry_symbol' key: " + p_path); return Ref<Resource>(); } @@ -423,6 +431,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St if (r_error) { *r_error = ERR_FILE_NOT_FOUND; } + ERR_PRINT("No GDExtension library found for current architecture; in config file " + p_path); return Ref<Resource>(); } @@ -440,6 +449,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St } if (err != OK) { + // Errors already logged in open_library() return Ref<Resource>(); } diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp index 2d4c203748..32e025417e 100644 --- a/core/input/input_event.cpp +++ b/core/input/input_event.cpp @@ -525,8 +525,8 @@ void InputEventMouse::_bind_methods() { ClassDB::bind_method(D_METHOD("get_global_position"), &InputEventMouse::get_global_position); ADD_PROPERTY(PropertyInfo(Variant::INT, "button_mask"), "set_button_mask", "get_button_mask"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position"), "set_global_position", "get_global_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_NONE, "suffix:px"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "suffix:px"), "set_global_position", "get_global_position"); } /////////////////////////////////// @@ -867,8 +867,8 @@ void InputEventMouseMotion::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "tilt"), "set_tilt", "get_tilt"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pressure"), "set_pressure", "get_pressure"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative"), "set_relative", "get_relative"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity"), "set_velocity", "get_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative", PROPERTY_HINT_NONE, "suffix:px"), "set_relative", "get_relative"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity", PROPERTY_HINT_NONE, "suffix:px/s"), "set_velocity", "get_velocity"); } /////////////////////////////////// @@ -1167,7 +1167,7 @@ void InputEventScreenTouch::_bind_methods() { //ClassDB::bind_method(D_METHOD("is_pressed"),&InputEventScreenTouch::is_pressed); ADD_PROPERTY(PropertyInfo(Variant::INT, "index"), "set_index", "get_index"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_NONE, "suffix:px"), "set_position", "get_position"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "pressed"), "set_pressed", "is_pressed"); } @@ -1260,9 +1260,9 @@ void InputEventScreenDrag::_bind_methods() { ClassDB::bind_method(D_METHOD("get_velocity"), &InputEventScreenDrag::get_velocity); ADD_PROPERTY(PropertyInfo(Variant::INT, "index"), "set_index", "get_index"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative"), "set_relative", "get_relative"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity"), "set_velocity", "get_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_NONE, "suffix:px"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative", PROPERTY_HINT_NONE, "suffix:px"), "set_relative", "get_relative"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity", PROPERTY_HINT_NONE, "suffix:px/s"), "set_velocity", "get_velocity"); } /////////////////////////////////// @@ -1362,7 +1362,7 @@ void InputEventGesture::_bind_methods() { ClassDB::bind_method(D_METHOD("set_position", "position"), &InputEventGesture::set_position); ClassDB::bind_method(D_METHOD("get_position"), &InputEventGesture::get_position); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_NONE, "suffix:px"), "set_position", "get_position"); } Vector2 InputEventGesture::get_position() const { diff --git a/core/io/file_access_pack.h b/core/io/file_access_pack.h index 19a0cce796..e656f6b885 100644 --- a/core/io/file_access_pack.h +++ b/core/io/file_access_pack.h @@ -84,8 +84,8 @@ private: return (a == p_val.a) && (b == p_val.b); } static uint32_t hash(const PathMD5 &p_val) { - uint32_t h = hash_djb2_one_32(p_val.a); - return hash_djb2_one_32(p_val.b, h); + uint32_t h = hash_murmur3_one_32(p_val.a); + return hash_fmix32(hash_murmur3_one_32(p_val.b, h)); } PathMD5() {} diff --git a/core/io/image.cpp b/core/io/image.cpp index dfba45c4e9..a945d3e6cd 100644 --- a/core/io/image.cpp +++ b/core/io/image.cpp @@ -81,9 +81,14 @@ const char *Image::format_names[Image::FORMAT_MAX] = { }; SavePNGFunc Image::save_png_func = nullptr; +SaveJPGFunc Image::save_jpg_func = nullptr; SaveEXRFunc Image::save_exr_func = nullptr; SavePNGBufferFunc Image::save_png_buffer_func = nullptr; +SaveJPGBufferFunc Image::save_jpg_buffer_func = nullptr; + +SaveWebPFunc Image::save_webp_func = nullptr; +SaveWebPBufferFunc Image::save_webp_buffer_func = nullptr; void Image::_put_pixelb(int p_x, int p_y, uint32_t p_pixel_size, uint8_t *p_data, const uint8_t *p_pixel) { uint32_t ofs = (p_y * width + p_x) * p_pixel_size; @@ -2286,6 +2291,14 @@ Error Image::save_png(const String &p_path) const { return save_png_func(p_path, Ref<Image>((Image *)this)); } +Error Image::save_jpg(const String &p_path, float p_quality) const { + if (save_jpg_func == nullptr) { + return ERR_UNAVAILABLE; + } + + return save_jpg_func(p_path, Ref<Image>((Image *)this), p_quality); +} + Vector<uint8_t> Image::save_png_to_buffer() const { if (save_png_buffer_func == nullptr) { return Vector<uint8_t>(); @@ -2294,6 +2307,14 @@ Vector<uint8_t> Image::save_png_to_buffer() const { return save_png_buffer_func(Ref<Image>((Image *)this)); } +Vector<uint8_t> Image::save_jpg_to_buffer(float p_quality) const { + if (save_jpg_buffer_func == nullptr) { + return Vector<uint8_t>(); + } + + return save_jpg_buffer_func(Ref<Image>((Image *)this), p_quality); +} + Error Image::save_exr(const String &p_path, bool p_grayscale) const { if (save_exr_func == nullptr) { return ERR_UNAVAILABLE; @@ -2302,6 +2323,24 @@ Error Image::save_exr(const String &p_path, bool p_grayscale) const { return save_exr_func(p_path, Ref<Image>((Image *)this), p_grayscale); } +Error Image::save_webp(const String &p_path, const bool p_lossy, const float p_quality) const { + if (save_webp_func == nullptr) { + return ERR_UNAVAILABLE; + } + ERR_FAIL_COND_V_MSG(p_lossy && !(0.0f <= p_quality && p_quality <= 1.0f), ERR_INVALID_PARAMETER, "The WebP lossy quality was set to " + rtos(p_quality) + ", which is not valid. WebP lossy quality must be between 0.0 and 1.0 (inclusive)."); + + return save_webp_func(p_path, Ref<Image>((Image *)this), p_lossy, p_quality); +} + +Vector<uint8_t> Image::save_webp_to_buffer(const bool p_lossy, const float p_quality) const { + if (save_webp_buffer_func == nullptr) { + return Vector<uint8_t>(); + } + ERR_FAIL_COND_V_MSG(p_lossy && !(0.0f <= p_quality && p_quality <= 1.0f), Vector<uint8_t>(), "The WebP lossy quality was set to " + rtos(p_quality) + ", which is not valid. WebP lossy quality must be between 0.0 and 1.0 (inclusive)."); + + return save_webp_buffer_func(Ref<Image>((Image *)this), p_lossy, p_quality); +} + int Image::get_image_data_size(int p_width, int p_height, Format p_format, bool p_mipmaps) { int mm; return _get_dst_image_size(p_width, p_height, p_format, mm, p_mipmaps ? -1 : 0); @@ -3138,7 +3177,11 @@ void Image::_bind_methods() { ClassDB::bind_method(D_METHOD("load", "path"), &Image::load); ClassDB::bind_method(D_METHOD("save_png", "path"), &Image::save_png); ClassDB::bind_method(D_METHOD("save_png_to_buffer"), &Image::save_png_to_buffer); + ClassDB::bind_method(D_METHOD("save_jpg", "path", "quality"), &Image::save_jpg, DEFVAL(0.75)); + ClassDB::bind_method(D_METHOD("save_jpg_to_buffer", "quality"), &Image::save_jpg_to_buffer, DEFVAL(0.75)); ClassDB::bind_method(D_METHOD("save_exr", "path", "grayscale"), &Image::save_exr, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("save_webp", "path", "lossy", "quality"), &Image::save_webp, DEFVAL(false), DEFVAL(0.75f)); + ClassDB::bind_method(D_METHOD("save_webp_to_buffer", "lossy", "quality"), &Image::save_webp_to_buffer, DEFVAL(false), DEFVAL(0.75f)); ClassDB::bind_method(D_METHOD("detect_alpha"), &Image::detect_alpha); ClassDB::bind_method(D_METHOD("is_invisible"), &Image::is_invisible); diff --git a/core/io/image.h b/core/io/image.h index 1025554d51..229103f792 100644 --- a/core/io/image.h +++ b/core/io/image.h @@ -45,7 +45,11 @@ class Image; typedef Error (*SavePNGFunc)(const String &p_path, const Ref<Image> &p_img); typedef Vector<uint8_t> (*SavePNGBufferFunc)(const Ref<Image> &p_img); +typedef Error (*SaveJPGFunc)(const String &p_path, const Ref<Image> &p_img, float p_quality); +typedef Vector<uint8_t> (*SaveJPGBufferFunc)(const Ref<Image> &p_img, float p_quality); typedef Ref<Image> (*ImageMemLoadFunc)(const uint8_t *p_png, int p_size); +typedef Error (*SaveWebPFunc)(const String &p_path, const Ref<Image> &p_img, const bool p_lossy, const float p_quality); +typedef Vector<uint8_t> (*SaveWebPBufferFunc)(const Ref<Image> &p_img, const bool p_lossy, const float p_quality); typedef Error (*SaveEXRFunc)(const String &p_path, const Ref<Image> &p_img, bool p_grayscale); @@ -54,8 +58,12 @@ class Image : public Resource { public: static SavePNGFunc save_png_func; + static SaveJPGFunc save_jpg_func; static SaveEXRFunc save_exr_func; static SavePNGBufferFunc save_png_buffer_func; + static SaveJPGBufferFunc save_jpg_buffer_func; + static SaveWebPFunc save_webp_func; + static SaveWebPBufferFunc save_webp_buffer_func; enum { MAX_WIDTH = (1 << 24), // force a limit somehow @@ -281,8 +289,12 @@ public: Error load(const String &p_path); Error save_png(const String &p_path) const; + Error save_jpg(const String &p_path, float p_quality = 0.75) const; Vector<uint8_t> save_png_to_buffer() const; + Vector<uint8_t> save_jpg_to_buffer(float p_quality = 0.75) const; Error save_exr(const String &p_path, bool p_grayscale) const; + Error save_webp(const String &p_path, const bool p_lossy = false, const float p_quality = 0.75f) const; + Vector<uint8_t> save_webp_to_buffer(const bool p_lossy = false, const float p_quality = 0.75f) const; void create_empty(int p_width, int p_height, bool p_use_mipmaps, Format p_format) { create(p_width, p_height, p_use_mipmaps, p_format); diff --git a/core/io/resource.cpp b/core/io/resource.cpp index ad01eb1083..ed7228d0b9 100644 --- a/core/io/resource.cpp +++ b/core/io/resource.cpp @@ -100,14 +100,14 @@ String Resource::generate_scene_unique_id() { // If it's not unique it does not matter because the saver will try again. OS::Date date = OS::get_singleton()->get_date(); OS::Time time = OS::get_singleton()->get_time(); - uint32_t hash = hash_djb2_one_32(OS::get_singleton()->get_ticks_usec()); - hash = hash_djb2_one_32(date.year, hash); - hash = hash_djb2_one_32(date.month, hash); - hash = hash_djb2_one_32(date.day, hash); - hash = hash_djb2_one_32(time.hour, hash); - hash = hash_djb2_one_32(time.minute, hash); - hash = hash_djb2_one_32(time.second, hash); - hash = hash_djb2_one_32(Math::rand(), hash); + uint32_t hash = hash_murmur3_one_32(OS::get_singleton()->get_ticks_usec()); + hash = hash_murmur3_one_32(date.year, hash); + hash = hash_murmur3_one_32(date.month, hash); + hash = hash_murmur3_one_32(date.day, hash); + hash = hash_murmur3_one_32(time.hour, hash); + hash = hash_murmur3_one_32(time.minute, hash); + hash = hash_murmur3_one_32(time.second, hash); + hash = hash_murmur3_one_32(Math::rand(), hash); static constexpr uint32_t characters = 5; static constexpr uint32_t char_count = ('z' - 'a'); @@ -328,7 +328,7 @@ void Resource::notify_change_to_owners() { #ifdef TOOLS_ENABLED uint32_t Resource::hash_edited_version() const { - uint32_t hash = hash_djb2_one_32(get_edited_version()); + uint32_t hash = hash_murmur3_one_32(get_edited_version()); List<PropertyInfo> plist; get_property_list(&plist); @@ -337,7 +337,7 @@ uint32_t Resource::hash_edited_version() const { if (E.usage & PROPERTY_USAGE_STORAGE && E.type == Variant::OBJECT && E.hint == PROPERTY_HINT_RESOURCE_TYPE) { Ref<Resource> res = get(E.name); if (res.is_valid()) { - hash = hash_djb2_one_32(res->hash_edited_version(), hash); + hash = hash_murmur3_one_32(res->hash_edited_version(), hash); } } } diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index efa970c681..41a0848d01 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -33,19 +33,19 @@ #include "core/math/geometry_3d.h" #include "core/object/script_language.h" -int AStar3D::get_available_point_id() const { +int64_t AStar3D::get_available_point_id() const { if (points.has(last_free_id)) { - int cur_new_id = last_free_id + 1; + int64_t cur_new_id = last_free_id + 1; while (points.has(cur_new_id)) { cur_new_id++; } - const_cast<int &>(last_free_id) = cur_new_id; + const_cast<int64_t &>(last_free_id) = cur_new_id; } return last_free_id; } -void AStar3D::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) { +void AStar3D::add_point(int64_t p_id, const Vector3 &p_pos, real_t p_weight_scale) { ERR_FAIL_COND_MSG(p_id < 0, vformat("Can't add a point with negative id: %d.", p_id)); ERR_FAIL_COND_MSG(p_weight_scale < 0.0, vformat("Can't add a point with weight scale less than 0.0: %f.", p_weight_scale)); @@ -68,7 +68,7 @@ void AStar3D::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) { } } -Vector3 AStar3D::get_point_position(int p_id) const { +Vector3 AStar3D::get_point_position(int64_t p_id) const { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_V_MSG(!p_exists, Vector3(), vformat("Can't get point's position. Point with id: %d doesn't exist.", p_id)); @@ -76,7 +76,7 @@ Vector3 AStar3D::get_point_position(int p_id) const { return p->pos; } -void AStar3D::set_point_position(int p_id, const Vector3 &p_pos) { +void AStar3D::set_point_position(int64_t p_id, const Vector3 &p_pos) { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set point's position. Point with id: %d doesn't exist.", p_id)); @@ -84,7 +84,7 @@ void AStar3D::set_point_position(int p_id, const Vector3 &p_pos) { p->pos = p_pos; } -real_t AStar3D::get_point_weight_scale(int p_id) const { +real_t AStar3D::get_point_weight_scale(int64_t p_id) const { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_V_MSG(!p_exists, 0, vformat("Can't get point's weight scale. Point with id: %d doesn't exist.", p_id)); @@ -92,7 +92,7 @@ real_t AStar3D::get_point_weight_scale(int p_id) const { return p->weight_scale; } -void AStar3D::set_point_weight_scale(int p_id, real_t p_weight_scale) { +void AStar3D::set_point_weight_scale(int64_t p_id, real_t p_weight_scale) { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set point's weight scale. Point with id: %d doesn't exist.", p_id)); @@ -101,12 +101,12 @@ void AStar3D::set_point_weight_scale(int p_id, real_t p_weight_scale) { p->weight_scale = p_weight_scale; } -void AStar3D::remove_point(int p_id) { +void AStar3D::remove_point(int64_t p_id) { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_MSG(!p_exists, vformat("Can't remove point. Point with id: %d doesn't exist.", p_id)); - for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { Segment s(p_id, (*it.key)); segments.erase(s); @@ -114,7 +114,7 @@ void AStar3D::remove_point(int p_id) { (*it.value)->unlinked_neighbours.remove(p->id); } - for (OAHashMap<int, Point *>::Iterator it = p->unlinked_neighbours.iter(); it.valid; it = p->unlinked_neighbours.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = p->unlinked_neighbours.iter(); it.valid; it = p->unlinked_neighbours.next_iter(it)) { Segment s(p_id, (*it.key)); segments.erase(s); @@ -127,7 +127,7 @@ void AStar3D::remove_point(int p_id) { last_free_id = p_id; } -void AStar3D::connect_points(int p_id, int p_with_id, bool bidirectional) { +void AStar3D::connect_points(int64_t p_id, int64_t p_with_id, bool bidirectional) { ERR_FAIL_COND_MSG(p_id == p_with_id, vformat("Can't connect point with id: %d to itself.", p_id)); Point *a; @@ -165,7 +165,7 @@ void AStar3D::connect_points(int p_id, int p_with_id, bool bidirectional) { segments.insert(s); } -void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) { +void AStar3D::disconnect_points(int64_t p_id, int64_t p_with_id, bool bidirectional) { Point *a; bool a_exists = points.lookup(p_id, a); ERR_FAIL_COND_MSG(!a_exists, vformat("Can't disconnect points. Point with id: %d doesn't exist.", p_id)); @@ -175,7 +175,7 @@ void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) { ERR_FAIL_COND_MSG(!b_exists, vformat("Can't disconnect points. Point with id: %d doesn't exist.", p_with_id)); Segment s(p_id, p_with_id); - int remove_direction = bidirectional ? (int)Segment::BIDIRECTIONAL : s.direction; + int remove_direction = bidirectional ? (int)Segment::BIDIRECTIONAL : (int)s.direction; HashSet<Segment, Segment>::Iterator element = segments.find(s); if (element) { @@ -205,35 +205,35 @@ void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) { } } -bool AStar3D::has_point(int p_id) const { +bool AStar3D::has_point(int64_t p_id) const { return points.has(p_id); } Array AStar3D::get_point_ids() { Array point_list; - for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { point_list.push_back(*(it.key)); } return point_list; } -Vector<int> AStar3D::get_point_connections(int p_id) { +Vector<int64_t> AStar3D::get_point_connections(int64_t p_id) { Point *p; bool p_exists = points.lookup(p_id, p); - ERR_FAIL_COND_V_MSG(!p_exists, Vector<int>(), vformat("Can't get point's connections. Point with id: %d doesn't exist.", p_id)); + ERR_FAIL_COND_V_MSG(!p_exists, Vector<int64_t>(), vformat("Can't get point's connections. Point with id: %d doesn't exist.", p_id)); - Vector<int> point_list; + Vector<int64_t> point_list; - for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { point_list.push_back((*it.key)); } return point_list; } -bool AStar3D::are_points_connected(int p_id, int p_with_id, bool bidirectional) const { +bool AStar3D::are_points_connected(int64_t p_id, int64_t p_with_id, bool bidirectional) const { Segment s(p_id, p_with_id); const HashSet<Segment, Segment>::Iterator element = segments.find(s); @@ -243,32 +243,32 @@ bool AStar3D::are_points_connected(int p_id, int p_with_id, bool bidirectional) void AStar3D::clear() { last_free_id = 0; - for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { memdelete(*(it.value)); } segments.clear(); points.clear(); } -int AStar3D::get_point_count() const { +int64_t AStar3D::get_point_count() const { return points.get_num_elements(); } -int AStar3D::get_point_capacity() const { +int64_t AStar3D::get_point_capacity() const { return points.get_capacity(); } -void AStar3D::reserve_space(int p_num_nodes) { +void AStar3D::reserve_space(int64_t p_num_nodes) { ERR_FAIL_COND_MSG(p_num_nodes <= 0, vformat("New capacity must be greater than 0, new was: %d.", p_num_nodes)); ERR_FAIL_COND_MSG((uint32_t)p_num_nodes < points.get_capacity(), vformat("New capacity must be greater than current capacity: %d, new was: %d.", points.get_capacity(), p_num_nodes)); points.reserve(p_num_nodes); } -int AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled) const { - int closest_id = -1; +int64_t AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled) const { + int64_t closest_id = -1; real_t closest_dist = 1e20; - for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { if (!p_include_disabled && !(*it.value)->enabled) { continue; // Disabled points should not be considered. } @@ -276,7 +276,7 @@ int AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled) // Keep the closest point's ID, and in case of multiple closest IDs, // the smallest one (makes it deterministic). real_t d = p_point.distance_squared_to((*it.value)->pos); - int id = *(it.key); + int64_t id = *(it.key); if (d <= closest_dist) { if (d == closest_dist && id > closest_id) { // Keep lowest ID. continue; @@ -295,8 +295,8 @@ Vector3 AStar3D::get_closest_position_in_segment(const Vector3 &p_point) const { for (const Segment &E : segments) { Point *from_point = nullptr, *to_point = nullptr; - points.lookup(E.u, from_point); - points.lookup(E.v, to_point); + points.lookup(E.key.first, from_point); + points.lookup(E.key.second, to_point); if (!(from_point->enabled && to_point->enabled)) { continue; @@ -346,7 +346,7 @@ bool AStar3D::_solve(Point *begin_point, Point *end_point) { open_list.remove_at(open_list.size() - 1); p->closed_pass = pass; // Mark the point as closed - for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { + for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { Point *e = *(it.value); // The neighbour point if (!e->enabled || e->closed_pass == pass) { @@ -380,7 +380,7 @@ bool AStar3D::_solve(Point *begin_point, Point *end_point) { return found_route; } -real_t AStar3D::_estimate_cost(int p_from_id, int p_to_id) { +real_t AStar3D::_estimate_cost(int64_t p_from_id, int64_t p_to_id) { real_t scost; if (GDVIRTUAL_CALL(_estimate_cost, p_from_id, p_to_id, scost)) { return scost; @@ -397,7 +397,7 @@ real_t AStar3D::_estimate_cost(int p_from_id, int p_to_id) { return from_point->pos.distance_to(to_point->pos); } -real_t AStar3D::_compute_cost(int p_from_id, int p_to_id) { +real_t AStar3D::_compute_cost(int64_t p_from_id, int64_t p_to_id) { real_t scost; if (GDVIRTUAL_CALL(_compute_cost, p_from_id, p_to_id, scost)) { return scost; @@ -414,7 +414,7 @@ real_t AStar3D::_compute_cost(int p_from_id, int p_to_id) { return from_point->pos.distance_to(to_point->pos); } -Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) { +Vector<Vector3> AStar3D::get_point_path(int64_t p_from_id, int64_t p_to_id) { Point *a; bool from_exists = points.lookup(p_from_id, a); ERR_FAIL_COND_V_MSG(!from_exists, Vector<Vector3>(), vformat("Can't get point path. Point with id: %d doesn't exist.", p_from_id)); @@ -438,7 +438,7 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) { } Point *p = end_point; - int pc = 1; // Begin point + int64_t pc = 1; // Begin point while (p != begin_point) { pc++; p = p->prev_point; @@ -451,7 +451,7 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) { Vector3 *w = path.ptrw(); Point *p2 = end_point; - int idx = pc - 1; + int64_t idx = pc - 1; while (p2 != begin_point) { w[idx--] = p2->pos; p2 = p2->prev_point; @@ -463,17 +463,17 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) { return path; } -Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) { +Vector<int64_t> AStar3D::get_id_path(int64_t p_from_id, int64_t p_to_id) { Point *a; bool from_exists = points.lookup(p_from_id, a); - ERR_FAIL_COND_V_MSG(!from_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id)); + ERR_FAIL_COND_V_MSG(!from_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id)); Point *b; bool to_exists = points.lookup(p_to_id, b); - ERR_FAIL_COND_V_MSG(!to_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id)); + ERR_FAIL_COND_V_MSG(!to_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id)); if (a == b) { - Vector<int> ret; + Vector<int64_t> ret; ret.push_back(a->id); return ret; } @@ -483,24 +483,24 @@ Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) { bool found_route = _solve(begin_point, end_point); if (!found_route) { - return Vector<int>(); + return Vector<int64_t>(); } Point *p = end_point; - int pc = 1; // Begin point + int64_t pc = 1; // Begin point while (p != begin_point) { pc++; p = p->prev_point; } - Vector<int> path; + Vector<int64_t> path; path.resize(pc); { - int *w = path.ptrw(); + int64_t *w = path.ptrw(); p = end_point; - int idx = pc - 1; + int64_t idx = pc - 1; while (p != begin_point) { w[idx--] = p->id; p = p->prev_point; @@ -512,7 +512,7 @@ Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) { return path; } -void AStar3D::set_point_disabled(int p_id, bool p_disabled) { +void AStar3D::set_point_disabled(int64_t p_id, bool p_disabled) { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set if point is disabled. Point with id: %d doesn't exist.", p_id)); @@ -520,7 +520,7 @@ void AStar3D::set_point_disabled(int p_id, bool p_disabled) { p->enabled = !p_disabled; } -bool AStar3D::is_point_disabled(int p_id) const { +bool AStar3D::is_point_disabled(int64_t p_id) const { Point *p; bool p_exists = points.lookup(p_id, p); ERR_FAIL_COND_V_MSG(!p_exists, false, vformat("Can't get if point is disabled. Point with id: %d doesn't exist.", p_id)); @@ -568,40 +568,40 @@ AStar3D::~AStar3D() { ///////////////////////////////////////////////////////////// -int AStar2D::get_available_point_id() const { +int64_t AStar2D::get_available_point_id() const { return astar.get_available_point_id(); } -void AStar2D::add_point(int p_id, const Vector2 &p_pos, real_t p_weight_scale) { +void AStar2D::add_point(int64_t p_id, const Vector2 &p_pos, real_t p_weight_scale) { astar.add_point(p_id, Vector3(p_pos.x, p_pos.y, 0), p_weight_scale); } -Vector2 AStar2D::get_point_position(int p_id) const { +Vector2 AStar2D::get_point_position(int64_t p_id) const { Vector3 p = astar.get_point_position(p_id); return Vector2(p.x, p.y); } -void AStar2D::set_point_position(int p_id, const Vector2 &p_pos) { +void AStar2D::set_point_position(int64_t p_id, const Vector2 &p_pos) { astar.set_point_position(p_id, Vector3(p_pos.x, p_pos.y, 0)); } -real_t AStar2D::get_point_weight_scale(int p_id) const { +real_t AStar2D::get_point_weight_scale(int64_t p_id) const { return astar.get_point_weight_scale(p_id); } -void AStar2D::set_point_weight_scale(int p_id, real_t p_weight_scale) { +void AStar2D::set_point_weight_scale(int64_t p_id, real_t p_weight_scale) { astar.set_point_weight_scale(p_id, p_weight_scale); } -void AStar2D::remove_point(int p_id) { +void AStar2D::remove_point(int64_t p_id) { astar.remove_point(p_id); } -bool AStar2D::has_point(int p_id) const { +bool AStar2D::has_point(int64_t p_id) const { return astar.has_point(p_id); } -Vector<int> AStar2D::get_point_connections(int p_id) { +Vector<int64_t> AStar2D::get_point_connections(int64_t p_id) { return astar.get_point_connections(p_id); } @@ -609,31 +609,31 @@ Array AStar2D::get_point_ids() { return astar.get_point_ids(); } -void AStar2D::set_point_disabled(int p_id, bool p_disabled) { +void AStar2D::set_point_disabled(int64_t p_id, bool p_disabled) { astar.set_point_disabled(p_id, p_disabled); } -bool AStar2D::is_point_disabled(int p_id) const { +bool AStar2D::is_point_disabled(int64_t p_id) const { return astar.is_point_disabled(p_id); } -void AStar2D::connect_points(int p_id, int p_with_id, bool p_bidirectional) { +void AStar2D::connect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional) { astar.connect_points(p_id, p_with_id, p_bidirectional); } -void AStar2D::disconnect_points(int p_id, int p_with_id) { - astar.disconnect_points(p_id, p_with_id); +void AStar2D::disconnect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional) { + astar.disconnect_points(p_id, p_with_id, p_bidirectional); } -bool AStar2D::are_points_connected(int p_id, int p_with_id) const { - return astar.are_points_connected(p_id, p_with_id); +bool AStar2D::are_points_connected(int64_t p_id, int64_t p_with_id, bool p_bidirectional) const { + return astar.are_points_connected(p_id, p_with_id, p_bidirectional); } -int AStar2D::get_point_count() const { +int64_t AStar2D::get_point_count() const { return astar.get_point_count(); } -int AStar2D::get_point_capacity() const { +int64_t AStar2D::get_point_capacity() const { return astar.get_point_capacity(); } @@ -641,11 +641,11 @@ void AStar2D::clear() { astar.clear(); } -void AStar2D::reserve_space(int p_num_nodes) { +void AStar2D::reserve_space(int64_t p_num_nodes) { astar.reserve_space(p_num_nodes); } -int AStar2D::get_closest_point(const Vector2 &p_point, bool p_include_disabled) const { +int64_t AStar2D::get_closest_point(const Vector2 &p_point, bool p_include_disabled) const { return astar.get_closest_point(Vector3(p_point.x, p_point.y, 0), p_include_disabled); } @@ -654,7 +654,7 @@ Vector2 AStar2D::get_closest_position_in_segment(const Vector2 &p_point) const { return Vector2(p.x, p.y); } -real_t AStar2D::_estimate_cost(int p_from_id, int p_to_id) { +real_t AStar2D::_estimate_cost(int64_t p_from_id, int64_t p_to_id) { real_t scost; if (GDVIRTUAL_CALL(_estimate_cost, p_from_id, p_to_id, scost)) { return scost; @@ -671,7 +671,7 @@ real_t AStar2D::_estimate_cost(int p_from_id, int p_to_id) { return from_point->pos.distance_to(to_point->pos); } -real_t AStar2D::_compute_cost(int p_from_id, int p_to_id) { +real_t AStar2D::_compute_cost(int64_t p_from_id, int64_t p_to_id) { real_t scost; if (GDVIRTUAL_CALL(_compute_cost, p_from_id, p_to_id, scost)) { return scost; @@ -688,7 +688,7 @@ real_t AStar2D::_compute_cost(int p_from_id, int p_to_id) { return from_point->pos.distance_to(to_point->pos); } -Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) { +Vector<Vector2> AStar2D::get_point_path(int64_t p_from_id, int64_t p_to_id) { AStar3D::Point *a; bool from_exists = astar.points.lookup(p_from_id, a); ERR_FAIL_COND_V_MSG(!from_exists, Vector<Vector2>(), vformat("Can't get point path. Point with id: %d doesn't exist.", p_from_id)); @@ -711,7 +711,7 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) { } AStar3D::Point *p = end_point; - int pc = 1; // Begin point + int64_t pc = 1; // Begin point while (p != begin_point) { pc++; p = p->prev_point; @@ -724,7 +724,7 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) { Vector2 *w = path.ptrw(); AStar3D::Point *p2 = end_point; - int idx = pc - 1; + int64_t idx = pc - 1; while (p2 != begin_point) { w[idx--] = Vector2(p2->pos.x, p2->pos.y); p2 = p2->prev_point; @@ -736,17 +736,17 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) { return path; } -Vector<int> AStar2D::get_id_path(int p_from_id, int p_to_id) { +Vector<int64_t> AStar2D::get_id_path(int64_t p_from_id, int64_t p_to_id) { AStar3D::Point *a; bool from_exists = astar.points.lookup(p_from_id, a); - ERR_FAIL_COND_V_MSG(!from_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id)); + ERR_FAIL_COND_V_MSG(!from_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id)); AStar3D::Point *b; bool to_exists = astar.points.lookup(p_to_id, b); - ERR_FAIL_COND_V_MSG(!to_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id)); + ERR_FAIL_COND_V_MSG(!to_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id)); if (a == b) { - Vector<int> ret; + Vector<int64_t> ret; ret.push_back(a->id); return ret; } @@ -756,24 +756,24 @@ Vector<int> AStar2D::get_id_path(int p_from_id, int p_to_id) { bool found_route = _solve(begin_point, end_point); if (!found_route) { - return Vector<int>(); + return Vector<int64_t>(); } AStar3D::Point *p = end_point; - int pc = 1; // Begin point + int64_t pc = 1; // Begin point while (p != begin_point) { pc++; p = p->prev_point; } - Vector<int> path; + Vector<int64_t> path; path.resize(pc); { - int *w = path.ptrw(); + int64_t *w = path.ptrw(); p = end_point; - int idx = pc - 1; + int64_t idx = pc - 1; while (p != begin_point) { w[idx--] = p->id; p = p->prev_point; @@ -813,7 +813,7 @@ bool AStar2D::_solve(AStar3D::Point *begin_point, AStar3D::Point *end_point) { open_list.remove_at(open_list.size() - 1); p->closed_pass = astar.pass; // Mark the point as closed - for (OAHashMap<int, AStar3D::Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { + for (OAHashMap<int64_t, AStar3D::Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) { AStar3D::Point *e = *(it.value); // The neighbour point if (!e->enabled || e->closed_pass == astar.pass) { @@ -863,8 +863,8 @@ void AStar2D::_bind_methods() { ClassDB::bind_method(D_METHOD("is_point_disabled", "id"), &AStar2D::is_point_disabled); ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar2D::connect_points, DEFVAL(true)); - ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id"), &AStar2D::disconnect_points); - ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id"), &AStar2D::are_points_connected); + ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id", "bidirectional"), &AStar2D::disconnect_points, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id", "bidirectional"), &AStar2D::are_points_connected, DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_point_count"), &AStar2D::get_point_count); ClassDB::bind_method(D_METHOD("get_point_capacity"), &AStar2D::get_point_capacity); diff --git a/core/math/a_star.h b/core/math/a_star.h index e2f75ad18c..c1497d133f 100644 --- a/core/math/a_star.h +++ b/core/math/a_star.h @@ -47,13 +47,13 @@ class AStar3D : public RefCounted { struct Point { Point() {} - int id = 0; + int64_t id = 0; Vector3 pos; real_t weight_scale = 0; bool enabled = false; - OAHashMap<int, Point *> neighbours = 4u; - OAHashMap<int, Point *> unlinked_neighbours = 4u; + OAHashMap<int64_t, Point *> neighbours = 4u; + OAHashMap<int64_t, Point *> unlinked_neighbours = 4u; // Used for pathfinding. Point *prev_point = nullptr; @@ -76,13 +76,7 @@ class AStar3D : public RefCounted { }; struct Segment { - union { - struct { - int32_t u; - int32_t v; - }; - uint64_t key = 0; - }; + Pair<int64_t, int64_t> key; enum { NONE = 0, @@ -93,28 +87,28 @@ class AStar3D : public RefCounted { unsigned char direction = NONE; static uint32_t hash(const Segment &p_seg) { - return hash_one_uint64(p_seg.key); + return PairHash<int64_t, int64_t>().hash(p_seg.key); } bool operator==(const Segment &p_s) const { return key == p_s.key; } Segment() {} - Segment(int p_from, int p_to) { + Segment(int64_t p_from, int64_t p_to) { if (p_from < p_to) { - u = p_from; - v = p_to; + key.first = p_from; + key.second = p_to; direction = FORWARD; } else { - u = p_to; - v = p_from; + key.first = p_to; + key.second = p_from; direction = BACKWARD; } } }; - int last_free_id = 0; + int64_t last_free_id = 0; uint64_t pass = 1; - OAHashMap<int, Point *> points; + OAHashMap<int64_t, Point *> points; HashSet<Segment, Segment> segments; bool _solve(Point *begin_point, Point *end_point); @@ -122,42 +116,42 @@ class AStar3D : public RefCounted { protected: static void _bind_methods(); - virtual real_t _estimate_cost(int p_from_id, int p_to_id); - virtual real_t _compute_cost(int p_from_id, int p_to_id); + virtual real_t _estimate_cost(int64_t p_from_id, int64_t p_to_id); + virtual real_t _compute_cost(int64_t p_from_id, int64_t p_to_id); GDVIRTUAL2RC(real_t, _estimate_cost, int64_t, int64_t) GDVIRTUAL2RC(real_t, _compute_cost, int64_t, int64_t) public: - int get_available_point_id() const; - - void add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale = 1); - Vector3 get_point_position(int p_id) const; - void set_point_position(int p_id, const Vector3 &p_pos); - real_t get_point_weight_scale(int p_id) const; - void set_point_weight_scale(int p_id, real_t p_weight_scale); - void remove_point(int p_id); - bool has_point(int p_id) const; - Vector<int> get_point_connections(int p_id); + int64_t get_available_point_id() const; + + void add_point(int64_t p_id, const Vector3 &p_pos, real_t p_weight_scale = 1); + Vector3 get_point_position(int64_t p_id) const; + void set_point_position(int64_t p_id, const Vector3 &p_pos); + real_t get_point_weight_scale(int64_t p_id) const; + void set_point_weight_scale(int64_t p_id, real_t p_weight_scale); + void remove_point(int64_t p_id); + bool has_point(int64_t p_id) const; + Vector<int64_t> get_point_connections(int64_t p_id); Array get_point_ids(); - void set_point_disabled(int p_id, bool p_disabled = true); - bool is_point_disabled(int p_id) const; + void set_point_disabled(int64_t p_id, bool p_disabled = true); + bool is_point_disabled(int64_t p_id) const; - void connect_points(int p_id, int p_with_id, bool bidirectional = true); - void disconnect_points(int p_id, int p_with_id, bool bidirectional = true); - bool are_points_connected(int p_id, int p_with_id, bool bidirectional = true) const; + void connect_points(int64_t p_id, int64_t p_with_id, bool bidirectional = true); + void disconnect_points(int64_t p_id, int64_t p_with_id, bool bidirectional = true); + bool are_points_connected(int64_t p_id, int64_t p_with_id, bool bidirectional = true) const; - int get_point_count() const; - int get_point_capacity() const; - void reserve_space(int p_num_nodes); + int64_t get_point_count() const; + int64_t get_point_capacity() const; + void reserve_space(int64_t p_num_nodes); void clear(); - int get_closest_point(const Vector3 &p_point, bool p_include_disabled = false) const; + int64_t get_closest_point(const Vector3 &p_point, bool p_include_disabled = false) const; Vector3 get_closest_position_in_segment(const Vector3 &p_point) const; - Vector<Vector3> get_point_path(int p_from_id, int p_to_id); - Vector<int> get_id_path(int p_from_id, int p_to_id); + Vector<Vector3> get_point_path(int64_t p_from_id, int64_t p_to_id); + Vector<int64_t> get_id_path(int64_t p_from_id, int64_t p_to_id); AStar3D() {} ~AStar3D(); @@ -172,42 +166,42 @@ class AStar2D : public RefCounted { protected: static void _bind_methods(); - virtual real_t _estimate_cost(int p_from_id, int p_to_id); - virtual real_t _compute_cost(int p_from_id, int p_to_id); + virtual real_t _estimate_cost(int64_t p_from_id, int64_t p_to_id); + virtual real_t _compute_cost(int64_t p_from_id, int64_t p_to_id); GDVIRTUAL2RC(real_t, _estimate_cost, int64_t, int64_t) GDVIRTUAL2RC(real_t, _compute_cost, int64_t, int64_t) public: - int get_available_point_id() const; - - void add_point(int p_id, const Vector2 &p_pos, real_t p_weight_scale = 1); - Vector2 get_point_position(int p_id) const; - void set_point_position(int p_id, const Vector2 &p_pos); - real_t get_point_weight_scale(int p_id) const; - void set_point_weight_scale(int p_id, real_t p_weight_scale); - void remove_point(int p_id); - bool has_point(int p_id) const; - Vector<int> get_point_connections(int p_id); + int64_t get_available_point_id() const; + + void add_point(int64_t p_id, const Vector2 &p_pos, real_t p_weight_scale = 1); + Vector2 get_point_position(int64_t p_id) const; + void set_point_position(int64_t p_id, const Vector2 &p_pos); + real_t get_point_weight_scale(int64_t p_id) const; + void set_point_weight_scale(int64_t p_id, real_t p_weight_scale); + void remove_point(int64_t p_id); + bool has_point(int64_t p_id) const; + Vector<int64_t> get_point_connections(int64_t p_id); Array get_point_ids(); - void set_point_disabled(int p_id, bool p_disabled = true); - bool is_point_disabled(int p_id) const; + void set_point_disabled(int64_t p_id, bool p_disabled = true); + bool is_point_disabled(int64_t p_id) const; - void connect_points(int p_id, int p_with_id, bool p_bidirectional = true); - void disconnect_points(int p_id, int p_with_id); - bool are_points_connected(int p_id, int p_with_id) const; + void connect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true); + void disconnect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true); + bool are_points_connected(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true) const; - int get_point_count() const; - int get_point_capacity() const; - void reserve_space(int p_num_nodes); + int64_t get_point_count() const; + int64_t get_point_capacity() const; + void reserve_space(int64_t p_num_nodes); void clear(); - int get_closest_point(const Vector2 &p_point, bool p_include_disabled = false) const; + int64_t get_closest_point(const Vector2 &p_point, bool p_include_disabled = false) const; Vector2 get_closest_position_in_segment(const Vector2 &p_point) const; - Vector<Vector2> get_point_path(int p_from_id, int p_to_id); - Vector<int> get_id_path(int p_from_id, int p_to_id); + Vector<Vector2> get_point_path(int64_t p_from_id, int64_t p_to_id); + Vector<int64_t> get_id_path(int64_t p_from_id, int64_t p_to_id); AStar2D() {} ~AStar2D() {} diff --git a/core/math/audio_frame.h b/core/math/audio_frame.h index 8b244e9fe4..b3d63c0094 100644 --- a/core/math/audio_frame.h +++ b/core/math/audio_frame.h @@ -52,7 +52,7 @@ static const float AUDIO_MIN_PEAK_DB = -200.0f; // linear2db(AUDIO_PEAK_OFFSET) struct AudioFrame { //left and right samples - float l, r; + float l = 0.f, r = 0.f; _ALWAYS_INLINE_ const float &operator[](int idx) const { return idx == 0 ? l : r; } _ALWAYS_INLINE_ float &operator[](int idx) { return idx == 0 ? l : r; } diff --git a/core/math/delaunay_3d.h b/core/math/delaunay_3d.h index f8a10ec87e..4ab00e1f34 100644 --- a/core/math/delaunay_3d.h +++ b/core/math/delaunay_3d.h @@ -101,7 +101,7 @@ class Delaunay3D { _FORCE_INLINE_ static uint32_t hash(const Triangle &p_triangle) { uint32_t h = hash_djb2_one_32(p_triangle.triangle[0]); h = hash_djb2_one_32(p_triangle.triangle[1], h); - return hash_djb2_one_32(p_triangle.triangle[2], h); + return hash_fmix32(hash_djb2_one_32(p_triangle.triangle[2], h)); } }; diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 068bc0397e..c8a55341aa 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -302,11 +302,19 @@ public: } static _ALWAYS_INLINE_ double wrapf(double value, double min, double max) { double range = max - min; - return is_zero_approx(range) ? min : value - (range * Math::floor((value - min) / range)); + double result = is_zero_approx(range) ? min : value - (range * Math::floor((value - min) / range)); + if (is_equal_approx(result, max)) { + return min; + } + return result; } static _ALWAYS_INLINE_ float wrapf(float value, float min, float max) { float range = max - min; - return is_zero_approx(range) ? min : value - (range * Math::floor((value - min) / range)); + float result = is_zero_approx(range) ? min : value - (range * Math::floor((value - min) / range)); + if (is_equal_approx(result, max)) { + return min; + } + return result; } static _ALWAYS_INLINE_ float fract(float value) { diff --git a/core/math/triangle_mesh.cpp b/core/math/triangle_mesh.cpp index 54461bf70f..4433559e6d 100644 --- a/core/math/triangle_mesh.cpp +++ b/core/math/triangle_mesh.cpp @@ -104,9 +104,11 @@ void TriangleMesh::get_indices(Vector<int> *r_triangles_indices) const { } } -void TriangleMesh::create(const Vector<Vector3> &p_faces) { +void TriangleMesh::create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices) { valid = false; + ERR_FAIL_COND(p_surface_indices.size() && p_surface_indices.size() != p_faces.size()); + int fc = p_faces.size(); ERR_FAIL_COND(!fc || ((fc % 3) != 0)); fc /= 3; @@ -121,6 +123,7 @@ void TriangleMesh::create(const Vector<Vector3> &p_faces) { //goes in-place. const Vector3 *r = p_faces.ptr(); + const int32_t *si = p_surface_indices.ptr(); Triangle *w = triangles.ptrw(); HashMap<Vector3, int> db; @@ -148,6 +151,7 @@ void TriangleMesh::create(const Vector<Vector3> &p_faces) { } f.normal = Face3(r[i * 3 + 0], r[i * 3 + 1], r[i * 3 + 2]).get_plane().get_normal(); + f.surface_index = si ? si[i] : 0; bw[i].left = -1; bw[i].right = -1; @@ -264,7 +268,7 @@ Vector3 TriangleMesh::get_area_normal(const AABB &p_aabb) const { return n; } -bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const { +bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index) const { uint32_t *stack = (uint32_t *)alloca(sizeof(int) * max_depth); enum { @@ -317,6 +321,9 @@ bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_en d = nd; r_point = res; r_normal = f3.get_plane().get_normal(); + if (r_surf_index) { + *r_surf_index = s.surface_index; + } inters = true; } } @@ -366,7 +373,7 @@ bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_en return inters; } -bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal) const { +bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index) const { uint32_t *stack = (uint32_t *)alloca(sizeof(int) * max_depth); enum { @@ -417,6 +424,9 @@ bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, V d = nd; r_point = res; r_normal = f3.get_plane().get_normal(); + if (r_surf_index) { + *r_surf_index = s.surface_index; + } inters = true; } } diff --git a/core/math/triangle_mesh.h b/core/math/triangle_mesh.h index 1b99945698..166b4adb7a 100644 --- a/core/math/triangle_mesh.h +++ b/core/math/triangle_mesh.h @@ -41,6 +41,7 @@ public: struct Triangle { Vector3 normal; int indices[3]; + int32_t surface_index; }; private: @@ -81,8 +82,8 @@ private: public: bool is_valid() const; - bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const; - bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal) const; + bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const; + bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const; bool intersect_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count) const; bool inside_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count, Vector3 p_scale = Vector3(1, 1, 1)) const; Vector3 get_area_normal(const AABB &p_aabb) const; @@ -92,7 +93,7 @@ public: const Vector<Vector3> &get_vertices() const { return vertices; } void get_indices(Vector<int> *r_triangles_indices) const; - void create(const Vector<Vector3> &p_faces); + void create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices = Vector<int32_t>()); TriangleMesh(); }; diff --git a/core/multiplayer/multiplayer_peer.cpp b/core/multiplayer/multiplayer_peer.cpp index ae3b139bcc..b262903ce8 100644 --- a/core/multiplayer/multiplayer_peer.cpp +++ b/core/multiplayer/multiplayer_peer.cpp @@ -36,17 +36,18 @@ uint32_t MultiplayerPeer::generate_unique_id() const { uint32_t hash = 0; while (hash == 0 || hash == 1) { - hash = hash_djb2_one_32( + hash = hash_murmur3_one_32( (uint32_t)OS::get_singleton()->get_ticks_usec()); - hash = hash_djb2_one_32( + hash = hash_murmur3_one_32( (uint32_t)OS::get_singleton()->get_unix_time(), hash); - hash = hash_djb2_one_32( + hash = hash_murmur3_one_32( (uint32_t)OS::get_singleton()->get_user_data_dir().hash64(), hash); - hash = hash_djb2_one_32( + hash = hash_murmur3_one_32( (uint32_t)((uint64_t)this), hash); // Rely on ASLR heap - hash = hash_djb2_one_32( + hash = hash_murmur3_one_32( (uint32_t)((uint64_t)&hash), hash); // Rely on ASLR stack + hash = hash_fmix32(hash); hash = hash & 0x7FFFFFFF; // Make it compatible with unsigned, since negative ID is used for exclusion } diff --git a/core/object/callable_method_pointer.cpp b/core/object/callable_method_pointer.cpp index 1bf926cafc..81f8ab6be2 100644 --- a/core/object/callable_method_pointer.cpp +++ b/core/object/callable_method_pointer.cpp @@ -85,9 +85,9 @@ void CallableCustomMethodPointerBase::_setup(uint32_t *p_base_ptr, uint32_t p_pt // Precompute hash. for (uint32_t i = 0; i < comp_size; i++) { if (i == 0) { - h = hash_djb2_one_32(comp_ptr[i]); + h = hash_murmur3_one_32(comp_ptr[i]); } else { - h = hash_djb2_one_32(comp_ptr[i], h); + h = hash_murmur3_one_32(comp_ptr[i], h); } } } diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp index f61bd24efd..3c9f373d12 100644 --- a/core/object/class_db.cpp +++ b/core/object/class_db.cpp @@ -164,7 +164,7 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { OBJTYPE_RLOCK; #ifdef DEBUG_METHODS_ENABLED - uint64_t hash = hash_djb2_one_64(HashMapHasherDefault::hash(VERSION_FULL_CONFIG)); + uint64_t hash = hash_murmur3_one_64(HashMapHasherDefault::hash(VERSION_FULL_CONFIG)); List<StringName> class_list; ClassDB::get_class_list(&class_list); @@ -177,8 +177,8 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { if (t->api != p_api || !t->exposed) { continue; } - hash = hash_djb2_one_64(t->name.hash(), hash); - hash = hash_djb2_one_64(t->inherits.hash(), hash); + hash = hash_murmur3_one_64(t->name.hash(), hash); + hash = hash_murmur3_one_64(t->inherits.hash(), hash); { //methods @@ -200,27 +200,27 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { for (const StringName &F : snames) { MethodBind *mb = t->method_map[F]; - hash = hash_djb2_one_64(mb->get_name().hash(), hash); - hash = hash_djb2_one_64(mb->get_argument_count(), hash); - hash = hash_djb2_one_64(mb->get_argument_type(-1), hash); //return + hash = hash_murmur3_one_64(mb->get_name().hash(), hash); + hash = hash_murmur3_one_64(mb->get_argument_count(), hash); + hash = hash_murmur3_one_64(mb->get_argument_type(-1), hash); //return for (int i = 0; i < mb->get_argument_count(); i++) { const PropertyInfo info = mb->get_argument_info(i); - hash = hash_djb2_one_64(info.type, hash); - hash = hash_djb2_one_64(info.name.hash(), hash); - hash = hash_djb2_one_64(info.hint, hash); - hash = hash_djb2_one_64(info.hint_string.hash(), hash); + hash = hash_murmur3_one_64(info.type, hash); + hash = hash_murmur3_one_64(info.name.hash(), hash); + hash = hash_murmur3_one_64(info.hint, hash); + hash = hash_murmur3_one_64(info.hint_string.hash(), hash); } - hash = hash_djb2_one_64(mb->get_default_argument_count(), hash); + hash = hash_murmur3_one_64(mb->get_default_argument_count(), hash); for (int i = 0; i < mb->get_default_argument_count(); i++) { //hash should not change, i hope for tis Variant da = mb->get_default_argument(i); - hash = hash_djb2_one_64(da.hash(), hash); + hash = hash_murmur3_one_64(da.hash(), hash); } - hash = hash_djb2_one_64(mb->get_hint_flags(), hash); + hash = hash_murmur3_one_64(mb->get_hint_flags(), hash); } } @@ -228,15 +228,15 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { List<StringName> snames; - for (const KeyValue<StringName, int> &F : t->constant_map) { + for (const KeyValue<StringName, int64_t> &F : t->constant_map) { snames.push_back(F.key); } snames.sort_custom<StringName::AlphCompare>(); for (const StringName &F : snames) { - hash = hash_djb2_one_64(F.hash(), hash); - hash = hash_djb2_one_64(t->constant_map[F], hash); + hash = hash_murmur3_one_64(F.hash(), hash); + hash = hash_murmur3_one_64(t->constant_map[F], hash); } } @@ -252,9 +252,9 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { for (const StringName &F : snames) { MethodInfo &mi = t->signal_map[F]; - hash = hash_djb2_one_64(F.hash(), hash); + hash = hash_murmur3_one_64(F.hash(), hash); for (int i = 0; i < mi.arguments.size(); i++) { - hash = hash_djb2_one_64(mi.arguments[i].type, hash); + hash = hash_murmur3_one_64(mi.arguments[i].type, hash); } } } @@ -273,23 +273,23 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { PropertySetGet *psg = t->property_setget.getptr(F); ERR_FAIL_COND_V(!psg, 0); - hash = hash_djb2_one_64(F.hash(), hash); - hash = hash_djb2_one_64(psg->setter.hash(), hash); - hash = hash_djb2_one_64(psg->getter.hash(), hash); + hash = hash_murmur3_one_64(F.hash(), hash); + hash = hash_murmur3_one_64(psg->setter.hash(), hash); + hash = hash_murmur3_one_64(psg->getter.hash(), hash); } } //property list for (const PropertyInfo &F : t->property_list) { - hash = hash_djb2_one_64(F.name.hash(), hash); - hash = hash_djb2_one_64(F.type, hash); - hash = hash_djb2_one_64(F.hint, hash); - hash = hash_djb2_one_64(F.hint_string.hash(), hash); - hash = hash_djb2_one_64(F.usage, hash); + hash = hash_murmur3_one_64(F.name.hash(), hash); + hash = hash_murmur3_one_64(F.type, hash); + hash = hash_murmur3_one_64(F.hint, hash); + hash = hash_murmur3_one_64(F.hint_string.hash(), hash); + hash = hash_murmur3_one_64(F.usage, hash); } } - return hash; + return hash_fmix32(hash); #else return 0; #endif @@ -536,7 +536,7 @@ MethodBind *ClassDB::get_method(const StringName &p_class, const StringName &p_n return nullptr; } -void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int p_constant) { +void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant) { OBJTYPE_WLOCK; ClassInfo *type = classes.getptr(p_class); @@ -583,7 +583,7 @@ void ClassDB::get_integer_constant_list(const StringName &p_class, List<String> } #else - for (const KeyValue<StringName, int> &E : type->constant_map) { + for (const KeyValue<StringName, int64_t> &E : type->constant_map) { p_constants->push_back(E.key); } @@ -596,13 +596,13 @@ void ClassDB::get_integer_constant_list(const StringName &p_class, List<String> } } -int ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success) { +int64_t ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success) { OBJTYPE_RLOCK; ClassInfo *type = classes.getptr(p_class); while (type) { - int *constant = type->constant_map.getptr(p_name); + int64_t *constant = type->constant_map.getptr(p_name); if (constant) { if (p_success) { *p_success = true; @@ -1066,7 +1066,7 @@ bool ClassDB::get_property(Object *p_object, const StringName &p_property, Varia return true; } - const int *c = check->constant_map.getptr(p_property); //constants count + const int64_t *c = check->constant_map.getptr(p_property); //constants count if (c) { r_value = *c; return true; diff --git a/core/object/class_db.h b/core/object/class_db.h index 2448a86e33..f2f73dc674 100644 --- a/core/object/class_db.h +++ b/core/object/class_db.h @@ -103,7 +103,7 @@ public: ObjectNativeExtension *native_extension = nullptr; HashMap<StringName, MethodBind *> method_map; - HashMap<StringName, int> constant_map; + HashMap<StringName, int64_t> constant_map; HashMap<StringName, List<StringName>> enum_map; HashMap<StringName, MethodInfo> signal_map; List<PropertyInfo> property_list; @@ -325,9 +325,9 @@ public: static void add_virtual_method(const StringName &p_class, const MethodInfo &p_method, bool p_virtual = true, const Vector<String> &p_arg_names = Vector<String>(), bool p_object_core = false); static void get_virtual_methods(const StringName &p_class, List<MethodInfo> *p_methods, bool p_no_inheritance = false); - static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int p_constant); + static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant); static void get_integer_constant_list(const StringName &p_class, List<String> *p_constants, bool p_no_inheritance = false); - static int get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success = nullptr); + static int64_t get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success = nullptr); static bool has_integer_constant(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); static StringName get_integer_constant_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false); diff --git a/core/object/method_bind.cpp b/core/object/method_bind.cpp index a208c1a2b2..a4474ea53b 100644 --- a/core/object/method_bind.cpp +++ b/core/object/method_bind.cpp @@ -35,32 +35,27 @@ #include "method_bind.h" uint32_t MethodBind::get_hash() const { - uint32_t hash = hash_djb2_one_32(has_return() ? 1 : 0); - hash = hash_djb2_one_32(get_argument_count(), hash); - -#ifndef _MSC_VER -#warning This needs proper class name and argument type for hashing -#endif -#if 0 + uint32_t hash = hash_murmur3_one_32(has_return() ? 1 : 0); + hash = hash_murmur3_one_32(get_argument_count(), hash); for (int i = (has_return() ? -1 : 0); i < get_argument_count(); i++) { PropertyInfo pi = i == -1 ? get_return_info() : get_argument_info(i); - hash = hash_djb2_one_32(get_argument_type(i), hash); + hash = hash_murmur3_one_32(get_argument_type(i), hash); if (pi.class_name != StringName()) { - hash = hash_djb2_one_32(pi.class_name.operator String().hash(), hash); + hash = hash_murmur3_one_32(pi.class_name.operator String().hash(), hash); } } -#endif - hash = hash_djb2_one_32(get_default_argument_count(), hash); + + hash = hash_murmur3_one_32(get_default_argument_count(), hash); for (int i = 0; i < get_default_argument_count(); i++) { Variant v = get_default_argument(i); - hash = hash_djb2_one_32(v.hash(), hash); + hash = hash_murmur3_one_32(v.hash(), hash); } - hash = hash_djb2_one_32(is_const(), hash); - hash = hash_djb2_one_32(is_vararg(), hash); + hash = hash_murmur3_one_32(is_const(), hash); + hash = hash_murmur3_one_32(is_vararg(), hash); - return hash; + return hash_fmix32(hash); } PropertyInfo MethodBind::get_argument_info(int p_argument) const { diff --git a/core/object/object.cpp b/core/object/object.cpp index 0912ea55f0..96469db8c6 100644 --- a/core/object/object.cpp +++ b/core/object/object.cpp @@ -209,6 +209,17 @@ MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const arguments.push_back(p_param5); } +MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6) : + name(p_name), + flags(METHOD_FLAG_NORMAL) { + arguments.push_back(p_param1); + arguments.push_back(p_param2); + arguments.push_back(p_param3); + arguments.push_back(p_param4); + arguments.push_back(p_param5); + arguments.push_back(p_param6); +} + MethodInfo::MethodInfo(Variant::Type ret) : flags(METHOD_FLAG_NORMAL) { return_val.type = ret; @@ -265,6 +276,18 @@ MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyIn arguments.push_back(p_param5); } +MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6) : + name(p_name), + flags(METHOD_FLAG_NORMAL) { + return_val.type = ret; + arguments.push_back(p_param1); + arguments.push_back(p_param2); + arguments.push_back(p_param3); + arguments.push_back(p_param4); + arguments.push_back(p_param5); + arguments.push_back(p_param6); +} + MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name) : name(p_name), return_val(p_ret), @@ -316,6 +339,18 @@ MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const Pr arguments.push_back(p_param5); } +MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6) : + name(p_name), + return_val(p_ret), + flags(METHOD_FLAG_NORMAL) { + arguments.push_back(p_param1); + arguments.push_back(p_param2); + arguments.push_back(p_param3); + arguments.push_back(p_param4); + arguments.push_back(p_param5); + arguments.push_back(p_param6); +} + Object::Connection::operator Variant() const { Dictionary d; d["signal"] = signal; @@ -1196,7 +1231,7 @@ Array Object::_get_signal_list() const { return ret; } -Array Object::_get_signal_connection_list(const String &p_signal) const { +Array Object::_get_signal_connection_list(const StringName &p_signal) const { List<Connection> conns; get_all_signal_connections(&conns); @@ -1422,11 +1457,11 @@ void Object::_disconnect(const StringName &p_signal, const Callable &p_callable, } } -void Object::_set_bind(const String &p_set, const Variant &p_value) { +void Object::_set_bind(const StringName &p_set, const Variant &p_value) { set(p_set, p_value); } -Variant Object::_get_bind(const String &p_name) const { +Variant Object::_get_bind(const StringName &p_name) const { return get(p_name); } diff --git a/core/object/object.h b/core/object/object.h index 988d261d77..02dd875acf 100644 --- a/core/object/object.h +++ b/core/object/object.h @@ -52,6 +52,7 @@ enum PropertyHint { PROPERTY_HINT_ENUM_SUGGESTION, ///< hint_text= "val1,val2,val3,etc" PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout") PROPERTY_HINT_LENGTH, ///< hint_text= "length" (as integer) + PROPERTY_HINT_LINK, PROPERTY_HINT_KEY_ACCEL, ///< hint_text= "length" (as integer) PROPERTY_HINT_FLAGS, ///< hint_text= "flag1,flag2,etc" (as bit flags) PROPERTY_HINT_LAYERS_2D_RENDER, @@ -84,6 +85,7 @@ enum PropertyHint { PROPERTY_HINT_OBJECT_TOO_BIG, ///< object is too big to send PROPERTY_HINT_NODE_PATH_VALID_TYPES, PROPERTY_HINT_SAVE_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc,". This opens a save dialog + PROPERTY_HINT_GLOBAL_SAVE_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc,". This opens a save dialog PROPERTY_HINT_INT_IS_OBJECTID, PROPERTY_HINT_ARRAY_TYPE, PROPERTY_HINT_INT_IS_POINTER, @@ -224,6 +226,7 @@ struct MethodInfo { MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3); MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4); MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5); + MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6); MethodInfo(Variant::Type ret); MethodInfo(Variant::Type ret, const String &p_name); MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1); @@ -231,12 +234,14 @@ struct MethodInfo { MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3); MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4); MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5); + MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6); MethodInfo(const PropertyInfo &p_ret, const String &p_name); MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1); MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2); MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3); MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4); MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5); + MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5, const PropertyInfo &p_param6); }; // API used to extend in GDNative and other C compatible compiled languages. @@ -523,10 +528,10 @@ private: bool _has_user_signal(const StringName &p_name) const; Error _emit_signal(const Variant **p_args, int p_argcount, Callable::CallError &r_error); Array _get_signal_list() const; - Array _get_signal_connection_list(const String &p_signal) const; + Array _get_signal_connection_list(const StringName &p_signal) const; Array _get_incoming_connections() const; - void _set_bind(const String &p_set, const Variant &p_value); - Variant _get_bind(const String &p_name) const; + void _set_bind(const StringName &p_set, const Variant &p_value); + Variant _get_bind(const StringName &p_name) const; void _set_indexed_bind(const NodePath &p_name, const Variant &p_value); Variant _get_indexed_bind(const NodePath &p_name) const; diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp index 24907d34c8..3e690991d9 100644 --- a/core/os/keyboard.cpp +++ b/core/os/keyboard.cpp @@ -86,6 +86,25 @@ static const _KeyCodeText _keycodes[] = { {Key::F14 ,"F14"}, {Key::F15 ,"F15"}, {Key::F16 ,"F16"}, + {Key::F17 ,"F17"}, + {Key::F18 ,"F18"}, + {Key::F19 ,"F19"}, + {Key::F20 ,"F20"}, + {Key::F21 ,"F21"}, + {Key::F22 ,"F22"}, + {Key::F23 ,"F23"}, + {Key::F24 ,"F24"}, + {Key::F25 ,"F25"}, + {Key::F26 ,"F26"}, + {Key::F27 ,"F27"}, + {Key::F28 ,"F28"}, + {Key::F29 ,"F29"}, + {Key::F30 ,"F30"}, + {Key::F31 ,"F31"}, + {Key::F32 ,"F32"}, + {Key::F33 ,"F33"}, + {Key::F34 ,"F34"}, + {Key::F35 ,"F35"}, {Key::KP_MULTIPLY ,"Kp Multiply"}, {Key::KP_DIVIDE ,"Kp Divide"}, {Key::KP_SUBTRACT ,"Kp Subtract"}, @@ -333,6 +352,25 @@ bool keycode_has_unicode(Key p_keycode) { case Key::F14: case Key::F15: case Key::F16: + case Key::F17: + case Key::F18: + case Key::F19: + case Key::F20: + case Key::F21: + case Key::F22: + case Key::F23: + case Key::F24: + case Key::F25: + case Key::F26: + case Key::F27: + case Key::F28: + case Key::F29: + case Key::F30: + case Key::F31: + case Key::F32: + case Key::F33: + case Key::F34: + case Key::F35: case Key::SUPER_L: case Key::SUPER_R: case Key::MENU: diff --git a/core/os/keyboard.h b/core/os/keyboard.h index 3176a8a210..517a53e505 100644 --- a/core/os/keyboard.h +++ b/core/os/keyboard.h @@ -85,6 +85,25 @@ enum class Key { F14 = SPECIAL | 0x29, F15 = SPECIAL | 0x2A, F16 = SPECIAL | 0x2B, + F17 = SPECIAL | 0x2C, + F18 = SPECIAL | 0x2D, + F19 = SPECIAL | 0x2E, + F20 = SPECIAL | 0x2F, + F21 = SPECIAL | 0x30, + F22 = SPECIAL | 0x31, + F23 = SPECIAL | 0x32, + F24 = SPECIAL | 0x33, + F25 = SPECIAL | 0x34, + F26 = SPECIAL | 0x35, + F27 = SPECIAL | 0x36, + F28 = SPECIAL | 0x37, + F29 = SPECIAL | 0x38, + F30 = SPECIAL | 0x39, + F31 = SPECIAL | 0x3A, + F32 = SPECIAL | 0x3B, + F33 = SPECIAL | 0x3C, + F34 = SPECIAL | 0x3D, + F35 = SPECIAL | 0x3E, KP_MULTIPLY = SPECIAL | 0x81, KP_DIVIDE = SPECIAL | 0x82, KP_SUBTRACT = SPECIAL | 0x83, @@ -100,54 +119,54 @@ enum class Key { KP_7 = SPECIAL | 0x8D, KP_8 = SPECIAL | 0x8E, KP_9 = SPECIAL | 0x8F, - SUPER_L = SPECIAL | 0x2C, - SUPER_R = SPECIAL | 0x2D, - MENU = SPECIAL | 0x2E, - HYPER_L = SPECIAL | 0x2F, - HYPER_R = SPECIAL | 0x30, - HELP = SPECIAL | 0x31, - DIRECTION_L = SPECIAL | 0x32, - DIRECTION_R = SPECIAL | 0x33, - BACK = SPECIAL | 0x40, - FORWARD = SPECIAL | 0x41, - STOP = SPECIAL | 0x42, - REFRESH = SPECIAL | 0x43, - VOLUMEDOWN = SPECIAL | 0x44, - VOLUMEMUTE = SPECIAL | 0x45, - VOLUMEUP = SPECIAL | 0x46, - BASSBOOST = SPECIAL | 0x47, - BASSUP = SPECIAL | 0x48, - BASSDOWN = SPECIAL | 0x49, - TREBLEUP = SPECIAL | 0x4A, - TREBLEDOWN = SPECIAL | 0x4B, - MEDIAPLAY = SPECIAL | 0x4C, - MEDIASTOP = SPECIAL | 0x4D, - MEDIAPREVIOUS = SPECIAL | 0x4E, - MEDIANEXT = SPECIAL | 0x4F, - MEDIARECORD = SPECIAL | 0x50, - HOMEPAGE = SPECIAL | 0x51, - FAVORITES = SPECIAL | 0x52, - SEARCH = SPECIAL | 0x53, - STANDBY = SPECIAL | 0x54, - OPENURL = SPECIAL | 0x55, - LAUNCHMAIL = SPECIAL | 0x56, - LAUNCHMEDIA = SPECIAL | 0x57, - LAUNCH0 = SPECIAL | 0x58, - LAUNCH1 = SPECIAL | 0x59, - LAUNCH2 = SPECIAL | 0x5A, - LAUNCH3 = SPECIAL | 0x5B, - LAUNCH4 = SPECIAL | 0x5C, - LAUNCH5 = SPECIAL | 0x5D, - LAUNCH6 = SPECIAL | 0x5E, - LAUNCH7 = SPECIAL | 0x5F, - LAUNCH8 = SPECIAL | 0x60, - LAUNCH9 = SPECIAL | 0x61, - LAUNCHA = SPECIAL | 0x62, - LAUNCHB = SPECIAL | 0x63, - LAUNCHC = SPECIAL | 0x64, - LAUNCHD = SPECIAL | 0x65, - LAUNCHE = SPECIAL | 0x66, - LAUNCHF = SPECIAL | 0x67, + SUPER_L = SPECIAL | 0x40, + SUPER_R = SPECIAL | 0x41, + MENU = SPECIAL | 0x42, + HYPER_L = SPECIAL | 0x43, + HYPER_R = SPECIAL | 0x44, + HELP = SPECIAL | 0x45, + DIRECTION_L = SPECIAL | 0x46, + DIRECTION_R = SPECIAL | 0x47, + BACK = SPECIAL | 0x48, + FORWARD = SPECIAL | 0x49, + STOP = SPECIAL | 0x4A, + REFRESH = SPECIAL | 0x4B, + VOLUMEDOWN = SPECIAL | 0x4C, + VOLUMEMUTE = SPECIAL | 0x4D, + VOLUMEUP = SPECIAL | 0x4E, + BASSBOOST = SPECIAL | 0x4F, + BASSUP = SPECIAL | 0x50, + BASSDOWN = SPECIAL | 0x51, + TREBLEUP = SPECIAL | 0x52, + TREBLEDOWN = SPECIAL | 0x53, + MEDIAPLAY = SPECIAL | 0x54, + MEDIASTOP = SPECIAL | 0x55, + MEDIAPREVIOUS = SPECIAL | 0x56, + MEDIANEXT = SPECIAL | 0x57, + MEDIARECORD = SPECIAL | 0x58, + HOMEPAGE = SPECIAL | 0x59, + FAVORITES = SPECIAL | 0x5A, + SEARCH = SPECIAL | 0x5B, + STANDBY = SPECIAL | 0x5C, + OPENURL = SPECIAL | 0x5D, + LAUNCHMAIL = SPECIAL | 0x5E, + LAUNCHMEDIA = SPECIAL | 0x5F, + LAUNCH0 = SPECIAL | 0x60, + LAUNCH1 = SPECIAL | 0x61, + LAUNCH2 = SPECIAL | 0x62, + LAUNCH3 = SPECIAL | 0x63, + LAUNCH4 = SPECIAL | 0x64, + LAUNCH5 = SPECIAL | 0x65, + LAUNCH6 = SPECIAL | 0x66, + LAUNCH7 = SPECIAL | 0x67, + LAUNCH8 = SPECIAL | 0x68, + LAUNCH9 = SPECIAL | 0x69, + LAUNCHA = SPECIAL | 0x6A, + LAUNCHB = SPECIAL | 0x6B, + LAUNCHC = SPECIAL | 0x6C, + LAUNCHD = SPECIAL | 0x6D, + LAUNCHE = SPECIAL | 0x6E, + LAUNCHF = SPECIAL | 0x6F, UNKNOWN = SPECIAL | 0xFFFFFF, diff --git a/core/os/os.cpp b/core/os/os.cpp index 327f1c95f2..93477f4288 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -388,6 +388,10 @@ bool OS::has_feature(const String &p_feature) { return true; } + if (p_feature == "movie") { + return _writing_movie; + } + #ifdef DEBUG_ENABLED if (p_feature == "debug") { return true; diff --git a/core/os/os.h b/core/os/os.h index 157b8ab992..c6ea9d869a 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -58,6 +58,7 @@ class OS { bool _allow_layered = false; bool _stdout_enabled = true; bool _stderr_enabled = true; + bool _writing_movie = false; CompositeLogger *_logger = nullptr; diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index d189f3224b..df1aae5370 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -3359,36 +3359,36 @@ String String::repeat(int p_count) const { return new_string; } -String String::left(int p_pos) const { - if (p_pos < 0) { - p_pos = length() + p_pos; +String String::left(int p_len) const { + if (p_len < 0) { + p_len = length() + p_len; } - if (p_pos <= 0) { + if (p_len <= 0) { return ""; } - if (p_pos >= length()) { + if (p_len >= length()) { return *this; } - return substr(0, p_pos); + return substr(0, p_len); } -String String::right(int p_pos) const { - if (p_pos < 0) { - p_pos = length() + p_pos; +String String::right(int p_len) const { + if (p_len < 0) { + p_len = length() + p_len; } - if (p_pos <= 0) { + if (p_len <= 0) { return ""; } - if (p_pos >= length()) { + if (p_len >= length()) { return *this; } - return substr(length() - p_pos); + return substr(length() - p_len); } char32_t String::unicode_at(int p_idx) const { diff --git a/core/string/ustring.h b/core/string/ustring.h index e4f6c3327a..11d0974381 100644 --- a/core/string/ustring.h +++ b/core/string/ustring.h @@ -356,8 +356,8 @@ public: int count(const String &p_string, int p_from = 0, int p_to = 0) const; int countn(const String &p_string, int p_from = 0, int p_to = 0) const; - String left(int p_pos) const; - String right(int p_pos) const; + String left(int p_len) const; + String right(int p_len) const; String indent(const String &p_prefix) const; String dedent() const; String strip_edges(bool left = true, bool right = true) const; diff --git a/core/templates/hashfuncs.h b/core/templates/hashfuncs.h index 1330d55270..b0371f2ab5 100644 --- a/core/templates/hashfuncs.h +++ b/core/templates/hashfuncs.h @@ -56,30 +56,30 @@ * @param C String * @return 32-bits hashcode */ -static inline uint32_t hash_djb2(const char *p_cstr) { +static _FORCE_INLINE_ uint32_t hash_djb2(const char *p_cstr) { const unsigned char *chr = (const unsigned char *)p_cstr; uint32_t hash = 5381; uint32_t c; while ((c = *chr++)) { - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + hash = ((hash << 5) + hash) ^ c; /* hash * 33 ^ c */ } return hash; } -static inline uint32_t hash_djb2_buffer(const uint8_t *p_buff, int p_len, uint32_t p_prev = 5381) { +static _FORCE_INLINE_ uint32_t hash_djb2_buffer(const uint8_t *p_buff, int p_len, uint32_t p_prev = 5381) { uint32_t hash = p_prev; for (int i = 0; i < p_len; i++) { - hash = ((hash << 5) + hash) + p_buff[i]; /* hash * 33 + c */ + hash = ((hash << 5) + hash) ^ p_buff[i]; /* hash * 33 + c */ } return hash; } -static inline uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) { - return ((p_prev << 5) + p_prev) + p_in; +static _FORCE_INLINE_ uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) { + return ((p_prev << 5) + p_prev) ^ p_in; } /** @@ -89,7 +89,7 @@ static inline uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) { * @param p_int - 64-bit unsigned integer key to be hashed * @return unsigned 32-bit value representing hashcode */ -static inline uint32_t hash_one_uint64(const uint64_t p_int) { +static _FORCE_INLINE_ uint32_t hash_one_uint64(const uint64_t p_int) { uint64_t v = p_int; v = (~v) + (v << 18); // v = (v << 18) - v - 1; v = v ^ (v >> 31); @@ -100,7 +100,134 @@ static inline uint32_t hash_one_uint64(const uint64_t p_int) { return uint32_t(v); } -static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) { +#define HASH_MURMUR3_SEED 0x7F07C65 +// Murmurhash3 32-bit version. +// All MurmurHash versions are public domain software, and the author disclaims all copyright to their code. + +static _FORCE_INLINE_ uint32_t hash_murmur3_one_32(uint32_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) { + p_in *= 0xcc9e2d51; + p_in = (p_in << 15) | (p_in >> 17); + p_in *= 0x1b873593; + + p_seed ^= p_in; + p_seed = (p_seed << 13) | (p_seed >> 19); + p_seed = p_seed * 5 + 0xe6546b64; + + return p_seed; +} + +static _FORCE_INLINE_ uint32_t hash_murmur3_one_float(float p_in, uint32_t p_seed = HASH_MURMUR3_SEED) { + union { + float f; + uint32_t i; + } u; + + // Normalize +/- 0.0 and NaN values so they hash the same. + if (p_in == 0.0f) { + u.f = 0.0; + } else if (Math::is_nan(p_in)) { + u.f = NAN; + } else { + u.f = p_in; + } + + return hash_murmur3_one_32(u.i, p_seed); +} + +static _FORCE_INLINE_ uint32_t hash_murmur3_one_64(uint64_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) { + p_seed = hash_murmur3_one_32(p_in & 0xFFFFFFFF, p_seed); + return hash_murmur3_one_32(p_in >> 32, p_seed); +} + +static _FORCE_INLINE_ uint32_t hash_murmur3_one_double(double p_in, uint32_t p_seed = HASH_MURMUR3_SEED) { + union { + double d; + uint64_t i; + } u; + + // Normalize +/- 0.0 and NaN values so they hash the same. + if (p_in == 0.0f) { + u.d = 0.0; + } else if (Math::is_nan(p_in)) { + u.d = NAN; + } else { + u.d = p_in; + } + + return hash_murmur3_one_64(u.i, p_seed); +} + +static _FORCE_INLINE_ uint32_t hash_murmur3_one_real(real_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) { +#ifdef REAL_T_IS_DOUBLE + return hash_murmur3_one_double(p_in, p_seed); +#else + return hash_murmur3_one_float(p_in, p_seed); +#endif +} + +static _FORCE_INLINE_ uint32_t hash_rotl32(uint32_t x, int8_t r) { + return (x << r) | (x >> (32 - r)); +} + +static _FORCE_INLINE_ uint32_t hash_fmix32(uint32_t h) { + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + + return h; +} + +static _FORCE_INLINE_ uint32_t hash_murmur3_buffer(const void *key, int length, const uint32_t seed = HASH_MURMUR3_SEED) { + // Although not required, this is a random prime number. + const uint8_t *data = (const uint8_t *)key; + const int nblocks = length / 4; + + uint32_t h1 = seed; + + const uint32_t c1 = 0xcc9e2d51; + const uint32_t c2 = 0x1b873593; + + const uint32_t *blocks = (const uint32_t *)(data + nblocks * 4); + + for (int i = -nblocks; i; i++) { + uint32_t k1 = blocks[i]; + + k1 *= c1; + k1 = hash_rotl32(k1, 15); + k1 *= c2; + + h1 ^= k1; + h1 = hash_rotl32(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + const uint8_t *tail = (const uint8_t *)(data + nblocks * 4); + + uint32_t k1 = 0; + + switch (length & 3) { + case 3: + k1 ^= tail[2] << 16; + [[fallthrough]]; + case 2: + k1 ^= tail[1] << 8; + [[fallthrough]]; + case 1: + k1 ^= tail[0]; + k1 *= c1; + k1 = hash_rotl32(k1, 15); + k1 *= c2; + h1 ^= k1; + }; + + // Finalize with additional bit mixing. + h1 ^= length; + return hash_fmix32(h1); +} + +static _FORCE_INLINE_ uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) { union { double d; uint64_t i; @@ -119,7 +246,7 @@ static inline uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) } template <class T> -static inline uint32_t make_uint32_t(T p_in) { +static _FORCE_INLINE_ uint32_t hash_make_uint32_t(T p_in) { union { T t; uint32_t _u32; @@ -129,7 +256,7 @@ static inline uint32_t make_uint32_t(T p_in) { return _u._u32; } -static inline uint64_t hash_djb2_one_float_64(double p_in, uint64_t p_prev = 5381) { +static _FORCE_INLINE_ uint64_t hash_djb2_one_float_64(double p_in, uint64_t p_prev = 5381) { union { double d; uint64_t i; @@ -147,12 +274,12 @@ static inline uint64_t hash_djb2_one_float_64(double p_in, uint64_t p_prev = 538 return ((p_prev << 5) + p_prev) + u.i; } -static inline uint64_t hash_djb2_one_64(uint64_t p_in, uint64_t p_prev = 5381) { - return ((p_prev << 5) + p_prev) + p_in; +static _FORCE_INLINE_ uint64_t hash_djb2_one_64(uint64_t p_in, uint64_t p_prev = 5381) { + return ((p_prev << 5) + p_prev) ^ p_in; } template <class T> -static inline uint64_t make_uint64_t(T p_in) { +static _FORCE_INLINE_ uint64_t hash_make_uint64_t(T p_in) { union { T t; uint64_t _u64; @@ -167,78 +294,78 @@ template <class T> class Ref; struct HashMapHasherDefault { - static _FORCE_INLINE_ uint32_t hash(const String &p_string) { return p_string.hash(); } - static _FORCE_INLINE_ uint32_t hash(const char *p_cstr) { return hash_djb2(p_cstr); } - static _FORCE_INLINE_ uint32_t hash(const uint64_t p_int) { return hash_one_uint64(p_int); } - static _FORCE_INLINE_ uint32_t hash(const ObjectID &p_id) { return hash_one_uint64(p_id); } - - static _FORCE_INLINE_ uint32_t hash(const int64_t p_int) { return hash(uint64_t(p_int)); } - static _FORCE_INLINE_ uint32_t hash(const float p_float) { return hash_djb2_one_float(p_float); } - static _FORCE_INLINE_ uint32_t hash(const double p_double) { return hash_djb2_one_float(p_double); } - static _FORCE_INLINE_ uint32_t hash(const uint32_t p_int) { return p_int; } - static _FORCE_INLINE_ uint32_t hash(const int32_t p_int) { return (uint32_t)p_int; } - static _FORCE_INLINE_ uint32_t hash(const uint16_t p_int) { return p_int; } - static _FORCE_INLINE_ uint32_t hash(const int16_t p_int) { return (uint32_t)p_int; } - static _FORCE_INLINE_ uint32_t hash(const uint8_t p_int) { return p_int; } - static _FORCE_INLINE_ uint32_t hash(const int8_t p_int) { return (uint32_t)p_int; } - static _FORCE_INLINE_ uint32_t hash(const wchar_t p_wchar) { return (uint32_t)p_wchar; } - static _FORCE_INLINE_ uint32_t hash(const char16_t p_uchar) { return (uint32_t)p_uchar; } - static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return (uint32_t)p_uchar; } - static _FORCE_INLINE_ uint32_t hash(const RID &p_rid) { return hash_one_uint64(p_rid.get_id()); } - - static _FORCE_INLINE_ uint32_t hash(const StringName &p_string_name) { return p_string_name.hash(); } - static _FORCE_INLINE_ uint32_t hash(const NodePath &p_path) { return p_path.hash(); } - + // Generic hash function for any type. template <class T> static _FORCE_INLINE_ uint32_t hash(const T *p_pointer) { return hash_one_uint64((uint64_t)p_pointer); } template <class T> static _FORCE_INLINE_ uint32_t hash(const Ref<T> &p_ref) { return hash_one_uint64((uint64_t)p_ref.operator->()); } + static _FORCE_INLINE_ uint32_t hash(const String &p_string) { return p_string.hash(); } + static _FORCE_INLINE_ uint32_t hash(const char *p_cstr) { return hash_djb2(p_cstr); } + static _FORCE_INLINE_ uint32_t hash(const wchar_t p_wchar) { return hash_fmix32(p_wchar); } + static _FORCE_INLINE_ uint32_t hash(const char16_t p_uchar) { return hash_fmix32(p_uchar); } + static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return hash_fmix32(p_uchar); } + static _FORCE_INLINE_ uint32_t hash(const RID &p_rid) { return hash_one_uint64(p_rid.get_id()); } + static _FORCE_INLINE_ uint32_t hash(const StringName &p_string_name) { return p_string_name.hash(); } + static _FORCE_INLINE_ uint32_t hash(const NodePath &p_path) { return p_path.hash(); } + static _FORCE_INLINE_ uint32_t hash(const ObjectID &p_id) { return hash_one_uint64(p_id); } + + static _FORCE_INLINE_ uint32_t hash(const uint64_t p_int) { return hash_one_uint64(p_int); } + static _FORCE_INLINE_ uint32_t hash(const int64_t p_int) { return hash_one_uint64(p_int); } + static _FORCE_INLINE_ uint32_t hash(const float p_float) { return hash_murmur3_one_float(p_float); } + static _FORCE_INLINE_ uint32_t hash(const double p_double) { return hash_murmur3_one_double(p_double); } + static _FORCE_INLINE_ uint32_t hash(const uint32_t p_int) { return hash_fmix32(p_int); } + static _FORCE_INLINE_ uint32_t hash(const int32_t p_int) { return hash_fmix32(p_int); } + static _FORCE_INLINE_ uint32_t hash(const uint16_t p_int) { return hash_fmix32(p_int); } + static _FORCE_INLINE_ uint32_t hash(const int16_t p_int) { return hash_fmix32(p_int); } + static _FORCE_INLINE_ uint32_t hash(const uint8_t p_int) { return hash_fmix32(p_int); } + static _FORCE_INLINE_ uint32_t hash(const int8_t p_int) { return hash_fmix32(p_int); } static _FORCE_INLINE_ uint32_t hash(const Vector2i &p_vec) { - uint32_t h = hash_djb2_one_32(p_vec.x); - return hash_djb2_one_32(p_vec.y, h); + uint32_t h = hash_murmur3_one_32(p_vec.x); + h = hash_murmur3_one_32(p_vec.y, h); + return hash_fmix32(h); } static _FORCE_INLINE_ uint32_t hash(const Vector3i &p_vec) { - uint32_t h = hash_djb2_one_32(p_vec.x); - h = hash_djb2_one_32(p_vec.y, h); - return hash_djb2_one_32(p_vec.z, h); + uint32_t h = hash_murmur3_one_32(p_vec.x); + h = hash_murmur3_one_32(p_vec.y, h); + h = hash_murmur3_one_32(p_vec.z, h); + return hash_fmix32(h); } - static _FORCE_INLINE_ uint32_t hash(const Vector2 &p_vec) { - uint32_t h = hash_djb2_one_float(p_vec.x); - return hash_djb2_one_float(p_vec.y, h); + uint32_t h = hash_murmur3_one_real(p_vec.x); + h = hash_murmur3_one_real(p_vec.y, h); + return hash_fmix32(h); } static _FORCE_INLINE_ uint32_t hash(const Vector3 &p_vec) { - uint32_t h = hash_djb2_one_float(p_vec.x); - h = hash_djb2_one_float(p_vec.y, h); - return hash_djb2_one_float(p_vec.z, h); + uint32_t h = hash_murmur3_one_real(p_vec.x); + h = hash_murmur3_one_real(p_vec.y, h); + h = hash_murmur3_one_real(p_vec.z, h); + return hash_fmix32(h); } - static _FORCE_INLINE_ uint32_t hash(const Rect2i &p_rect) { - uint32_t h = hash_djb2_one_32(p_rect.position.x); - h = hash_djb2_one_32(p_rect.position.y, h); - h = hash_djb2_one_32(p_rect.size.x, h); - return hash_djb2_one_32(p_rect.size.y, h); + uint32_t h = hash_murmur3_one_32(p_rect.position.x); + h = hash_murmur3_one_32(p_rect.position.y, h); + h = hash_murmur3_one_32(p_rect.size.x, h); + h = hash_murmur3_one_32(p_rect.size.y, h); + return hash_fmix32(h); } - static _FORCE_INLINE_ uint32_t hash(const Rect2 &p_rect) { - uint32_t h = hash_djb2_one_float(p_rect.position.x); - h = hash_djb2_one_float(p_rect.position.y, h); - h = hash_djb2_one_float(p_rect.size.x, h); - return hash_djb2_one_float(p_rect.size.y, h); + uint32_t h = hash_murmur3_one_real(p_rect.position.x); + h = hash_murmur3_one_real(p_rect.position.y, h); + h = hash_murmur3_one_real(p_rect.size.x, h); + h = hash_murmur3_one_real(p_rect.size.y, h); + return hash_fmix32(h); } - static _FORCE_INLINE_ uint32_t hash(const AABB &p_aabb) { - uint32_t h = hash_djb2_one_float(p_aabb.position.x); - h = hash_djb2_one_float(p_aabb.position.y, h); - h = hash_djb2_one_float(p_aabb.position.z, h); - h = hash_djb2_one_float(p_aabb.size.x, h); - h = hash_djb2_one_float(p_aabb.size.y, h); - return hash_djb2_one_float(p_aabb.size.z, h); + uint32_t h = hash_murmur3_one_real(p_aabb.position.x); + h = hash_murmur3_one_real(p_aabb.position.y, h); + h = hash_murmur3_one_real(p_aabb.position.z, h); + h = hash_murmur3_one_real(p_aabb.size.x, h); + h = hash_murmur3_one_real(p_aabb.size.y, h); + h = hash_murmur3_one_real(p_aabb.size.z, h); + return hash_fmix32(h); } - - //static _FORCE_INLINE_ uint32_t hash(const void* p_ptr) { return uint32_t(uint64_t(p_ptr))*(0x9e3779b1L); } }; template <typename T> diff --git a/core/variant/array.cpp b/core/variant/array.cpp index b1e142d239..af166e09a3 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -190,13 +190,13 @@ uint32_t Array::recursive_hash(int recursion_count) const { return 0; } - uint32_t h = hash_djb2_one_32(Variant::ARRAY); + uint32_t h = hash_murmur3_one_32(Variant::ARRAY); recursion_count++; for (int i = 0; i < _p->array.size(); i++) { - h = hash_djb2_one_32(_p->array[i].recursive_hash(recursion_count), h); + h = hash_murmur3_one_32(_p->array[i].recursive_hash(recursion_count), h); } - return h; + return hash_fmix32(h); } bool Array::_assign(const Array &p_array) { @@ -260,7 +260,9 @@ void Array::push_back(const Variant &p_value) { void Array::append_array(const Array &p_array) { ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state."); - ERR_FAIL_COND(!_p->typed.validate(p_array, "append_array")); + for (int i = 0; i < p_array.size(); ++i) { + ERR_FAIL_COND(!_p->typed.validate(p_array[i], "append_array")); + } _p->array.append_array(p_array._p->array); } diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index 516b8f2d51..5453f0d5c6 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -143,7 +143,8 @@ uint32_t Callable::hash() const { return custom->hash(); } else { uint32_t hash = method.hash(); - return hash_djb2_one_64(object, hash); + hash = hash_murmur3_one_64(object, hash); + return hash_fmix32(hash); } } diff --git a/core/variant/dictionary.cpp b/core/variant/dictionary.cpp index 822021f440..d9f4359ee5 100644 --- a/core/variant/dictionary.cpp +++ b/core/variant/dictionary.cpp @@ -298,15 +298,15 @@ uint32_t Dictionary::recursive_hash(int recursion_count) const { return 0; } - uint32_t h = hash_djb2_one_32(Variant::DICTIONARY); + uint32_t h = hash_murmur3_one_32(Variant::DICTIONARY); recursion_count++; for (const KeyValue<Variant, Variant> &E : _p->variant_map) { - h = hash_djb2_one_32(E.key.recursive_hash(recursion_count), h); - h = hash_djb2_one_32(E.value.recursive_hash(recursion_count), h); + h = hash_murmur3_one_32(E.key.recursive_hash(recursion_count), h); + h = hash_murmur3_one_32(E.value.recursive_hash(recursion_count), h); } - return h; + return hash_fmix32(h); } Array Dictionary::keys() const { diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index 2b4e777865..6007268e21 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -2780,7 +2780,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { return hash_one_uint64((uint64_t)_data._int); } break; case FLOAT: { - return hash_djb2_one_float(_data._float); + return hash_murmur3_one_float(_data._float); } break; case STRING: { return reinterpret_cast<const String *>(_data._mem)->hash(); @@ -2788,106 +2788,102 @@ uint32_t Variant::recursive_hash(int recursion_count) const { // math types case VECTOR2: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Vector2 *>(_data._mem)->x); - return hash_djb2_one_float(reinterpret_cast<const Vector2 *>(_data._mem)->y, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Vector2 *>(_data._mem)); } break; case VECTOR2I: { - uint32_t hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Vector2i *>(_data._mem)->x); - return hash_djb2_one_32((uint32_t) reinterpret_cast<const Vector2i *>(_data._mem)->y, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Vector2i *>(_data._mem)); } break; case RECT2: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Rect2 *>(_data._mem)->position.x); - hash = hash_djb2_one_float(reinterpret_cast<const Rect2 *>(_data._mem)->position.y, hash); - hash = hash_djb2_one_float(reinterpret_cast<const Rect2 *>(_data._mem)->size.x, hash); - return hash_djb2_one_float(reinterpret_cast<const Rect2 *>(_data._mem)->size.y, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Rect2 *>(_data._mem)); } break; case RECT2I: { - uint32_t hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Rect2i *>(_data._mem)->position.x); - hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Rect2i *>(_data._mem)->position.y, hash); - hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Rect2i *>(_data._mem)->size.x, hash); - return hash_djb2_one_32((uint32_t) reinterpret_cast<const Rect2i *>(_data._mem)->size.y, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Rect2i *>(_data._mem)); } break; case TRANSFORM2D: { - uint32_t hash = 5831; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 2; j++) { - hash = hash_djb2_one_float(_data._transform2d->columns[i][j], hash); - } - } + uint32_t h = HASH_MURMUR3_SEED; + const Transform2D &t = *_data._transform2d; + h = hash_murmur3_one_real(t[0].x, h); + h = hash_murmur3_one_real(t[0].y, h); + h = hash_murmur3_one_real(t[1].x, h); + h = hash_murmur3_one_real(t[1].y, h); + h = hash_murmur3_one_real(t[2].x, h); + h = hash_murmur3_one_real(t[2].y, h); - return hash; + return hash_fmix32(h); } break; case VECTOR3: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Vector3 *>(_data._mem)->x); - hash = hash_djb2_one_float(reinterpret_cast<const Vector3 *>(_data._mem)->y, hash); - return hash_djb2_one_float(reinterpret_cast<const Vector3 *>(_data._mem)->z, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Vector3 *>(_data._mem)); } break; case VECTOR3I: { - uint32_t hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Vector3i *>(_data._mem)->x); - hash = hash_djb2_one_32((uint32_t) reinterpret_cast<const Vector3i *>(_data._mem)->y, hash); - return hash_djb2_one_32((uint32_t) reinterpret_cast<const Vector3i *>(_data._mem)->z, hash); + return HashMapHasherDefault::hash(*reinterpret_cast<const Vector3i *>(_data._mem)); } break; case PLANE: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Plane *>(_data._mem)->normal.x); - hash = hash_djb2_one_float(reinterpret_cast<const Plane *>(_data._mem)->normal.y, hash); - hash = hash_djb2_one_float(reinterpret_cast<const Plane *>(_data._mem)->normal.z, hash); - return hash_djb2_one_float(reinterpret_cast<const Plane *>(_data._mem)->d, hash); - + uint32_t h = HASH_MURMUR3_SEED; + const Plane &p = *reinterpret_cast<const Plane *>(_data._mem); + h = hash_murmur3_one_real(p.normal.x, h); + h = hash_murmur3_one_real(p.normal.y, h); + h = hash_murmur3_one_real(p.normal.z, h); + h = hash_murmur3_one_real(p.d, h); + return hash_fmix32(h); } break; case AABB: { - uint32_t hash = 5831; - for (int i = 0; i < 3; i++) { - hash = hash_djb2_one_float(_data._aabb->position[i], hash); - hash = hash_djb2_one_float(_data._aabb->size[i], hash); - } - - return hash; - + return HashMapHasherDefault::hash(*_data._aabb); } break; case QUATERNION: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->x); - hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->y, hash); - hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->z, hash); - return hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->w, hash); - + uint32_t h = HASH_MURMUR3_SEED; + const Quaternion &q = *reinterpret_cast<const Quaternion *>(_data._mem); + h = hash_murmur3_one_real(q.x, h); + h = hash_murmur3_one_real(q.y, h); + h = hash_murmur3_one_real(q.z, h); + h = hash_murmur3_one_real(q.w, h); + return hash_fmix32(h); } break; case BASIS: { - uint32_t hash = 5831; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - hash = hash_djb2_one_float(_data._basis->rows[i][j], hash); - } - } - - return hash; - + uint32_t h = HASH_MURMUR3_SEED; + const Basis &b = *_data._basis; + h = hash_murmur3_one_real(b[0].x, h); + h = hash_murmur3_one_real(b[0].y, h); + h = hash_murmur3_one_real(b[0].z, h); + h = hash_murmur3_one_real(b[1].x, h); + h = hash_murmur3_one_real(b[1].y, h); + h = hash_murmur3_one_real(b[1].z, h); + h = hash_murmur3_one_real(b[2].x, h); + h = hash_murmur3_one_real(b[2].y, h); + h = hash_murmur3_one_real(b[2].z, h); + return hash_fmix32(h); } break; case TRANSFORM3D: { - uint32_t hash = 5831; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - hash = hash_djb2_one_float(_data._transform3d->basis.rows[i][j], hash); - } - hash = hash_djb2_one_float(_data._transform3d->origin[i], hash); - } - - return hash; - + uint32_t h = HASH_MURMUR3_SEED; + const Transform3D &t = *_data._transform3d; + h = hash_murmur3_one_real(t.basis[0].x, h); + h = hash_murmur3_one_real(t.basis[0].y, h); + h = hash_murmur3_one_real(t.basis[0].z, h); + h = hash_murmur3_one_real(t.basis[1].x, h); + h = hash_murmur3_one_real(t.basis[1].y, h); + h = hash_murmur3_one_real(t.basis[1].z, h); + h = hash_murmur3_one_real(t.basis[2].x, h); + h = hash_murmur3_one_real(t.basis[2].y, h); + h = hash_murmur3_one_real(t.basis[2].z, h); + h = hash_murmur3_one_real(t.origin.x, h); + h = hash_murmur3_one_real(t.origin.y, h); + h = hash_murmur3_one_real(t.origin.z, h); + return hash_fmix32(h); } break; - // misc types case COLOR: { - uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Color *>(_data._mem)->r); - hash = hash_djb2_one_float(reinterpret_cast<const Color *>(_data._mem)->g, hash); - hash = hash_djb2_one_float(reinterpret_cast<const Color *>(_data._mem)->b, hash); - return hash_djb2_one_float(reinterpret_cast<const Color *>(_data._mem)->a, hash); - + uint32_t h = HASH_MURMUR3_SEED; + const Color &c = *reinterpret_cast<const Color *>(_data._mem); + h = hash_murmur3_one_float(c.r, h); + h = hash_murmur3_one_float(c.g, h); + h = hash_murmur3_one_float(c.b, h); + h = hash_murmur3_one_float(c.a, h); + return hash_fmix32(h); } break; case RID: { - return hash_djb2_one_64(reinterpret_cast<const ::RID *>(_data._mem)->get_id()); + return hash_one_uint64(reinterpret_cast<const ::RID *>(_data._mem)->get_id()); } break; case OBJECT: { - return hash_djb2_one_64(make_uint64_t(_get_obj().obj)); + return hash_one_uint64(hash_make_uint64_t(_get_obj().obj)); } break; case STRING_NAME: { return reinterpret_cast<const StringName *>(_data._mem)->hash(); @@ -2906,7 +2902,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { case SIGNAL: { const Signal &s = *reinterpret_cast<const Signal *>(_data._mem); uint32_t hash = s.get_name().hash(); - return hash_djb2_one_64(s.get_object_id(), hash); + return hash_murmur3_one_64(s.get_object_id(), hash); } break; case ARRAY: { const Array &arr = *reinterpret_cast<const Array *>(_data._mem); @@ -2918,9 +2914,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const { int len = arr.size(); if (likely(len)) { const uint8_t *r = arr.ptr(); - return hash_djb2_buffer((uint8_t *)&r[0], len); + return hash_murmur3_buffer((uint8_t *)&r[0], len); } else { - return hash_djb2_one_64(0); + return hash_murmur3_one_64(0); } } break; @@ -2929,9 +2925,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const { int len = arr.size(); if (likely(len)) { const int32_t *r = arr.ptr(); - return hash_djb2_buffer((uint8_t *)&r[0], len * sizeof(int32_t)); + return hash_murmur3_buffer((uint8_t *)&r[0], len * sizeof(int32_t)); } else { - return hash_djb2_one_64(0); + return hash_murmur3_one_64(0); } } break; @@ -2940,9 +2936,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const { int len = arr.size(); if (likely(len)) { const int64_t *r = arr.ptr(); - return hash_djb2_buffer((uint8_t *)&r[0], len * sizeof(int64_t)); + return hash_murmur3_buffer((uint8_t *)&r[0], len * sizeof(int64_t)); } else { - return hash_djb2_one_64(0); + return hash_murmur3_one_64(0); } } break; @@ -2952,9 +2948,13 @@ uint32_t Variant::recursive_hash(int recursion_count) const { if (likely(len)) { const float *r = arr.ptr(); - return hash_djb2_buffer((uint8_t *)&r[0], len * sizeof(float)); + uint32_t h = HASH_MURMUR3_SEED; + for (int32_t i = 0; i < len; i++) { + h = hash_murmur3_one_float(r[i], h); + } + return hash_fmix32(h); } else { - return hash_djb2_one_float(0.0); + return hash_murmur3_one_float(0.0); } } break; @@ -2964,14 +2964,18 @@ uint32_t Variant::recursive_hash(int recursion_count) const { if (likely(len)) { const double *r = arr.ptr(); - return hash_djb2_buffer((uint8_t *)&r[0], len * sizeof(double)); + uint32_t h = HASH_MURMUR3_SEED; + for (int32_t i = 0; i < len; i++) { + h = hash_murmur3_one_double(r[i], h); + } + return hash_fmix32(h); } else { - return hash_djb2_one_float(0.0); + return hash_murmur3_one_float(0.0); } } break; case PACKED_STRING_ARRAY: { - uint32_t hash = 5831; + uint32_t hash = HASH_MURMUR3_SEED; const Vector<String> &arr = PackedArrayRef<String>::get_array(_data.packed_array); int len = arr.size(); @@ -2979,14 +2983,15 @@ uint32_t Variant::recursive_hash(int recursion_count) const { const String *r = arr.ptr(); for (int i = 0; i < len; i++) { - hash = hash_djb2_one_32(r[i].hash(), hash); + hash = hash_murmur3_one_32(r[i].hash(), hash); } + hash = hash_fmix32(hash); } return hash; } break; case PACKED_VECTOR2_ARRAY: { - uint32_t hash = 5831; + uint32_t hash = HASH_MURMUR3_SEED; const Vector<Vector2> &arr = PackedArrayRef<Vector2>::get_array(_data.packed_array); int len = arr.size(); @@ -2994,15 +2999,16 @@ uint32_t Variant::recursive_hash(int recursion_count) const { const Vector2 *r = arr.ptr(); for (int i = 0; i < len; i++) { - hash = hash_djb2_one_float(r[i].x, hash); - hash = hash_djb2_one_float(r[i].y, hash); + hash = hash_murmur3_one_real(r[i].x, hash); + hash = hash_murmur3_one_real(r[i].y, hash); } + hash = hash_fmix32(hash); } return hash; } break; case PACKED_VECTOR3_ARRAY: { - uint32_t hash = 5831; + uint32_t hash = HASH_MURMUR3_SEED; const Vector<Vector3> &arr = PackedArrayRef<Vector3>::get_array(_data.packed_array); int len = arr.size(); @@ -3010,16 +3016,17 @@ uint32_t Variant::recursive_hash(int recursion_count) const { const Vector3 *r = arr.ptr(); for (int i = 0; i < len; i++) { - hash = hash_djb2_one_float(r[i].x, hash); - hash = hash_djb2_one_float(r[i].y, hash); - hash = hash_djb2_one_float(r[i].z, hash); + hash = hash_murmur3_one_real(r[i].x, hash); + hash = hash_murmur3_one_real(r[i].y, hash); + hash = hash_murmur3_one_real(r[i].z, hash); } + hash = hash_fmix32(hash); } return hash; } break; case PACKED_COLOR_ARRAY: { - uint32_t hash = 5831; + uint32_t hash = HASH_MURMUR3_SEED; const Vector<Color> &arr = PackedArrayRef<Color>::get_array(_data.packed_array); int len = arr.size(); @@ -3027,11 +3034,12 @@ uint32_t Variant::recursive_hash(int recursion_count) const { const Color *r = arr.ptr(); for (int i = 0; i < len; i++) { - hash = hash_djb2_one_float(r[i].r, hash); - hash = hash_djb2_one_float(r[i].g, hash); - hash = hash_djb2_one_float(r[i].b, hash); - hash = hash_djb2_one_float(r[i].a, hash); + hash = hash_murmur3_one_float(r[i].r, hash); + hash = hash_murmur3_one_float(r[i].g, hash); + hash = hash_murmur3_one_float(r[i].b, hash); + hash = hash_murmur3_one_float(r[i].a, hash); } + hash = hash_fmix32(hash); } return hash; diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 741d3e5b8f..cb9dfe478b 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -919,7 +919,7 @@ struct _VariantCall { } struct ConstantData { - HashMap<StringName, int> value; + HashMap<StringName, int64_t> value; #ifdef DEBUG_ENABLED List<StringName> value_ordered; #endif @@ -931,7 +931,7 @@ struct _VariantCall { static ConstantData *constant_data; - static void add_constant(int p_type, StringName p_constant_name, int p_constant_value) { + static void add_constant(int p_type, StringName p_constant_name, int64_t p_constant_value) { constant_data[p_type].value[p_constant_name] = p_constant_value; #ifdef DEBUG_ENABLED constant_data[p_type].value_ordered.push_back(p_constant_name); @@ -1170,19 +1170,19 @@ uint32_t Variant::get_builtin_method_hash(Variant::Type p_type, const StringName ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, 0); const VariantBuiltInMethodInfo *method = builtin_method_info[p_type].lookup_ptr(p_method); ERR_FAIL_COND_V(!method, 0); - uint32_t hash = hash_djb2_one_32(method->is_const); - hash = hash_djb2_one_32(method->is_static, hash); - hash = hash_djb2_one_32(method->is_vararg, hash); - hash = hash_djb2_one_32(method->has_return_type, hash); + uint32_t hash = hash_murmur3_one_32(method->is_const); + hash = hash_murmur3_one_32(method->is_static, hash); + hash = hash_murmur3_one_32(method->is_vararg, hash); + hash = hash_murmur3_one_32(method->has_return_type, hash); if (method->has_return_type) { - hash = hash_djb2_one_32(method->return_type, hash); + hash = hash_murmur3_one_32(method->return_type, hash); } - hash = hash_djb2_one_32(method->argument_count, hash); + hash = hash_murmur3_one_32(method->argument_count, hash); for (int i = 0; i < method->argument_count; i++) { - hash = method->get_argument_type(i); + hash = hash_murmur3_one_32(method->get_argument_type(i), hash); } - return hash; + return hash_fmix32(hash); } void Variant::get_method_list(List<MethodInfo> *p_list) const { @@ -1245,7 +1245,7 @@ void Variant::get_constants_for_type(Variant::Type p_type, List<StringName> *p_c for (const List<StringName>::Element *E = cd.value_ordered.front(); E; E = E->next()) { p_constants->push_back(E->get()); #else - for (const KeyValue<StringName, int> &E : cd.value) { + for (const KeyValue<StringName, int64_t> &E : cd.value) { p_constants->push_back(E.key); #endif } @@ -1281,7 +1281,7 @@ Variant Variant::get_constant_value(Variant::Type p_type, const StringName &p_va ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, 0); _VariantCall::ConstantData &cd = _VariantCall::constant_data[p_type]; - HashMap<StringName, int>::Iterator E = cd.value.find(p_value); + HashMap<StringName, int64_t>::Iterator E = cd.value.find(p_value); if (!E) { HashMap<StringName, Variant>::Iterator F = cd.variant_value.find(p_value); if (F) { @@ -1402,8 +1402,8 @@ static void _register_variant_builtin_methods() { bind_method(String, to_upper, sarray(), varray()); bind_method(String, to_lower, sarray(), varray()); - bind_method(String, left, sarray("position"), varray()); - bind_method(String, right, sarray("position"), varray()); + bind_method(String, left, sarray("length"), varray()); + bind_method(String, right, sarray("length"), varray()); bind_method(String, strip_edges, sarray("left", "right"), varray(true, true)); bind_method(String, strip_escapes, sarray(), varray()); diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp index 66badce268..7fabdcbc82 100644 --- a/core/variant/variant_utility.cpp +++ b/core/variant/variant_utility.cpp @@ -1423,17 +1423,17 @@ uint32_t Variant::get_utility_function_hash(const StringName &p_name) { const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name); ERR_FAIL_COND_V(!bfi, 0); - uint32_t hash = hash_djb2_one_32(bfi->is_vararg); - hash = hash_djb2_one_32(bfi->returns_value, hash); + uint32_t hash = hash_murmur3_one_32(bfi->is_vararg); + hash = hash_murmur3_one_32(bfi->returns_value, hash); if (bfi->returns_value) { - hash = hash_djb2_one_32(bfi->return_type, hash); + hash = hash_murmur3_one_32(bfi->return_type, hash); } - hash = hash_djb2_one_32(bfi->argcount, hash); + hash = hash_murmur3_one_32(bfi->argcount, hash); for (int i = 0; i < bfi->argcount; i++) { - hash = hash_djb2_one_32(bfi->get_arg_type(i), hash); + hash = hash_murmur3_one_32(bfi->get_arg_type(i), hash); } - return hash; + return hash_fmix32(hash); } void Variant::get_utility_function_list(List<StringName> *r_functions) { diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index dce96fb315..4048b483e8 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -1414,6 +1414,63 @@ <constant name="KEY_F16" value="16777259" enum="Key"> F16 key. </constant> + <constant name="KEY_F17" value="16777260" enum="Key"> + F17 key. + </constant> + <constant name="KEY_F18" value="16777261" enum="Key"> + F18 key. + </constant> + <constant name="KEY_F19" value="16777262" enum="Key"> + F19 key. + </constant> + <constant name="KEY_F20" value="16777263" enum="Key"> + F20 key. + </constant> + <constant name="KEY_F21" value="16777264" enum="Key"> + F21 key. + </constant> + <constant name="KEY_F22" value="16777265" enum="Key"> + F22 key. + </constant> + <constant name="KEY_F23" value="16777266" enum="Key"> + F23 key. + </constant> + <constant name="KEY_F24" value="16777267" enum="Key"> + F24 key. + </constant> + <constant name="KEY_F25" value="16777268" enum="Key"> + F25 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F26" value="16777269" enum="Key"> + F26 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F27" value="16777270" enum="Key"> + F27 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F28" value="16777271" enum="Key"> + F28 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F29" value="16777272" enum="Key"> + F29 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F30" value="16777273" enum="Key"> + F30 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F31" value="16777274" enum="Key"> + F31 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F32" value="16777275" enum="Key"> + F32 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F33" value="16777276" enum="Key"> + F33 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F34" value="16777277" enum="Key"> + F34 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> + <constant name="KEY_F35" value="16777278" enum="Key"> + F35 key. Only supported on macOS and Linux due to a Windows limitation. + </constant> <constant name="KEY_KP_MULTIPLY" value="16777345" enum="Key"> Multiply (*) key on the numeric keypad. </constant> @@ -1459,148 +1516,148 @@ <constant name="KEY_KP_9" value="16777359" enum="Key"> Number 9 on the numeric keypad. </constant> - <constant name="KEY_SUPER_L" value="16777260" enum="Key"> + <constant name="KEY_SUPER_L" value="16777280" enum="Key"> Left Super key (Windows key). </constant> - <constant name="KEY_SUPER_R" value="16777261" enum="Key"> + <constant name="KEY_SUPER_R" value="16777281" enum="Key"> Right Super key (Windows key). </constant> - <constant name="KEY_MENU" value="16777262" enum="Key"> + <constant name="KEY_MENU" value="16777282" enum="Key"> Context menu key. </constant> - <constant name="KEY_HYPER_L" value="16777263" enum="Key"> + <constant name="KEY_HYPER_L" value="16777283" enum="Key"> Left Hyper key. </constant> - <constant name="KEY_HYPER_R" value="16777264" enum="Key"> + <constant name="KEY_HYPER_R" value="16777284" enum="Key"> Right Hyper key. </constant> - <constant name="KEY_HELP" value="16777265" enum="Key"> + <constant name="KEY_HELP" value="16777285" enum="Key"> Help key. </constant> - <constant name="KEY_DIRECTION_L" value="16777266" enum="Key"> + <constant name="KEY_DIRECTION_L" value="16777286" enum="Key"> Left Direction key. </constant> - <constant name="KEY_DIRECTION_R" value="16777267" enum="Key"> + <constant name="KEY_DIRECTION_R" value="16777287" enum="Key"> Right Direction key. </constant> - <constant name="KEY_BACK" value="16777280" enum="Key"> + <constant name="KEY_BACK" value="16777288" enum="Key"> Media back key. Not to be confused with the Back button on an Android device. </constant> - <constant name="KEY_FORWARD" value="16777281" enum="Key"> + <constant name="KEY_FORWARD" value="16777289" enum="Key"> Media forward key. </constant> - <constant name="KEY_STOP" value="16777282" enum="Key"> + <constant name="KEY_STOP" value="16777290" enum="Key"> Media stop key. </constant> - <constant name="KEY_REFRESH" value="16777283" enum="Key"> + <constant name="KEY_REFRESH" value="16777291" enum="Key"> Media refresh key. </constant> - <constant name="KEY_VOLUMEDOWN" value="16777284" enum="Key"> + <constant name="KEY_VOLUMEDOWN" value="16777292" enum="Key"> Volume down key. </constant> - <constant name="KEY_VOLUMEMUTE" value="16777285" enum="Key"> + <constant name="KEY_VOLUMEMUTE" value="16777293" enum="Key"> Mute volume key. </constant> - <constant name="KEY_VOLUMEUP" value="16777286" enum="Key"> + <constant name="KEY_VOLUMEUP" value="16777294" enum="Key"> Volume up key. </constant> - <constant name="KEY_BASSBOOST" value="16777287" enum="Key"> + <constant name="KEY_BASSBOOST" value="16777295" enum="Key"> Bass Boost key. </constant> - <constant name="KEY_BASSUP" value="16777288" enum="Key"> + <constant name="KEY_BASSUP" value="16777296" enum="Key"> Bass up key. </constant> - <constant name="KEY_BASSDOWN" value="16777289" enum="Key"> + <constant name="KEY_BASSDOWN" value="16777297" enum="Key"> Bass down key. </constant> - <constant name="KEY_TREBLEUP" value="16777290" enum="Key"> + <constant name="KEY_TREBLEUP" value="16777298" enum="Key"> Treble up key. </constant> - <constant name="KEY_TREBLEDOWN" value="16777291" enum="Key"> + <constant name="KEY_TREBLEDOWN" value="16777299" enum="Key"> Treble down key. </constant> - <constant name="KEY_MEDIAPLAY" value="16777292" enum="Key"> + <constant name="KEY_MEDIAPLAY" value="16777300" enum="Key"> Media play key. </constant> - <constant name="KEY_MEDIASTOP" value="16777293" enum="Key"> + <constant name="KEY_MEDIASTOP" value="16777301" enum="Key"> Media stop key. </constant> - <constant name="KEY_MEDIAPREVIOUS" value="16777294" enum="Key"> + <constant name="KEY_MEDIAPREVIOUS" value="16777302" enum="Key"> Previous song key. </constant> - <constant name="KEY_MEDIANEXT" value="16777295" enum="Key"> + <constant name="KEY_MEDIANEXT" value="16777303" enum="Key"> Next song key. </constant> - <constant name="KEY_MEDIARECORD" value="16777296" enum="Key"> + <constant name="KEY_MEDIARECORD" value="16777304" enum="Key"> Media record key. </constant> - <constant name="KEY_HOMEPAGE" value="16777297" enum="Key"> + <constant name="KEY_HOMEPAGE" value="16777305" enum="Key"> Home page key. </constant> - <constant name="KEY_FAVORITES" value="16777298" enum="Key"> + <constant name="KEY_FAVORITES" value="16777306" enum="Key"> Favorites key. </constant> - <constant name="KEY_SEARCH" value="16777299" enum="Key"> + <constant name="KEY_SEARCH" value="16777307" enum="Key"> Search key. </constant> - <constant name="KEY_STANDBY" value="16777300" enum="Key"> + <constant name="KEY_STANDBY" value="16777308" enum="Key"> Standby key. </constant> - <constant name="KEY_OPENURL" value="16777301" enum="Key"> + <constant name="KEY_OPENURL" value="16777309" enum="Key"> Open URL / Launch Browser key. </constant> - <constant name="KEY_LAUNCHMAIL" value="16777302" enum="Key"> + <constant name="KEY_LAUNCHMAIL" value="16777310" enum="Key"> Launch Mail key. </constant> - <constant name="KEY_LAUNCHMEDIA" value="16777303" enum="Key"> + <constant name="KEY_LAUNCHMEDIA" value="16777311" enum="Key"> Launch Media key. </constant> - <constant name="KEY_LAUNCH0" value="16777304" enum="Key"> + <constant name="KEY_LAUNCH0" value="16777312" enum="Key"> Launch Shortcut 0 key. </constant> - <constant name="KEY_LAUNCH1" value="16777305" enum="Key"> + <constant name="KEY_LAUNCH1" value="16777313" enum="Key"> Launch Shortcut 1 key. </constant> - <constant name="KEY_LAUNCH2" value="16777306" enum="Key"> + <constant name="KEY_LAUNCH2" value="16777314" enum="Key"> Launch Shortcut 2 key. </constant> - <constant name="KEY_LAUNCH3" value="16777307" enum="Key"> + <constant name="KEY_LAUNCH3" value="16777315" enum="Key"> Launch Shortcut 3 key. </constant> - <constant name="KEY_LAUNCH4" value="16777308" enum="Key"> + <constant name="KEY_LAUNCH4" value="16777316" enum="Key"> Launch Shortcut 4 key. </constant> - <constant name="KEY_LAUNCH5" value="16777309" enum="Key"> + <constant name="KEY_LAUNCH5" value="16777317" enum="Key"> Launch Shortcut 5 key. </constant> - <constant name="KEY_LAUNCH6" value="16777310" enum="Key"> + <constant name="KEY_LAUNCH6" value="16777318" enum="Key"> Launch Shortcut 6 key. </constant> - <constant name="KEY_LAUNCH7" value="16777311" enum="Key"> + <constant name="KEY_LAUNCH7" value="16777319" enum="Key"> Launch Shortcut 7 key. </constant> - <constant name="KEY_LAUNCH8" value="16777312" enum="Key"> + <constant name="KEY_LAUNCH8" value="16777320" enum="Key"> Launch Shortcut 8 key. </constant> - <constant name="KEY_LAUNCH9" value="16777313" enum="Key"> + <constant name="KEY_LAUNCH9" value="16777321" enum="Key"> Launch Shortcut 9 key. </constant> - <constant name="KEY_LAUNCHA" value="16777314" enum="Key"> + <constant name="KEY_LAUNCHA" value="16777322" enum="Key"> Launch Shortcut A key. </constant> - <constant name="KEY_LAUNCHB" value="16777315" enum="Key"> + <constant name="KEY_LAUNCHB" value="16777323" enum="Key"> Launch Shortcut B key. </constant> - <constant name="KEY_LAUNCHC" value="16777316" enum="Key"> + <constant name="KEY_LAUNCHC" value="16777324" enum="Key"> Launch Shortcut C key. </constant> - <constant name="KEY_LAUNCHD" value="16777317" enum="Key"> + <constant name="KEY_LAUNCHD" value="16777325" enum="Key"> Launch Shortcut D key. </constant> - <constant name="KEY_LAUNCHE" value="16777318" enum="Key"> + <constant name="KEY_LAUNCHE" value="16777326" enum="Key"> Launch Shortcut E key. </constant> - <constant name="KEY_LAUNCHF" value="16777319" enum="Key"> + <constant name="KEY_LAUNCHF" value="16777327" enum="Key"> Launch Shortcut F key. </constant> <constant name="KEY_UNKNOWN" value="33554431" enum="Key"> @@ -2419,63 +2476,66 @@ <constant name="PROPERTY_HINT_LENGTH" value="5" enum="PropertyHint"> Deprecated hint, unused. </constant> - <constant name="PROPERTY_HINT_KEY_ACCEL" value="6" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LINK" value="6" enum="PropertyHint"> + Hints that a vector property should allow linking values (e.g. to edit both [code]x[/code] and [code]y[/code] together). + </constant> + <constant name="PROPERTY_HINT_KEY_ACCEL" value="7" enum="PropertyHint"> Deprecated hint, unused. </constant> - <constant name="PROPERTY_HINT_FLAGS" value="7" enum="PropertyHint"> + <constant name="PROPERTY_HINT_FLAGS" value="8" enum="PropertyHint"> Hints that an integer property is a bitmask with named bit flags. For example, to allow toggling bits 0, 1, 2 and 4, the hint could be something like [code]"Bit0,Bit1,Bit2,,Bit4"[/code]. </constant> - <constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="8" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="9" enum="PropertyHint"> Hints that an integer property is a bitmask using the optionally named 2D render layers. </constant> - <constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="9" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="10" enum="PropertyHint"> Hints that an integer property is a bitmask using the optionally named 2D physics layers. </constant> - <constant name="PROPERTY_HINT_LAYERS_2D_NAVIGATION" value="10" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LAYERS_2D_NAVIGATION" value="11" enum="PropertyHint"> Hints that an integer property is a bitmask using the optionally named 2D navigation layers. </constant> - <constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="11" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="12" enum="PropertyHint"> Hints that an integer property is a bitmask using the optionally named 3D render layers. </constant> - <constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="12" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="13" enum="PropertyHint"> Hints that an integer property is a bitmask using the optionally named 3D physics layers. </constant> - <constant name="PROPERTY_HINT_LAYERS_3D_NAVIGATION" value="13" enum="PropertyHint"> - Hints that an integer property is a bitmask using the optionally named 2D navigation layers. + <constant name="PROPERTY_HINT_LAYERS_3D_NAVIGATION" value="14" enum="PropertyHint"> + Hints that an integer property is a bitmask using the optionally named 3D navigation layers. </constant> - <constant name="PROPERTY_HINT_FILE" value="14" enum="PropertyHint"> + <constant name="PROPERTY_HINT_FILE" value="15" enum="PropertyHint"> Hints that a string property is a path to a file. Editing it will show a file dialog for picking the path. The hint string can be a set of filters with wildcards like [code]"*.png,*.jpg"[/code]. </constant> - <constant name="PROPERTY_HINT_DIR" value="15" enum="PropertyHint"> + <constant name="PROPERTY_HINT_DIR" value="16" enum="PropertyHint"> Hints that a string property is a path to a directory. Editing it will show a file dialog for picking the path. </constant> - <constant name="PROPERTY_HINT_GLOBAL_FILE" value="16" enum="PropertyHint"> + <constant name="PROPERTY_HINT_GLOBAL_FILE" value="17" enum="PropertyHint"> Hints that a string property is an absolute path to a file outside the project folder. Editing it will show a file dialog for picking the path. The hint string can be a set of filters with wildcards like [code]"*.png,*.jpg"[/code]. </constant> - <constant name="PROPERTY_HINT_GLOBAL_DIR" value="17" enum="PropertyHint"> + <constant name="PROPERTY_HINT_GLOBAL_DIR" value="18" enum="PropertyHint"> Hints that a string property is an absolute path to a directory outside the project folder. Editing it will show a file dialog for picking the path. </constant> - <constant name="PROPERTY_HINT_RESOURCE_TYPE" value="18" enum="PropertyHint"> + <constant name="PROPERTY_HINT_RESOURCE_TYPE" value="19" enum="PropertyHint"> Hints that a property is an instance of a [Resource]-derived type, optionally specified via the hint string (e.g. [code]"Texture2D"[/code]). Editing it will show a popup menu of valid resource types to instantiate. </constant> - <constant name="PROPERTY_HINT_MULTILINE_TEXT" value="19" enum="PropertyHint"> + <constant name="PROPERTY_HINT_MULTILINE_TEXT" value="20" enum="PropertyHint"> Hints that a string property is text with line breaks. Editing it will show a text input field where line breaks can be typed. </constant> - <constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="20" enum="PropertyHint"> + <constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="21" enum="PropertyHint"> Hints that a string property should have a placeholder text visible on its input field, whenever the property is empty. The hint string is the placeholder text to use. </constant> - <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="21" enum="PropertyHint"> + <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="22" enum="PropertyHint"> Hints that a color property should be edited without changing its alpha component, i.e. only R, G and B channels are edited. </constant> - <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="22" enum="PropertyHint"> + <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="23" enum="PropertyHint"> Hints that an image is compressed using lossy compression. </constant> - <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="23" enum="PropertyHint"> + <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="24" enum="PropertyHint"> Hints that an image is compressed using lossless compression. </constant> - <constant name="PROPERTY_HINT_OBJECT_ID" value="24" enum="PropertyHint"> + <constant name="PROPERTY_HINT_OBJECT_ID" value="25" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_TYPE_STRING" value="25" enum="PropertyHint"> + <constant name="PROPERTY_HINT_TYPE_STRING" value="26" enum="PropertyHint"> Hint that a property represents a particular type. If a property is [constant TYPE_STRING], allows to set a type from the create dialog. If you need to create an [Array] to contain elements of a specific type, the [code]hint_string[/code] must encode nested types using [code]":"[/code] and [code]"/"[/code] for specifying [Resource] types. For instance: [codeblock] hint_string = "%s:" % [TYPE_INT] # Array of inteters. @@ -2485,43 +2545,45 @@ [/codeblock] [b]Note:[/b] The final colon is required to specify for properly detecting built-in types. </constant> - <constant name="PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE" value="26" enum="PropertyHint"> + <constant name="PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE" value="27" enum="PropertyHint"> + </constant> + <constant name="PROPERTY_HINT_METHOD_OF_VARIANT_TYPE" value="28" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_METHOD_OF_VARIANT_TYPE" value="27" enum="PropertyHint"> + <constant name="PROPERTY_HINT_METHOD_OF_BASE_TYPE" value="29" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_METHOD_OF_BASE_TYPE" value="28" enum="PropertyHint"> + <constant name="PROPERTY_HINT_METHOD_OF_INSTANCE" value="30" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_METHOD_OF_INSTANCE" value="29" enum="PropertyHint"> + <constant name="PROPERTY_HINT_METHOD_OF_SCRIPT" value="31" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_METHOD_OF_SCRIPT" value="30" enum="PropertyHint"> + <constant name="PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE" value="32" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE" value="31" enum="PropertyHint"> + <constant name="PROPERTY_HINT_PROPERTY_OF_BASE_TYPE" value="33" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_PROPERTY_OF_BASE_TYPE" value="32" enum="PropertyHint"> + <constant name="PROPERTY_HINT_PROPERTY_OF_INSTANCE" value="34" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_PROPERTY_OF_INSTANCE" value="33" enum="PropertyHint"> + <constant name="PROPERTY_HINT_PROPERTY_OF_SCRIPT" value="35" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_PROPERTY_OF_SCRIPT" value="34" enum="PropertyHint"> + <constant name="PROPERTY_HINT_OBJECT_TOO_BIG" value="36" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_OBJECT_TOO_BIG" value="35" enum="PropertyHint"> + <constant name="PROPERTY_HINT_NODE_PATH_VALID_TYPES" value="37" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_NODE_PATH_VALID_TYPES" value="36" enum="PropertyHint"> + <constant name="PROPERTY_HINT_SAVE_FILE" value="38" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_SAVE_FILE" value="37" enum="PropertyHint"> + <constant name="PROPERTY_HINT_GLOBAL_SAVE_FILE" value="39" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="38" enum="PropertyHint"> + <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="40" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_INT_IS_POINTER" value="40" enum="PropertyHint"> + <constant name="PROPERTY_HINT_INT_IS_POINTER" value="42" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_ARRAY_TYPE" value="39" enum="PropertyHint"> + <constant name="PROPERTY_HINT_ARRAY_TYPE" value="41" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_LOCALE_ID" value="41" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LOCALE_ID" value="43" enum="PropertyHint"> Hints that a string property is a locale code. Editing it will show a locale dialog for picking language and country. </constant> - <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="42" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="44" enum="PropertyHint"> Hints that a dictionary property is string translation map. Dictionary keys are locale codes and, values are translated strings. </constant> - <constant name="PROPERTY_HINT_MAX" value="43" enum="PropertyHint"> + <constant name="PROPERTY_HINT_MAX" value="45" enum="PropertyHint"> </constant> <constant name="PROPERTY_USAGE_NONE" value="0" enum="PropertyUsageFlags"> </constant> diff --git a/doc/classes/AStar2D.xml b/doc/classes/AStar2D.xml index 7a27568d30..c05fb885b9 100644 --- a/doc/classes/AStar2D.xml +++ b/doc/classes/AStar2D.xml @@ -52,8 +52,9 @@ <return type="bool" /> <argument index="0" name="id" type="int" /> <argument index="1" name="to_id" type="int" /> + <argument index="2" name="bidirectional" type="bool" default="true" /> <description> - Returns whether there is a connection/segment between the given points. + Returns whether there is a connection/segment between the given points. If [code]bidirectional[/code] is [code]false[/code], returns whether movement from [code]id[/code] to [code]to_id[/code] is possible through this segment. </description> </method> <method name="clear"> @@ -89,8 +90,9 @@ <return type="void" /> <argument index="0" name="id" type="int" /> <argument index="1" name="to_id" type="int" /> + <argument index="2" name="bidirectional" type="bool" default="true" /> <description> - Deletes the segment between the given points. + Deletes the segment between the given points. If [code]bidirectional[/code] is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] is prevented, and a unidirectional segment possibly remains. </description> </method> <method name="get_available_point_id" qualifiers="const"> @@ -133,7 +135,7 @@ </description> </method> <method name="get_id_path"> - <return type="PackedInt32Array" /> + <return type="PackedInt64Array" /> <argument index="0" name="from_id" type="int" /> <argument index="1" name="to_id" type="int" /> <description> @@ -177,7 +179,7 @@ </description> </method> <method name="get_point_connections"> - <return type="PackedInt32Array" /> + <return type="PackedInt64Array" /> <argument index="0" name="id" type="int" /> <description> Returns an array with the IDs of the points that form the connection with the given point. diff --git a/doc/classes/AStar3D.xml b/doc/classes/AStar3D.xml index 33407c3e74..ea4e49c173 100644 --- a/doc/classes/AStar3D.xml +++ b/doc/classes/AStar3D.xml @@ -164,7 +164,7 @@ </description> </method> <method name="get_id_path"> - <return type="PackedInt32Array" /> + <return type="PackedInt64Array" /> <argument index="0" name="from_id" type="int" /> <argument index="1" name="to_id" type="int" /> <description> @@ -207,7 +207,7 @@ </description> </method> <method name="get_point_connections"> - <return type="PackedInt32Array" /> + <return type="PackedInt64Array" /> <argument index="0" name="id" type="int" /> <description> Returns an array with the IDs of the points that form the connection with the given point. diff --git a/doc/classes/AnimationLibrary.xml b/doc/classes/AnimationLibrary.xml index 0a731edadd..d856c65dfc 100644 --- a/doc/classes/AnimationLibrary.xml +++ b/doc/classes/AnimationLibrary.xml @@ -51,18 +51,18 @@ </members> <signals> <signal name="animation_added"> - <argument index="0" name="name" type="Animation" /> + <argument index="0" name="name" type="StringName" /> <description> </description> </signal> <signal name="animation_removed"> - <argument index="0" name="name" type="Animation" /> + <argument index="0" name="name" type="StringName" /> <description> </description> </signal> <signal name="animation_renamed"> - <argument index="0" name="name" type="Animation" /> - <argument index="1" name="to_name" type="Animation" /> + <argument index="0" name="name" type="StringName" /> + <argument index="1" name="to_name" type="StringName" /> <description> </description> </signal> diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index 94181db95f..c149cdc0e4 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -131,9 +131,10 @@ The callable's method should take one [Variant] parameter (the current array element) and return a boolean value. [codeblock] func _ready(): - print([6, 10, 6].all(greater_than_5)) # Prints True (3 elements evaluate to `true`). - print([4, 10, 4].all(greater_than_5)) # Prints False (1 elements evaluate to `true`). - print([4, 4, 4].all(greater_than_5)) # Prints False (0 elements evaluate to `true`). + print([6, 10, 6].all(greater_than_5)) # Prints True (3/3 elements evaluate to `true`). + print([4, 10, 4].all(greater_than_5)) # Prints False (1/3 elements evaluate to `true`). + print([4, 4, 4].all(greater_than_5)) # Prints False (0/3 elements evaluate to `true`). + print([].all(greater_than_5)) # Prints True (0/0 elements evaluate to `true`). print([6, 10, 6].all(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. @@ -142,6 +143,7 @@ [/codeblock] See also [method any], [method filter], [method map] and [method reduce]. [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). + [b]Note:[/b] For an empty array, this method [url=https://en.wikipedia.org/wiki/Vacuous_truth]always[/url] returns [code]true[/code]. </description> </method> <method name="any" qualifiers="const"> @@ -155,6 +157,7 @@ print([6, 10, 6].any(greater_than_5)) # Prints True (3 elements evaluate to `true`). print([4, 10, 4].any(greater_than_5)) # Prints True (1 elements evaluate to `true`). print([4, 4, 4].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). + print([].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). print([6, 10, 6].any(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. @@ -163,6 +166,7 @@ [/codeblock] See also [method all], [method filter], [method map] and [method reduce]. [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). + [b]Note:[/b] For an empty array, this method always returns [code]false[/code]. </description> </method> <method name="append"> diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml index 7ae0b06dad..43fa9d6ad3 100644 --- a/doc/classes/AudioEffectAmplify.xml +++ b/doc/classes/AudioEffectAmplify.xml @@ -2,12 +2,12 @@ <class name="AudioEffectAmplify" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> Adds an amplifying audio effect to an audio bus. - Increases or decreases the volume of the selected audio bus. </brief_description> <description> Increases or decreases the volume being routed through the audio bus. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db" default="0.0"> diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml index 3635f122f2..4efa431714 100644 --- a/doc/classes/AudioEffectBandLimitFilter.xml +++ b/doc/classes/AudioEffectBandLimitFilter.xml @@ -7,5 +7,6 @@ Limits the frequencies in a range around the [member AudioEffectFilter.cutoff_hz] and allows frequencies outside of this range to pass. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml index 5e7713f3d4..6820b2c9f8 100644 --- a/doc/classes/AudioEffectBandPassFilter.xml +++ b/doc/classes/AudioEffectBandPassFilter.xml @@ -7,5 +7,6 @@ Attenuates the frequencies inside of a range around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectCapture.xml b/doc/classes/AudioEffectCapture.xml index 7a7f1f8e8a..8e02056456 100644 --- a/doc/classes/AudioEffectCapture.xml +++ b/doc/classes/AudioEffectCapture.xml @@ -8,6 +8,7 @@ Application code should consume these audio frames from this ring buffer using [method get_buffer] and process it as needed, for example to capture data from a microphone, implement application defined effects, or to transmit audio over the network. When capturing audio data from a microphone, the format of the samples will be stereo 32-bit floating point PCM. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <methods> <method name="can_get_buffer" qualifiers="const"> diff --git a/doc/classes/AudioEffectChorus.xml b/doc/classes/AudioEffectChorus.xml index ca04126da4..5efba17e6a 100644 --- a/doc/classes/AudioEffectChorus.xml +++ b/doc/classes/AudioEffectChorus.xml @@ -7,6 +7,7 @@ Adds a chorus audio effect. The effect applies a filter with voices to duplicate the audio source and manipulate it through the filter. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <methods> <method name="get_voice_cutoff_hz" qualifiers="const"> diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml index 5ad948feba..8793ec0a02 100644 --- a/doc/classes/AudioEffectCompressor.xml +++ b/doc/classes/AudioEffectCompressor.xml @@ -13,6 +13,7 @@ - Accentuates transients by using a wider attack, making effects sound more punchy. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us" default="20.0"> diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml index 8a95e315cd..8223ccd6bd 100644 --- a/doc/classes/AudioEffectDelay.xml +++ b/doc/classes/AudioEffectDelay.xml @@ -8,6 +8,7 @@ Plays input signal back after a period of time. The delayed signal may be played back multiple times to create the sound of a repeating, decaying echo. Delay effects range from a subtle echo effect to a pronounced blending of previous sounds with new sounds. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="dry" type="float" setter="set_dry" getter="get_dry" default="1.0"> diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml index 908ae956ed..ce5b6de3be 100644 --- a/doc/classes/AudioEffectEQ.xml +++ b/doc/classes/AudioEffectEQ.xml @@ -8,6 +8,7 @@ AudioEffectEQ gives you control over frequencies. Use it to compensate for existing deficiencies in audio. AudioEffectEQs are useful on the Master bus to completely master a mix and give it more character. They are also useful when a game is run on a mobile device, to adjust the mix to that kind of speakers (it can be added but disabled when headphones are plugged). </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <methods> <method name="get_band_count" qualifiers="const"> diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml index 0b03ea99dd..8cf53b9df2 100644 --- a/doc/classes/AudioEffectEQ10.xml +++ b/doc/classes/AudioEffectEQ10.xml @@ -19,5 +19,6 @@ See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml index 6861a74596..2eed3b4836 100644 --- a/doc/classes/AudioEffectEQ21.xml +++ b/doc/classes/AudioEffectEQ21.xml @@ -30,5 +30,6 @@ See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10]. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml index 5aea8efaa9..816d4b9b38 100644 --- a/doc/classes/AudioEffectEQ6.xml +++ b/doc/classes/AudioEffectEQ6.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectEQ6" inherits="AudioEffectEQ" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz. + Adds a 6-band equalizer audio effect to an audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz. Each frequency can be modulated between -60/+24 dB. </brief_description> <description> @@ -15,5 +15,6 @@ See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml index 02d8dbfffc..53e6f3ca63 100644 --- a/doc/classes/AudioEffectHighPassFilter.xml +++ b/doc/classes/AudioEffectHighPassFilter.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectHighPassFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a high-pass filter to the Audio Bus. + Adds a high-pass filter to the audio bus. </brief_description> <description> Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and allows higher frequencies to pass. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml index bb5cf5c4a0..f2c20862fb 100644 --- a/doc/classes/AudioEffectHighShelfFilter.xml +++ b/doc/classes/AudioEffectHighShelfFilter.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectHighShelfFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]. + Adds a high-shelf filter to the audio bus. </brief_description> <description> + Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]. </description> <tutorials> <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml index 3fd099b55e..e841889b2a 100644 --- a/doc/classes/AudioEffectLimiter.xml +++ b/doc/classes/AudioEffectLimiter.xml @@ -8,6 +8,7 @@ Soft clipping starts to reduce the peaks a little below the threshold level and progressively increases its effect as the input level increases such that the threshold is never exceeded. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db" default="-0.1"> diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml index 8a9ca04354..b0577f19c3 100644 --- a/doc/classes/AudioEffectLowPassFilter.xml +++ b/doc/classes/AudioEffectLowPassFilter.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectLowPassFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a low-pass filter to the Audio bus. + Adds a low-pass filter to the audio bus. </brief_description> <description> Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and allows lower frequencies to pass. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml index 04cc1ab1d8..f654ba3612 100644 --- a/doc/classes/AudioEffectLowShelfFilter.xml +++ b/doc/classes/AudioEffectLowShelfFilter.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectLowShelfFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]. + Adds a low-shelf filter to the audio bus. </brief_description> <description> + Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]. </description> <tutorials> <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml index a2cc764003..ad4577cfbc 100644 --- a/doc/classes/AudioEffectNotchFilter.xml +++ b/doc/classes/AudioEffectNotchFilter.xml @@ -7,5 +7,6 @@ Attenuates frequencies in a narrow band around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this range. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> </class> diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml index 1dd2d9fa27..291e86214e 100644 --- a/doc/classes/AudioEffectPanner.xml +++ b/doc/classes/AudioEffectPanner.xml @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPanner" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a panner audio effect to an Audio bus. Pans sound left or right. + Adds a panner audio effect to an audio bus. Pans sound left or right. </brief_description> <description> Determines how much of an audio signal is sent to the left and right buses. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="pan" type="float" setter="set_pan" getter="get_pan" default="0.0"> diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml index 9c10052b6a..7aaf404352 100644 --- a/doc/classes/AudioEffectPhaser.xml +++ b/doc/classes/AudioEffectPhaser.xml @@ -1,13 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPhaser" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a phaser audio effect to an Audio bus. + Adds a phaser audio effect to an audio bus. Combines the original signal with a copy that is slightly out of phase with the original. </brief_description> <description> Combines phase-shifted signals with the original signal. The movement of the phase-shifted signals is controlled using a low-frequency oscillator. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0"> diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml index aab380aa72..952d432879 100644 --- a/doc/classes/AudioEffectPitchShift.xml +++ b/doc/classes/AudioEffectPitchShift.xml @@ -1,13 +1,14 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AudioEffectPitchShift" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> - Adds a pitch-shifting audio effect to an Audio bus. + Adds a pitch-shifting audio effect to an audio bus. Raises or lowers the pitch of original sound. </brief_description> <description> Allows modulation of pitch independently of tempo. All frequencies can be increased/decreased with minimal effect on transients. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="fft_size" type="int" setter="set_fft_size" getter="get_fft_size" enum="AudioEffectPitchShift.FFTSize" default="3"> diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml index 5525102806..b024f06849 100644 --- a/doc/classes/AudioEffectReverb.xml +++ b/doc/classes/AudioEffectReverb.xml @@ -2,12 +2,12 @@ <class name="AudioEffectReverb" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> Adds a reverberation audio effect to an Audio bus. - Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces. </brief_description> <description> - Simulates rooms of different sizes. Its parameters can be adjusted to simulate the sound of a specific room. + Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> <members> diff --git a/doc/classes/AudioEffectStereoEnhance.xml b/doc/classes/AudioEffectStereoEnhance.xml index 5c62ba982f..088d61189f 100644 --- a/doc/classes/AudioEffectStereoEnhance.xml +++ b/doc/classes/AudioEffectStereoEnhance.xml @@ -7,6 +7,7 @@ An audio effect that can be used to adjust the intensity of stereo panning. </description> <tutorials> + <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link> </tutorials> <members> <member name="pan_pullout" type="float" setter="set_pan_pullout" getter="get_pan_pullout" default="1.0"> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index 7d0470f396..76666b1f27 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -64,6 +64,9 @@ <member name="max_polyphony" type="int" setter="set_max_polyphony" getter="get_max_polyphony" default="1"> The maximum number of sounds this node can play at the same time. Playing additional sounds after this value is reached will cut off the oldest sounds. </member> + <member name="panning_strength" type="float" setter="set_panning_strength" getter="get_panning_strength" default="1.0"> + Scales the panning strength for this node by multiplying the base [member ProjectSettings.audio/general/2d_panning_strength] with this factor. Higher values will pan audio from left to right more dramatically than lower values. + </member> <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0"> The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate. </member> diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml index 8356596f54..a49b1e2291 100644 --- a/doc/classes/AudioStreamPlayer3D.xml +++ b/doc/classes/AudioStreamPlayer3D.xml @@ -86,6 +86,9 @@ <member name="max_polyphony" type="int" setter="set_max_polyphony" getter="get_max_polyphony" default="1"> The maximum number of sounds this node can play at the same time. Playing additional sounds after this value is reached will cut off the oldest sounds. </member> + <member name="panning_strength" type="float" setter="set_panning_strength" getter="get_panning_strength" default="1.0"> + Scales the panning strength for this node by multiplying the base [member ProjectSettings.audio/general/3d_panning_strength] with this factor. Higher values will pan audio from left to right more dramatically than lower values. + </member> <member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0"> The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate. </member> diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml index a9c6030809..d3ae85101d 100644 --- a/doc/classes/BaseMaterial3D.xml +++ b/doc/classes/BaseMaterial3D.xml @@ -359,6 +359,7 @@ </member> <member name="texture_filter" type="int" setter="set_texture_filter" getter="get_texture_filter" enum="BaseMaterial3D.TextureFilter" default="3"> Filter flags for the texture. See [enum TextureFilter] for options. + [b]Note:[/b] [member heightmap_texture] is always sampled with linear filtering, even if nearest-neighbor filtering is selected here. This is to ensure the heightmap effect looks as intended. If you need sharper height transitions between pixels, resize the heightmap texture in an image editor with nearest-neighbor filtering. </member> <member name="texture_repeat" type="bool" setter="set_flag" getter="get_flag" default="true"> Repeat flags for the texture. See [enum TextureFilter] for options. diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml index d85d02fbfb..1e0b685795 100644 --- a/doc/classes/Button.xml +++ b/doc/classes/Button.xml @@ -92,6 +92,9 @@ <member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0"> Base text writing direction. </member> + <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0"> + Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes. + </member> </members> <theme_items> <theme_item name="font_color" data_type="color" type="Color" default="Color(0.875, 0.875, 0.875, 1)"> diff --git a/doc/classes/CurveTexture.xml b/doc/classes/CurveTexture.xml index 6aa39e453e..85473fc237 100644 --- a/doc/classes/CurveTexture.xml +++ b/doc/classes/CurveTexture.xml @@ -5,23 +5,27 @@ </brief_description> <description> Renders a given [Curve] provided to it. Simplifies the task of drawing curves and/or saving them as image files. + If you need to store up to 3 curves within a single texture, use [CurveXYZTexture] instead. See also [GradientTexture1D] and [GradientTexture2D]. </description> <tutorials> </tutorials> <members> <member name="curve" type="Curve" setter="set_curve" getter="get_curve"> - The [code]curve[/code] rendered onto the texture. + The [Curve] that is rendered onto the texture. </member> <member name="texture_mode" type="int" setter="set_texture_mode" getter="get_texture_mode" enum="CurveTexture.TextureMode" default="0"> + The format the texture should be generated with. When passing a CurveTexture as a input to a [Shader], this may need to be adjusted. </member> <member name="width" type="int" setter="set_width" getter="get_width" default="256"> - The width of the texture. + The width of the texture (in pixels). Higher values make it possible to represent high-frequency data better (such as sudden direction changes), at the cost of increased generation time and memory usage. </member> </members> <constants> <constant name="TEXTURE_MODE_RGB" value="0" enum="TextureMode"> + Store the curve equally across the red, green and blue channels. This uses more video memory, but is more compatible with shaders that only read the green and blue values. </constant> <constant name="TEXTURE_MODE_RED" value="1" enum="TextureMode"> + Store the curve only in the red channel. This saves video memory, but some custom shaders may not be able to work with this. </constant> </constants> </class> diff --git a/doc/classes/CurveXYZTexture.xml b/doc/classes/CurveXYZTexture.xml index d289e394aa..e3f2e8fc45 100644 --- a/doc/classes/CurveXYZTexture.xml +++ b/doc/classes/CurveXYZTexture.xml @@ -1,19 +1,26 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CurveXYZTexture" inherits="Texture2D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + A texture that shows 3 different curves (stored on the red, green and blue color channels). </brief_description> <description> + Renders 3 given [Curve]s provided to it, on the red, green and blue channels respectively. Compared to using separate [CurveTexture]s, this further simplifies the task of drawing curves and/or saving them as image files. + If you only need to store one curve within a single texture, use [CurveTexture] instead. See also [GradientTexture1D] and [GradientTexture2D]. </description> <tutorials> </tutorials> <members> <member name="curve_x" type="Curve" setter="set_curve_x" getter="get_curve_x"> + The [Curve] that is rendered onto the texture's red channel. </member> <member name="curve_y" type="Curve" setter="set_curve_y" getter="get_curve_y"> + The [Curve] that is rendered onto the texture's green channel. </member> <member name="curve_z" type="Curve" setter="set_curve_z" getter="get_curve_z"> + The [Curve] that is rendered onto the texture's blue channel. </member> <member name="width" type="int" setter="set_width" getter="get_width" default="256"> + The width of the texture (in pixels). Higher values make it possible to represent high-frequency data better (such as sudden direction changes), at the cost of increased generation time and memory usage. </member> </members> </class> diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml index a423d7a4e4..d32e7b3a94 100644 --- a/doc/classes/FontData.xml +++ b/doc/classes/FontData.xml @@ -3,7 +3,7 @@ <brief_description> Font source data and prerendered glyph cache, imported from dynamic or bitmap font. Supported font formats: - - Dynamic font importer: TrueType (.ttf), OpenType (.otf), WOFF (.woff), WOFF2 (.woff2), Type 1 (.pfb, .pfm). + - Dynamic font importer: TrueType (.ttf), TrueType collection (.ttc), OpenType (.otf), OpenType collection (.otc), WOFF (.woff), WOFF2 (.woff2), Type 1 (.pfb, .pfm). - Bitmap font importer: AngelCode BMFont (.fnt, .font), text and binary (version 3) format variants. - Monospace image font importer: All supported image formats. </brief_description> @@ -87,6 +87,12 @@ Returns font descent (number of pixels below the baseline). </description> </method> + <method name="get_face_count" qualifiers="const"> + <return type="int" /> + <description> + Returns number of faces in the TrueType / OpenType collection. + </description> + </method> <method name="get_glyph_advance" qualifiers="const"> <return type="Vector2" /> <argument index="0" name="cache_index" type="int" /> @@ -318,7 +324,8 @@ <return type="int" enum="Error" /> <argument index="0" name="path" type="String" /> <description> - Loads a TrueType (.ttf), OpenType (.otf), WOFF (.woff), WOFF2 (.woff2) or Type 1 (.pfb, .pfm) dynamic font from file [code]path[/code]. + Loads a TrueType (.ttf), TrueType collection (.ttc), OpenType (.otf), OpenType collection (.otc), WOFF (.woff), WOFF2 (.woff2) or Type 1 (.pfb, .pfm) dynamic font from file [code]path[/code]. + [b]Note:[/b] Use [member face_index] to select specific face from the collection file. [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external fonts at run-time, such as fonts located at the [code]user://[/code] directory. </description> </method> @@ -570,6 +577,9 @@ <member name="embolden" type="float" setter="set_embolden" getter="get_embolden" default="0.0"> If is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness. </member> + <member name="face_index" type="int" setter="set_face_index" getter="get_face_index" default="0"> + Active face index in the TrueType / OpenType collection file. + </member> <member name="fixed_size" type="int" setter="set_fixed_size" getter="get_fixed_size" default="0"> Font size, used only for the bitmap fonts. </member> diff --git a/doc/classes/GradientTexture1D.xml b/doc/classes/GradientTexture1D.xml index a124753a9f..3254754ac1 100644 --- a/doc/classes/GradientTexture1D.xml +++ b/doc/classes/GradientTexture1D.xml @@ -4,7 +4,7 @@ Gradient-filled texture. </brief_description> <description> - GradientTexture1D uses a [Gradient] to fill the texture data. The gradient will be filled from left to right using colors obtained from the gradient. This means the texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width]). + GradientTexture1D uses a [Gradient] to fill the texture data. The gradient will be filled from left to right using colors obtained from the gradient. This means the texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width]). See also [GradientTexture2D], [CurveTexture] and [CurveXYZTexture]. </description> <tutorials> </tutorials> diff --git a/doc/classes/GradientTexture2D.xml b/doc/classes/GradientTexture2D.xml index 4362578932..7561f1b947 100644 --- a/doc/classes/GradientTexture2D.xml +++ b/doc/classes/GradientTexture2D.xml @@ -4,7 +4,7 @@ Gradient-filled 2D texture. </brief_description> <description> - The texture uses a [Gradient] to fill the texture data in 2D space. The gradient is filled according to the specified [member fill] and [member repeat] types using colors obtained from the gradient. The texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width] and [member height]). + The texture uses a [Gradient] to fill the texture data in 2D space. The gradient is filled according to the specified [member fill] and [member repeat] types using colors obtained from the gradient. The texture does not necessarily represent an exact copy of the gradient, but instead an interpolation of samples obtained from the gradient at fixed steps (see [member width] and [member height]). See also [GradientTexture1D], [CurveTexture] and [CurveXYZTexture]. </description> <tutorials> </tutorials> diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml index da5b907fab..d2baf78a9e 100644 --- a/doc/classes/Image.xml +++ b/doc/classes/Image.xml @@ -380,16 +380,51 @@ [b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which means [method save_exr] will return [constant ERR_UNAVAILABLE] when it is called from an exported project. </description> </method> + <method name="save_jpg" qualifiers="const"> + <return type="int" enum="Error" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="quality" type="float" default="0.75" /> + <description> + Saves the image as a JPEG file to [code]path[/code] with the specified [code]quality[/code] between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger file sizes. Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.90[/code]. Even at quality [code]1.00[/code], JPEG compression remains lossy. + [b]Note:[/b] JPEG does not save an alpha channel. If the [Image] contains an alpha channel, the image will still be saved, but the resulting JPEG file won't contain the alpha channel. + </description> + </method> + <method name="save_jpg_to_buffer" qualifiers="const"> + <return type="PackedByteArray" /> + <argument index="0" name="quality" type="float" default="0.75" /> + <description> + Saves the image as a JPEG file to a byte array with the specified [code]quality[/code] between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger byte array sizes (and therefore memory usage). Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.90[/code]. Even at quality [code]1.00[/code], JPEG compression remains lossy. + [b]Note:[/b] JPEG does not save an alpha channel. If the [Image] contains an alpha channel, the image will still be saved, but the resulting byte array won't contain the alpha channel. + </description> + </method> <method name="save_png" qualifiers="const"> <return type="int" enum="Error" /> <argument index="0" name="path" type="String" /> <description> - Saves the image as a PNG file to [code]path[/code]. + Saves the image as a PNG file to the file at [code]path[/code]. </description> </method> <method name="save_png_to_buffer" qualifiers="const"> <return type="PackedByteArray" /> <description> + Saves the image as a PNG file to a byte array. + </description> + </method> + <method name="save_webp" qualifiers="const"> + <return type="int" enum="Error" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="lossy" type="bool" default="false" /> + <argument index="2" name="quality" type="float" default="0.75" /> + <description> + Saves the image as a WebP (Web Picture) file to the file at [code]path[/code]. By default it will save lossless. If [code]lossy[/code] is true, the image will be saved lossy, using the [code]quality[/code] setting between 0.0 and 1.0 (inclusive). + </description> + </method> + <method name="save_webp_to_buffer" qualifiers="const"> + <return type="PackedByteArray" /> + <argument index="0" name="lossy" type="bool" default="false" /> + <argument index="1" name="quality" type="float" default="0.75" /> + <description> + Saves the image as a WebP (Web Picture) file to a byte array. By default it will save lossless. If [code]lossy[/code] is true, the image will be saved lossy, using the [code]quality[/code] setting between 0.0 and 1.0 (inclusive). </description> </method> <method name="set_pixel"> diff --git a/doc/classes/ImporterMesh.xml b/doc/classes/ImporterMesh.xml index 90e7df4421..00601cec75 100644 --- a/doc/classes/ImporterMesh.xml +++ b/doc/classes/ImporterMesh.xml @@ -39,6 +39,16 @@ Removes all surfaces and blend shapes from this [ImporterMesh]. </description> </method> + <method name="generate_lods"> + <return type="void" /> + <argument index="0" name="normal_merge_angle" type="float" /> + <argument index="1" name="normal_split_angle" type="float" /> + <description> + Generates all lods for this ImporterMesh. + [code]normal_merge_angle[/code] and [code]normal_split_angle[/code] are in degrees and used in the same way as the importer settings in [code]lods[/code]. As a good default, use 25 and 60 respectively. + The number of generated lods can be accessed using [method get_surface_lod_count], and each LOD is available in [method get_surface_lod_size] and [method get_surface_lod_indices]. + </description> + </method> <method name="get_blend_shape_count" qualifiers="const"> <return type="int" /> <description> diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml index 83e7eba5e5..d52234e9ac 100644 --- a/doc/classes/ItemList.xml +++ b/doc/classes/ItemList.xml @@ -8,6 +8,7 @@ Selectable items in the list may be selected or deselected and multiple selection may be enabled. Selection with right mouse button may also be enabled to allow use of popup context menus. Items may also be "activated" by double-clicking them or by pressing [kbd]Enter[/kbd]. Item text only supports single-line strings, newline characters (e.g. [code]\n[/code]) in the string won't produce a newline. Text wrapping is enabled in [constant ICON_MODE_TOP] mode, but column's width is adjusted to fully fit its content by default. You need to set [member fixed_column_width] greater than zero to wrap the text. All [code]set_*[/code] methods allow negative item index, which makes the item accessed from the last one. + [b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] 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]. </description> <tutorials> </tutorials> @@ -402,8 +403,8 @@ <member name="select_mode" type="int" setter="set_select_mode" getter="get_select_mode" enum="ItemList.SelectMode" default="0"> Allows single or multiple item selection. See the [enum SelectMode] constants. </member> - <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="3"> - Sets the clipping behavior when the text exceeds an item's bounding rectangle. See [enum TextParagraph.OverrunBehavior] for a description of all modes. + <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="3"> + Sets the clipping behavior when the text exceeds an item's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes. </member> </members> <signals> diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml index d5744bbc42..b5f045621b 100644 --- a/doc/classes/Label.xml +++ b/doc/classes/Label.xml @@ -61,8 +61,8 @@ </method> </methods> <members> - <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="Label.AutowrapMode" default="0"> - If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum AutowrapMode]. + <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="0"> + If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum TextServer.AutowrapMode]. </member> <member name="clip_text" type="bool" setter="set_clip_text" getter="is_clipping_text" default="false"> If [code]true[/code], the Label only shows the text that fits inside its bounding rectangle and will clip text horizontally. @@ -97,8 +97,8 @@ <member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0"> Base text writing direction. </member> - <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="Label.OverrunBehavior" default="0"> - Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum OverrunBehavior] for a description of all modes. + <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0"> + Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes. </member> <member name="uppercase" type="bool" setter="set_uppercase" getter="is_uppercase" default="false"> If [code]true[/code], all the text displays as UPPERCASE. @@ -110,54 +110,10 @@ Restricts the number of characters to display. Set to -1 to disable. [b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count]. </member> - <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="Label.VisibleCharactersBehavior" default="0"> - Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum VisibleCharactersBehavior] for more info. + <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="TextServer.VisibleCharactersBehavior" default="0"> + Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum TextServer.VisibleCharactersBehavior] for more info. </member> </members> - <constants> - <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode"> - Autowrap is disabled. - </constant> - <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available. - </constant> - <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by soft-breaking between words. - </constant> - <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode"> - Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line. - </constant> - <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior"> - No text trimming is performed. - </constant> - <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior"> - Trims the text per character. - </constant> - <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior"> - Trims the text per word. - </constant> - <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior"> - Trims the text per character and adds an ellipsis to indicate that parts are hidden. - </constant> - <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior"> - Trims the text per word and adds an ellipsis to indicate that parts are hidden. - </constant> - <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior"> - Trims text before the shaping. e.g, increasing [member visible_characters] value is visually identical to typing the text. - </constant> - <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior"> - Displays glyphs that are mapped to the first [member visible_characters] characters from the beginning of the text. - </constant> - <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value. - </constant> - <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the left. - </constant> - <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the right. - </constant> - </constants> <theme_items> <theme_item name="font_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)"> Default text [Color] of the [Label]. diff --git a/doc/classes/Label3D.xml b/doc/classes/Label3D.xml index c4d02e6101..47126575f7 100644 --- a/doc/classes/Label3D.xml +++ b/doc/classes/Label3D.xml @@ -59,8 +59,8 @@ <member name="alpha_scissor_threshold" type="float" setter="set_alpha_scissor_threshold" getter="get_alpha_scissor_threshold" default="0.5"> Threshold at which the alpha scissor will discard values. </member> - <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="Label3D.AutowrapMode" default="0"> - If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum AutowrapMode]. + <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="0"> + If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum TextServer.AutowrapMode]. </member> <member name="billboard" type="int" setter="set_billboard_mode" getter="get_billboard_mode" enum="BaseMaterial3D.BillboardMode" default="0"> The billboard mode to use for the label. See [enum BaseMaterial3D.BillboardMode] for possible values. @@ -143,18 +143,6 @@ </member> </members> <constants> - <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode"> - Autowrap is disabled. - </constant> - <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available. - </constant> - <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by soft-breaking between words. - </constant> - <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode"> - Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line. - </constant> <constant name="FLAG_SHADED" value="0" enum="DrawFlags"> If set, lights in the environment affect the label. </constant> diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml index ee98356962..ffde0d95ce 100644 --- a/doc/classes/LightmapGI.xml +++ b/doc/classes/LightmapGI.xml @@ -4,80 +4,122 @@ Computes and stores baked lightmaps for fast global illumination. </brief_description> <description> - The [LightmapGI] node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking. [LightmapGI] can also provide rough reflections using spherical harmonics if [member directional] is enabled. Dynamic objects can receive indirect lighting thanks to [i]light probes[/i], which can be automatically placed by setting [member generate_probes_subdiv]. Additional lightmap probes can also be added by creating [LightmapProbe] nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking a [LightmapGI] node is also slower compared to [VoxelGI]. + The [LightmapGI] node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking. [LightmapGI] can also provide rough reflections using spherical harmonics if [member directional] is enabled. Dynamic objects can receive indirect lighting thanks to [i]light probes[/i], which can be automatically placed by setting [member generate_probes_subdiv] to a value other than [constant GENERATE_PROBES_DISABLED]. Additional lightmap probes can also be added by creating [LightmapProbe] nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking a [LightmapGI] node is also slower compared to [VoxelGI]. [b]Procedural generation:[/b] Lightmap baking functionality is only available in the editor. This means [LightmapGI] is not suited to procedurally generated or user-built levels. For procedurally generated or user-built levels, use [VoxelGI] or SDFGI instead (see [member Environment.sdfgi_enabled]). [b]Performance:[/b] [LightmapGI] provides the best possible run-time performance for global illumination. It is suitable for low-end hardware including integrated graphics and mobile devices. + [b]Note:[/b] Due to how lightmaps work, most properties only have a visible effect once lightmaps are baked again. + [b]Note:[/b] Lightmap baking on [CSGShape3D]s and [PrimitiveMesh]es is not supported, as these cannot store UV2 data required for baking. + [b]Note:[/b] If no custom lightmappers are installed, [LightmapGI] can only be baked when using the Vulkan backend (Clustered or Mobile), not OpenGL. </description> <tutorials> </tutorials> <members> <member name="bias" type="float" setter="set_bias" getter="get_bias" default="0.0005"> + The bias to use when computing shadows. Increasing [member bias] can fix shadow acne on the resulting baked lightmap, but can introduce peter-panning (shadows not connecting to their casters). Real-time [Light3D] shadows are not affected by this [member bias] property. </member> <member name="bounces" type="int" setter="set_bounces" getter="get_bounces" default="1"> + Number of light bounces that are taken into account during baking. Higher values result in brighter, more realistic lighting, at the cost of longer bake times. If set to [code]0[/code], only environment lighting, direct light and emissive lighting is baked. </member> <member name="directional" type="bool" setter="set_directional" getter="is_directional" default="false"> + If [code]true[/code], bakes lightmaps to contain directional information as spherical harmonics. This results in more realistic lighting appearance, especially with normal mapped materials and for lights that their have direct light baked ([member Light3D.light_bake_mode] set to [constant Light3D.BAKE_STATIC]). The directional information is also used to provide rough reflections for static and dynamic objects. This has a small run-time performance cost as the shader has to perform more work to interpret the direction information from the lightmap. Directional lightmaps also take longer to bake and result in larger file sizes. + [b]Note:[/b] The property's name has no relationship with [DirectionalLight3D]. [member directional] works with all light types. </member> <member name="environment_custom_color" type="Color" setter="set_environment_custom_color" getter="get_environment_custom_color"> + The color to use for environment lighting. Only effective if [member environment_mode] is [constant ENVIRONMENT_MODE_CUSTOM_COLOR]. </member> <member name="environment_custom_energy" type="float" setter="set_environment_custom_energy" getter="get_environment_custom_energy"> + The color multiplier to use for environment lighting. Only effective if [member environment_mode] is [constant ENVIRONMENT_MODE_CUSTOM_COLOR]. </member> <member name="environment_custom_sky" type="Sky" setter="set_environment_custom_sky" getter="get_environment_custom_sky"> + The sky to use as a source of environment lighting. Only effective if [member environment_mode] is [constant ENVIRONMENT_MODE_CUSTOM_SKY]. </member> <member name="environment_mode" type="int" setter="set_environment_mode" getter="get_environment_mode" enum="LightmapGI.EnvironmentMode" default="0"> + The environment mode to use when baking lightmaps. </member> <member name="generate_probes_subdiv" type="int" setter="set_generate_probes" getter="get_generate_probes" enum="LightmapGI.GenerateProbes" default="0"> + The level of subdivision to use when automatically generating [LightmapProbe]s for dynamic object lighting. Higher values result in more accurate indirect lighting on dynamic objects, at the cost of longer bake times and larger file sizes. + [b]Note:[/b] Automatically generated [LightmapProbe]s are not visible as nodes in the Scene tree dock, and cannot be modified this way after they are generated. + [b]Note:[/b] Regardless of [member generate_probes_subdiv], direct lighting on dynamic objects is always applied using [Light3D] nodes in real-time. </member> <member name="interior" type="bool" setter="set_interior" getter="is_interior" default="false"> + If [code]true[/code], ignore environment lighting when baking lightmaps. </member> <member name="light_data" type="LightmapGIData" setter="set_light_data" getter="get_light_data"> + The [LightmapGIData] associated to this [LightmapGI] node. This resource is automatically created after baking, and is not meant to be created manually. </member> <member name="max_texture_size" type="int" setter="set_max_texture_size" getter="get_max_texture_size" default="16384"> + The maximum texture size for the generated texture atlas. Higher values will result in fewer slices being generated, but may not work on all hardware as a result of hardware limitations on texture sizes. Leave [member max_texture_size] at its default value of [code]16384[/code] if unsure. </member> <member name="quality" type="int" setter="set_bake_quality" getter="get_bake_quality" enum="LightmapGI.BakeQuality" default="1"> + The quality preset to use when baking lightmaps. This affects bake times, but output file sizes remain mostly identical across quality levels. + To further speed up bake times, decrease [member bounces], disable [member use_denoiser] and increase the lightmap texel size on 3D scenes in the Import doc. </member> <member name="use_denoiser" type="bool" setter="set_use_denoiser" getter="is_using_denoiser" default="true"> + If [code]true[/code], uses a CPU-based denoising algorithm on the generated lightmap. This eliminates most noise within the generated lightmap at the cost of longer bake times. File sizes are generally not impacted significantly by the use of a denoiser, although lossless compression may do a better job at compressing a denoised image. + [b]Note:[/b] The built-in denoiser (OpenImageDenoise) may crash when denoising lightmaps in large scenes. If you encounter a crash at the end of lightmap baking, try disabling [member use_denoiser]. </member> </members> <constants> <constant name="BAKE_QUALITY_LOW" value="0" enum="BakeQuality"> + Low bake quality (fastest bake times). The quality of this preset can be adjusted by changing [member ProjectSettings.rendering/lightmapping/bake_quality/low_quality_ray_count] and [member ProjectSettings.rendering/lightmapping/bake_quality/low_quality_probe_ray_count]. </constant> <constant name="BAKE_QUALITY_MEDIUM" value="1" enum="BakeQuality"> + Medium bake quality (fast bake times). The quality of this preset can be adjusted by changing [member ProjectSettings.rendering/lightmapping/bake_quality/medium_quality_ray_count] and [member ProjectSettings.rendering/lightmapping/bake_quality/medium_quality_probe_ray_count]. </constant> <constant name="BAKE_QUALITY_HIGH" value="2" enum="BakeQuality"> + High bake quality (slow bake times). The quality of this preset can be adjusted by changing [member ProjectSettings.rendering/lightmapping/bake_quality/high_quality_ray_count] and [member ProjectSettings.rendering/lightmapping/bake_quality/high_quality_probe_ray_count]. </constant> <constant name="BAKE_QUALITY_ULTRA" value="3" enum="BakeQuality"> + Highest bake quality (slowest bake times). The quality of this preset can be adjusted by changing [member ProjectSettings.rendering/lightmapping/bake_quality/high_quality_ray_count] and [member ProjectSettings.rendering/lightmapping/bake_quality/ultra_quality_probe_ray_count]. </constant> <constant name="GENERATE_PROBES_DISABLED" value="0" enum="GenerateProbes"> + Don't generate lightmap probes for lighting dynamic objects. </constant> <constant name="GENERATE_PROBES_SUBDIV_4" value="1" enum="GenerateProbes"> + Lowest level of subdivision (fastest bake times, smallest file sizes). </constant> <constant name="GENERATE_PROBES_SUBDIV_8" value="2" enum="GenerateProbes"> + Low level of subdivision (fast bake times, small file sizes). </constant> <constant name="GENERATE_PROBES_SUBDIV_16" value="3" enum="GenerateProbes"> + High level of subdivision (slow bake times, large file sizes). </constant> <constant name="GENERATE_PROBES_SUBDIV_32" value="4" enum="GenerateProbes"> + Highest level of subdivision (slowest bake times, largest file sizes). </constant> <constant name="BAKE_ERROR_OK" value="0" enum="BakeError"> + Lightmap baking was successful. </constant> <constant name="BAKE_ERROR_NO_LIGHTMAPPER" value="1" enum="BakeError"> + Lightmap baking failed as there is no lightmapper available in this Godot build. </constant> <constant name="BAKE_ERROR_NO_SAVE_PATH" value="2" enum="BakeError"> + Lightmap baking failed as the [LightmapGIData] save path isn't configured in the resource. </constant> <constant name="BAKE_ERROR_NO_MESHES" value="3" enum="BakeError"> + Lightmap baking failed as there are no meshes whose [member GeometryInstance3D.gi_mode] is [constant GeometryInstance3D.GI_MODE_STATIC] and with valid UV2 mapping in the current scene. You may need to select 3D scenes in the Import dock and change their global illumination mode accordingly. </constant> <constant name="BAKE_ERROR_MESHES_INVALID" value="4" enum="BakeError"> + Lightmap baking failed as the lightmapper failed to analyze some of the meshes marked as static for baking. </constant> <constant name="BAKE_ERROR_CANT_CREATE_IMAGE" value="5" enum="BakeError"> + Lightmap baking failed as the resulting image couldn't be saved or imported by Godot after it was saved. </constant> <constant name="BAKE_ERROR_USER_ABORTED" value="6" enum="BakeError"> + The user aborted the lightmap baking operation (typically by clicking the [b]Cancel[/b] button in the progress dialog). </constant> <constant name="ENVIRONMENT_MODE_DISABLED" value="0" enum="EnvironmentMode"> + Ignore environment lighting when baking lightmaps. </constant> <constant name="ENVIRONMENT_MODE_SCENE" value="1" enum="EnvironmentMode"> + Use the scene's environment lighting when baking lightmaps. + [b]Note:[/b] If baking lightmaps in a scene with no [WorldEnvironment] node, this will act like [constant ENVIRONMENT_MODE_DISABLED]. The editor's preview sky and sun is [i]not[/i] taken into account by [LightmapGI] when baking lightmaps. </constant> <constant name="ENVIRONMENT_MODE_CUSTOM_SKY" value="2" enum="EnvironmentMode"> + Use [member environment_custom_sky] as a source of environment lighting when baking lightmaps. </constant> <constant name="ENVIRONMENT_MODE_CUSTOM_COLOR" value="3" enum="EnvironmentMode"> + Use [member environment_custom_color] multiplied by [member environment_custom_energy] as a constant source of environment lighting when baking lightmaps. </constant> </constants> </class> diff --git a/doc/classes/LightmapGIData.xml b/doc/classes/LightmapGIData.xml index c2423daef0..20113ac309 100644 --- a/doc/classes/LightmapGIData.xml +++ b/doc/classes/LightmapGIData.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="LightmapGIData" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Contains baked lightmap and dynamic object probe data for [LightmapGI]. </brief_description> <description> + [LightmapGIData] contains baked lightmap and dynamic object probe data for [LightmapGI]. It is replaced every time lightmaps are baked in [LightmapGI]. </description> <tutorials> </tutorials> @@ -14,38 +16,46 @@ <argument index="2" name="slice_index" type="int" /> <argument index="3" name="sub_instance" type="int" /> <description> + Adds an object that is considered baked within this [LightmapGIData]. </description> </method> <method name="clear_users"> <return type="void" /> <description> + Clear all objects that are considred baked within this [LightmapGIData]. </description> </method> <method name="get_user_count" qualifiers="const"> <return type="int" /> <description> + Returns the number of objects that are considered baked within this [LightmapGIData]. </description> </method> <method name="get_user_path" qualifiers="const"> <return type="NodePath" /> <argument index="0" name="user_idx" type="int" /> <description> + Returns the [NodePath] of the baked object at index [code]user_idx[/code]. </description> </method> <method name="is_using_spherical_harmonics" qualifiers="const"> <return type="bool" /> <description> + If [code]true[/code], lightmaps were baked with directional information. See also [member LightmapGI.directional]. </description> </method> <method name="set_uses_spherical_harmonics"> <return type="void" /> <argument index="0" name="uses_spherical_harmonics" type="bool" /> <description> + If [code]uses_spherical_harmonics[/code] is [code]true[/code], tells the engine to treat the lightmap data as if it was baked with directional information. + [b]Note:[/b] Changing this value on already baked lightmaps will not cause them to be baked again. This means the material appearance will look incorrect until lightmaps are baked again, in which case the value set here is discarded as the entire [LightmapGIData] resource is replaced by the lightmapper. </description> </method> </methods> <members> <member name="light_texture" type="TextureLayered" setter="set_light_texture" getter="get_light_texture"> + The lightmap atlas texture generated by the lightmapper. </member> </members> </class> diff --git a/doc/classes/LightmapProbe.xml b/doc/classes/LightmapProbe.xml index a5ba6294b9..cb4879b6c7 100644 --- a/doc/classes/LightmapProbe.xml +++ b/doc/classes/LightmapProbe.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="LightmapProbe" inherits="Node3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Represents a single manually placed probe for dynamic object lighting with [LightmapGI]. </brief_description> <description> + [LightmapProbe] represents the position of a single manually placed probe for dynamic object lighting with [LightmapGI]. + Typically, [LightmapGI] probes are placed automatically by setting [member LightmapGI.generate_probes_subdiv] to a value other than [constant LightmapGI.GENERATE_PROBES_DISABLED]. By creating [LightmapProbe] nodes before baking lightmaps, you can add more probes in specific areas for greater detail, or disable automatic generation and rely only on manually placed probes instead. </description> <tutorials> </tutorials> diff --git a/doc/classes/Lightmapper.xml b/doc/classes/Lightmapper.xml index f9a1e2fa99..58ef2ed0cf 100644 --- a/doc/classes/Lightmapper.xml +++ b/doc/classes/Lightmapper.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Lightmapper" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Abstract class extended by lightmappers, for use in [LightmapGI]. </brief_description> <description> + This class should be extended by custom lightmapper classes. Lightmappers can then be used with [LightmapGI] to provide fast baked global illumination in 3D. + Godot contains a built-in GPU-based lightmapper [LightmapperRD] that uses compute shaders, but custom lightmappers can be implemented by C++ modules. </description> <tutorials> </tutorials> diff --git a/doc/classes/LightmapperRD.xml b/doc/classes/LightmapperRD.xml index 29d95244ce..e4b68a7ef8 100644 --- a/doc/classes/LightmapperRD.xml +++ b/doc/classes/LightmapperRD.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="LightmapperRD" inherits="Lightmapper" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + The built-in GPU-based lightmapper for use with [LightmapGI]. </brief_description> <description> + LightmapperRD ("RD" stands for [RenderingDevice]) is the built-in GPU-based lightmapper for use with [LightmapGI]. On most dedicated GPUs, it can bake lightmaps much faster than most CPU-based lightmappers. LightmapperRD uses compute shaders to bake lightmaps, so it does not require CUDA or OpenCL libraries to be installed to be usable. + [b]Note:[/b] Only usable when using the Vulkan backend (Clustered or Mobile), not OpenGL. </description> <tutorials> </tutorials> diff --git a/doc/classes/Mesh.xml b/doc/classes/Mesh.xml index eeb6af24c9..48fa2754d5 100644 --- a/doc/classes/Mesh.xml +++ b/doc/classes/Mesh.xml @@ -215,12 +215,16 @@ [PackedVector2Array] for second UV coordinates. </constant> <constant name="ARRAY_CUSTOM0" value="6" enum="ArrayType"> + Contains custom color channel 0. [PackedByteArray] if [code](format >> [constant ARRAY_FORMAT_CUSTOM0_SHIFT]) & [constant ARRAY_FORMAT_CUSTOM_MASK])[/code] is [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RG_HALF] or [constant ARRAY_CUSTOM_RGBA_HALF]. [PackedFloat32Array] otherwise. </constant> <constant name="ARRAY_CUSTOM1" value="7" enum="ArrayType"> + Contains custom color channel 1. [PackedByteArray] if [code](format >> [constant ARRAY_FORMAT_CUSTOM1_SHIFT]) & [constant ARRAY_FORMAT_CUSTOM_MASK])[/code] is [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RG_HALF] or [constant ARRAY_CUSTOM_RGBA_HALF]. [PackedFloat32Array] otherwise. </constant> <constant name="ARRAY_CUSTOM2" value="8" enum="ArrayType"> + Contains custom color channel 2. [PackedByteArray] if [code](format >> [constant ARRAY_FORMAT_CUSTOM2_SHIFT]) & [constant ARRAY_FORMAT_CUSTOM_MASK])[/code] is [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RG_HALF] or [constant ARRAY_CUSTOM_RGBA_HALF]. [PackedFloat32Array] otherwise. </constant> <constant name="ARRAY_CUSTOM3" value="9" enum="ArrayType"> + Contains custom color channel 3. [PackedByteArray] if [code](format >> [constant ARRAY_FORMAT_CUSTOM3_SHIFT]) & [constant ARRAY_FORMAT_CUSTOM_MASK])[/code] is [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RGBA8_UNORM], [constant ARRAY_CUSTOM_RG_HALF] or [constant ARRAY_CUSTOM_RGBA_HALF]. [PackedFloat32Array] otherwise. </constant> <constant name="ARRAY_BONES" value="10" enum="ArrayType"> [PackedFloat32Array] or [PackedInt32Array] of bone indices. Each element is a group of 4 numbers. @@ -236,20 +240,28 @@ Represents the size of the [enum ArrayType] enum. </constant> <constant name="ARRAY_CUSTOM_RGBA8_UNORM" value="0" enum="ArrayCustomFormat"> + Indicates this custom channel contains unsigned normalized byte colors from 0 to 1, encoded as [PackedByteArray]. </constant> <constant name="ARRAY_CUSTOM_RGBA8_SNORM" value="1" enum="ArrayCustomFormat"> + Indicates this custom channel contains signed normalized byte colors from -1 to 1, encoded as [PackedByteArray]. </constant> <constant name="ARRAY_CUSTOM_RG_HALF" value="2" enum="ArrayCustomFormat"> + Indicates this custom channel contains half precision float colors, encoded as [PackedByteArray]. Only red and green channels are used. </constant> <constant name="ARRAY_CUSTOM_RGBA_HALF" value="3" enum="ArrayCustomFormat"> + Indicates this custom channel contains half precision float colors, encoded as [PackedByteArray]. </constant> <constant name="ARRAY_CUSTOM_R_FLOAT" value="4" enum="ArrayCustomFormat"> + Indicates this custom channel contains full float colors, in a [PackedFloat32Array]. Only the red green channel is used. </constant> <constant name="ARRAY_CUSTOM_RG_FLOAT" value="5" enum="ArrayCustomFormat"> + Indicates this custom channel contains full float colors, in a [PackedFloat32Array]. Only red and green channels are used. </constant> <constant name="ARRAY_CUSTOM_RGB_FLOAT" value="6" enum="ArrayCustomFormat"> + Indicates this custom channel contains full float colors, in a [PackedFloat32Array]. Only red, green and blue channels are used. </constant> <constant name="ARRAY_CUSTOM_RGBA_FLOAT" value="7" enum="ArrayCustomFormat"> + Indicates this custom channel contains full float colors, in a [PackedFloat32Array]. </constant> <constant name="ARRAY_CUSTOM_MAX" value="8" enum="ArrayCustomFormat"> Represents the size of the [enum ArrayCustomFormat] enum. @@ -273,12 +285,16 @@ Mesh array contains second UV. </constant> <constant name="ARRAY_FORMAT_CUSTOM0" value="64" enum="ArrayFormat"> + Mesh array contains custom channel index 0. </constant> <constant name="ARRAY_FORMAT_CUSTOM1" value="128" enum="ArrayFormat"> + Mesh array contains custom channel index 1. </constant> <constant name="ARRAY_FORMAT_CUSTOM2" value="256" enum="ArrayFormat"> + Mesh array contains custom channel index 2. </constant> <constant name="ARRAY_FORMAT_CUSTOM3" value="512" enum="ArrayFormat"> + Mesh array contains custom channel index 3. </constant> <constant name="ARRAY_FORMAT_BONES" value="1024" enum="ArrayFormat"> Mesh array contains bones. @@ -290,29 +306,40 @@ Mesh array uses indices. </constant> <constant name="ARRAY_FORMAT_BLEND_SHAPE_MASK" value="7" enum="ArrayFormat"> + Mask of mesh channels permitted in blend shapes. </constant> <constant name="ARRAY_FORMAT_CUSTOM_BASE" value="13" enum="ArrayFormat"> + Shift of first custom channel. </constant> <constant name="ARRAY_FORMAT_CUSTOM_BITS" value="3" enum="ArrayFormat"> + Number of format bits per custom channel. See [enum ArrayCustomFormat]. </constant> <constant name="ARRAY_FORMAT_CUSTOM0_SHIFT" value="13" enum="ArrayFormat"> + Amount to shift [enum ArrayCustomFormat] for custom channel index 0. </constant> <constant name="ARRAY_FORMAT_CUSTOM1_SHIFT" value="16" enum="ArrayFormat"> + Amount to shift [enum ArrayCustomFormat] for custom channel index 1. </constant> <constant name="ARRAY_FORMAT_CUSTOM2_SHIFT" value="19" enum="ArrayFormat"> + Amount to shift [enum ArrayCustomFormat] for custom channel index 2. </constant> <constant name="ARRAY_FORMAT_CUSTOM3_SHIFT" value="22" enum="ArrayFormat"> + Amount to shift [enum ArrayCustomFormat] for custom channel index 3. </constant> <constant name="ARRAY_FORMAT_CUSTOM_MASK" value="7" enum="ArrayFormat"> + Mask of custom format bits per custom channel. Must be shifted by one of the SHIFT constants. See [enum ArrayCustomFormat]. </constant> <constant name="ARRAY_COMPRESS_FLAGS_BASE" value="25" enum="ArrayFormat"> + Shift of first compress flag. Compress flags should be passed to [method ArrayMesh.add_surface_from_arrays] and [method SurfaceTool.commit]. </constant> <constant name="ARRAY_FLAG_USE_2D_VERTICES" value="33554432" enum="ArrayFormat"> Flag used to mark that the array contains 2D vertices. </constant> <constant name="ARRAY_FLAG_USE_DYNAMIC_UPDATE" value="67108864" enum="ArrayFormat"> + Flag indices that the mesh data will use [code]GL_DYNAMIC_DRAW[/code] on GLES. Unused on Vulkan. </constant> <constant name="ARRAY_FLAG_USE_8_BONE_WEIGHTS" value="134217728" enum="ArrayFormat"> + Flag used to mark that the mesh contains up to 8 bone influences per vertex. This flag indicates that [constant ARRAY_BONES] and [constant ARRAY_WEIGHTS] elements will have double length. </constant> <constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0" enum="BlendShapeMode"> Blend shapes are normalized. diff --git a/doc/classes/MovieWriter.xml b/doc/classes/MovieWriter.xml new file mode 100644 index 0000000000..9c713bd7ae --- /dev/null +++ b/doc/classes/MovieWriter.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="MovieWriter" inherits="Object" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> + <brief_description> + Abstract class for non-real-time video recording encoders. + </brief_description> + <description> + Godot can record videos with non-real-time simulation. Like the [code]--fixed-fps[/code] command line argument, this forces the reported [code]delta[/code] in [method Node._process] functions to be identical across frames, regardless of how long it actually took to render the frame. This can be used to record high-quality videos with perfect frame pacing regardless of your hardware's capabilities. + Godot has 2 built-in [MovieWriter]s: + - AVI container with MJPEG for video and uncompressed audio ([code].avi[/code] file extension). Lossy compression, medium file sizes, fast encoding. The lossy compression quality can be adjusted by changing [member ProjectSettings.editor/movie_writer/mjpeg_quality]. The resulting file can be viewed in most video players, but it must be converted to another format for viewing on the web or by Godot with [VideoStreamPlayer]. AVI output is currently limited to a file of 4 GB in size at most. + - PNG image sequence for video and WAV for audio ([code].png[/code] file extension). Lossless compression, large file sizes, slow encoding. Designed to be encoded to a video file with another tool such as [url=https://ffmpeg.org/]FFmpeg[/url] after recording. Transparency is currently not supported. + If you need to encode to a different format or pipe a stream through third-party software, you can extend the [MovieWriter] class to create your own movie writers. This should typically be done using GDExtension for performance reasons. + [b]Editor usage:[/b] A default movie file path can be specified in [member ProjectSettings.editor/movie_writer/movie_file]. Alternatively, for running single scenes, a [code]movie_path[/code] metadata can be added to the root node, specifying the path to a movie file that will be used when recording that scene. Once a path is set, click the video reel icon in the top-right corner of the editor to enable Movie Maker mode, then run any scene as usual. The engine will start recording as soon as the splash screen is finished, and it will only stop recording when the engine quits. Click the video reel icon again to disable Movie Maker mode. Note that toggling Movie Maker mode does not affect project instances that are already running. + [b]Note:[/b] MovieWriter is available for use in both the editor and exported projects, but it is [i]not[/i] designed for use by end users to record videos while playing. Players wishing to record gameplay videos should install tools such as [url=https://obsproject.com/]OBS Studio[/url] or [url=https://www.maartenbaert.be/simplescreenrecorder/]SimpleScreenRecorder[/url] instead. + </description> + <tutorials> + </tutorials> + <methods> + <method name="_get_audio_mix_rate" qualifiers="virtual const"> + <return type="int" /> + <description> + Called when the audio sample rate used for recording the audio is requested by the engine. The value returned must be specified in Hz. Defaults to 48000 Hz if [method _get_audio_mix_rate] is not overridden. + </description> + </method> + <method name="_get_audio_speaker_mode" qualifiers="virtual const"> + <return type="int" enum="AudioServer.SpeakerMode" /> + <description> + Called when the audio speaker mode used for recording the audio is requested by the engine. This can affect the number of output channels in the resulting audio file/stream. Defaults to [constant AudioServer.SPEAKER_MODE_STEREO] if [method _get_audio_speaker_mode] is not overridden. + </description> + </method> + <method name="_handles_file" qualifiers="virtual const"> + <return type="bool" /> + <argument index="0" name="path" type="String" /> + <description> + Called when the engine determines whether this [MovieWriter] is able to handle the file at [code]path[/code]. Must return [code]true[/code] if this [MovieWriter] is able to handle the given file path, [code]false[/code] otherwise. Typically, [method _handles_file] is overridden as follows to allow the user to record a file at any path with a given file extension: + [codeblock] + func _handles_file(path): + # Allows specifying an output file with a `.mkv` file extension (case-insensitive), + # either in the Project Settings or with the `--write-movie <path>` command line argument. + return path.get_extension().to_lower() == "mkv" + [/codeblock] + </description> + </method> + <method name="_write_begin" qualifiers="virtual"> + <return type="int" enum="Error" /> + <argument index="0" name="movie_size" type="Vector2i" /> + <argument index="1" name="fps" type="int" /> + <argument index="2" name="base_path" type="String" /> + <description> + Called once before the engine starts writing video and audio data. [code]movie_size[/code] is the width and height of the video to save. [code]fps[/code] is the number of frames per second specified in the project settings or using the [code]--fixed-fps <fps>[/code] command line argument. + </description> + </method> + <method name="_write_end" qualifiers="virtual"> + <return type="void" /> + <description> + Called when the engine finishes writing. This occurs when the engine quits by pressing the window manager's close button, or when [method SceneTree.quit] is called. + [b]Note:[/b] Pressing [kbd]Ctrl + C[/kbd] on the terminal running the editor/project does [i]not[/i] result in [method _write_end] being called. + </description> + </method> + <method name="_write_frame" qualifiers="virtual"> + <return type="int" enum="Error" /> + <argument index="0" name="frame_image" type="Image" /> + <argument index="1" name="audio_frame_block" type="const void*" /> + <description> + Called at the end of every rendered frame. The [code]frame_image[/code] and [code]audio_frame_block[/code] function arguments should be written to. + </description> + </method> + <method name="add_writer" qualifiers="static"> + <return type="void" /> + <argument index="0" name="writer" type="MovieWriter" /> + <description> + Adds a writer to be usable by the engine. The supported file extensions can be set by overridding [method _handles_file]. + [b]Note:[/b] [method add_writer] must be called early enough in the engine initialization to work, as movie writing is designed to start at the same time as the rest of the engine. + </description> + </method> + </methods> +</class> diff --git a/doc/classes/NavigationAgent2D.xml b/doc/classes/NavigationAgent2D.xml index 945947ad9f..757b635252 100644 --- a/doc/classes/NavigationAgent2D.xml +++ b/doc/classes/NavigationAgent2D.xml @@ -34,6 +34,19 @@ Returns which index the agent is currently on in the navigation path's [PackedVector2Array]. </description> </method> + <method name="get_navigation_layer_value" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="layer_number" type="int" /> + <description> + Returns whether or not the specified layer of the [member navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> + <method name="get_navigation_map" qualifiers="const"> + <return type="RID" /> + <description> + Returns the [RID] of the navigation map for this NavigationAgent node. This function returns always the map set on the NavigationAgent node and not the map of the abstract agent on the NavigationServer. If the agent map is changed directly with the NavigationServer API the NavigationAgent node will not be aware of the map change. Use [method set_navigation_map] to change the navigation map for the NavigationAgent and also update the agent on the NavigationServer. + </description> + </method> <method name="get_next_location"> <return type="Vector2" /> <description> @@ -70,6 +83,21 @@ Returns true if the target location is reached. The target location is set using [method set_target_location]. It may not always be possible to reach the target location. It should always be possible to reach the final location though. See [method get_final_location]. </description> </method> + <method name="set_navigation_layer_value"> + <return type="void" /> + <argument index="0" name="layer_number" type="int" /> + <argument index="1" name="value" type="bool" /> + <description> + Based on [code]value[/code], enables or disables the specified layer in the [member navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> + <method name="set_navigation_map"> + <return type="void" /> + <argument index="0" name="navigation_map" type="RID" /> + <description> + Sets the [RID] of the navigation map this NavigationAgent node should use and also updates the [code]agent[/code] on the NavigationServer. + </description> + </method> <method name="set_target_location"> <return type="void" /> <argument index="0" name="location" type="Vector2" /> @@ -95,12 +123,15 @@ <member name="max_speed" type="float" setter="set_max_speed" getter="get_max_speed" default="200.0"> The maximum speed that an agent can move. </member> - <member name="navigable_layers" type="int" setter="set_navigable_layers" getter="get_navigable_layers" default="1"> - A bitfield determining what layers of navigation regions this agent will use to calculate path. Changing it runtime will clear current navigation path and generate new one, according to new layers. + <member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1"> + A bitfield determining what navigation layers of navigation regions this agent will use to calculate path. Changing it runtime will clear current navigation path and generate new one, according to new navigation layers. </member> <member name="neighbor_dist" type="float" setter="set_neighbor_dist" getter="get_neighbor_dist" default="500.0"> The distance to search for other agents. </member> + <member name="path_desired_distance" type="float" setter="set_path_desired_distance" getter="get_path_desired_distance" default="1.0"> + The distance threshold before a path point is considered to be reached. This will allow an agent to not have to hit a path point on the path exactly, but in the area. If this value is set to high the NavigationAgent will skip points on the path which can lead to leaving the navigation mesh. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the next point on each physics frame update. + </member> <member name="path_max_distance" type="float" setter="set_path_max_distance" getter="get_path_max_distance" default="3.0"> The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceeded, it recalculates the ideal path. </member> @@ -108,7 +139,7 @@ The radius of the agent. </member> <member name="target_desired_distance" type="float" setter="set_target_desired_distance" getter="get_target_desired_distance" default="1.0"> - The distance threshold before a target is considered to be reached. This will allow an agent to not have to hit a point on the path exactly, but in the area. + The distance threshold before the final target point is considered to be reached. This will allow an agent to not have to hit the point of the final target exactly, but only the area. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the final target point on each physics frame update. </member> <member name="time_horizon" type="float" setter="set_time_horizon" getter="get_time_horizon" default="20.0"> The minimal amount of time for which this agent's velocities, that are computed with the collision avoidance algorithm, are safe with respect to other agents. The larger the number, the sooner the agent will respond to other agents, but less freedom in choosing its velocities. Must be positive. diff --git a/doc/classes/NavigationAgent3D.xml b/doc/classes/NavigationAgent3D.xml index 7f7e058742..5e1004165d 100644 --- a/doc/classes/NavigationAgent3D.xml +++ b/doc/classes/NavigationAgent3D.xml @@ -34,6 +34,19 @@ Returns which index the agent is currently on in the navigation path's [PackedVector3Array]. </description> </method> + <method name="get_navigation_layer_value" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="layer_number" type="int" /> + <description> + Returns whether or not the specified layer of the [member navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> + <method name="get_navigation_map" qualifiers="const"> + <return type="RID" /> + <description> + Returns the [RID] of the navigation map for this NavigationAgent node. This function returns always the map set on the NavigationAgent node and not the map of the abstract agent on the NavigationServer. If the agent map is changed directly with the NavigationServer API the NavigationAgent node will not be aware of the map change. Use [method set_navigation_map] to change the navigation map for the NavigationAgent and also update the agent on the NavigationServer. + </description> + </method> <method name="get_next_location"> <return type="Vector3" /> <description> @@ -70,6 +83,21 @@ Returns true if the target location is reached. The target location is set using [method set_target_location]. It may not always be possible to reach the target location. It should always be possible to reach the final location though. See [method get_final_location]. </description> </method> + <method name="set_navigation_layer_value"> + <return type="void" /> + <argument index="0" name="layer_number" type="int" /> + <argument index="1" name="value" type="bool" /> + <description> + Based on [code]value[/code], enables or disables the specified layer in the [member navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> + <method name="set_navigation_map"> + <return type="void" /> + <argument index="0" name="navigation_map" type="RID" /> + <description> + Sets the [RID] of the navigation map this NavigationAgent node should use and also updates the [code]agent[/code] on the NavigationServer. + </description> + </method> <method name="set_target_location"> <return type="void" /> <argument index="0" name="location" type="Vector3" /> @@ -101,12 +129,15 @@ <member name="max_speed" type="float" setter="set_max_speed" getter="get_max_speed" default="10.0"> The maximum speed that an agent can move. </member> - <member name="navigable_layers" type="int" setter="set_navigable_layers" getter="get_navigable_layers" default="1"> - A bitfield determining what layers of navigation regions this agent will use to calculate path. Changing it runtime will clear current navigation path and generate new one, according to new layers. + <member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1"> + A bitfield determining what navigation layers of navigation regions this NavigationAgent will use to calculate path. Changing it runtime will clear current navigation path and generate new one, according to new navigation layers. </member> <member name="neighbor_dist" type="float" setter="set_neighbor_dist" getter="get_neighbor_dist" default="50.0"> The distance to search for other agents. </member> + <member name="path_desired_distance" type="float" setter="set_path_desired_distance" getter="get_path_desired_distance" default="1.0"> + The distance threshold before a path point is considered to be reached. This will allow an agent to not have to hit a path point on the path exactly, but in the area. If this value is set to high the NavigationAgent will skip points on the path which can lead to leaving the navigation mesh. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the next point on each physics frame update. + </member> <member name="path_max_distance" type="float" setter="set_path_max_distance" getter="get_path_max_distance" default="3.0"> The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceeded, it recalculates the ideal path. </member> @@ -114,7 +145,7 @@ The radius of the agent. </member> <member name="target_desired_distance" type="float" setter="set_target_desired_distance" getter="get_target_desired_distance" default="1.0"> - The distance threshold before a target is considered to be reached. This will allow an agent to not have to hit a point on the path exactly, but in the area. + The distance threshold before the final target point is considered to be reached. This will allow an agent to not have to hit the point of the final target exactly, but only the area. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the final target point on each physics frame update. </member> <member name="time_horizon" type="float" setter="set_time_horizon" getter="get_time_horizon" default="5.0"> The minimal amount of time for which this agent's velocities, that are computed with the collision avoidance algorithm, are safe with respect to other agents. The larger the number, the sooner the agent will respond to other agents, but less freedom in choosing its velocities. Must be positive. diff --git a/doc/classes/NavigationRegion2D.xml b/doc/classes/NavigationRegion2D.xml index 542aa8f619..c48ca18e9e 100644 --- a/doc/classes/NavigationRegion2D.xml +++ b/doc/classes/NavigationRegion2D.xml @@ -14,28 +14,43 @@ <tutorials> </tutorials> <methods> + <method name="get_navigation_layer_value" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="layer_number" type="int" /> + <description> + Returns whether or not the specified layer of the [member navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> <method name="get_region_rid" qualifiers="const"> <return type="RID" /> <description> Returns the [RID] of this region on the [NavigationServer2D]. Combined with [method NavigationServer2D.map_get_closest_point_owner] can be used to identify the [NavigationRegion2D] closest to a point on the merged navigation map. </description> </method> + <method name="set_navigation_layer_value"> + <return type="void" /> + <argument index="0" name="layer_number" type="int" /> + <argument index="1" name="value" type="bool" /> + <description> + Based on [code]value[/code], enables or disables the specified layer in the [member navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> </methods> <members> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true"> Determines if the [NavigationRegion2D] is enabled or disabled. </member> <member name="enter_cost" type="float" setter="set_enter_cost" getter="get_enter_cost" default="0.0"> - When pathfinding enters this regions navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path. + When pathfinding enters this region's navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path. </member> - <member name="layers" type="int" setter="set_layers" getter="get_layers" default="1"> - A bitfield determining all layers the region belongs to. These layers can be checked upon when requesting a path with [method NavigationServer2D.map_get_path]. + <member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1"> + A bitfield determining all navigation layers the region belongs to. These navigation layers can be checked upon when requesting a path with [method NavigationServer2D.map_get_path]. </member> <member name="navpoly" type="NavigationPolygon" setter="set_navigation_polygon" getter="get_navigation_polygon"> The [NavigationPolygon] resource to use. </member> <member name="travel_cost" type="float" setter="set_travel_cost" getter="get_travel_cost" default="1.0"> - When pathfinding moves inside this regions navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path. + When pathfinding moves inside this region's navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path. </member> </members> </class> diff --git a/doc/classes/NavigationRegion3D.xml b/doc/classes/NavigationRegion3D.xml index e45bca7f8b..9f4feee072 100644 --- a/doc/classes/NavigationRegion3D.xml +++ b/doc/classes/NavigationRegion3D.xml @@ -21,28 +21,43 @@ Bakes the [NavigationMesh]. If [code]on_thread[/code] is set to [code]true[/code] (default), the baking is done on a separate thread. Baking on separate thread is useful because navigation baking is not a cheap operation. When it is completed, it automatically sets the new [NavigationMesh]. Please note that baking on separate thread may be very slow if geometry is parsed from meshes as async access to each mesh involves heavy synchronization. Also, please note that baking on a separate thread is automatically disabled on operating systems that cannot use threads (such as HTML5 with threads disabled). </description> </method> + <method name="get_navigation_layer_value" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="layer_number" type="int" /> + <description> + Returns whether or not the specified layer of the [member navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> <method name="get_region_rid" qualifiers="const"> <return type="RID" /> <description> Returns the [RID] of this region on the [NavigationServer3D]. Combined with [method NavigationServer3D.map_get_closest_point_owner] can be used to identify the [NavigationRegion3D] closest to a point on the merged navigation map. </description> </method> + <method name="set_navigation_layer_value"> + <return type="void" /> + <argument index="0" name="layer_number" type="int" /> + <argument index="1" name="value" type="bool" /> + <description> + Based on [code]value[/code], enables or disables the specified layer in the [member navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> </methods> <members> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true"> Determines if the [NavigationRegion3D] is enabled or disabled. </member> <member name="enter_cost" type="float" setter="set_enter_cost" getter="get_enter_cost" default="0.0"> - When pathfinding enters this regions navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path. + When pathfinding enters this region's navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path. </member> - <member name="layers" type="int" setter="set_layers" getter="get_layers" default="1"> - A bitfield determining all layers the region belongs to. These layers can be checked upon when requesting a path with [method NavigationServer3D.map_get_path]. + <member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1"> + A bitfield determining all navigation layers the region belongs to. These navigation layers can be checked upon when requesting a path with [method NavigationServer3D.map_get_path]. </member> <member name="navmesh" type="NavigationMesh" setter="set_navigation_mesh" getter="get_navigation_mesh"> The [NavigationMesh] resource to use. </member> <member name="travel_cost" type="float" setter="set_travel_cost" getter="get_travel_cost" default="1.0"> - When pathfinding moves inside this regions navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path. + When pathfinding moves inside this region's navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path. </member> </members> <signals> diff --git a/doc/classes/NavigationServer2D.xml b/doc/classes/NavigationServer2D.xml index 7b0dac99c3..220c12ce7f 100644 --- a/doc/classes/NavigationServer2D.xml +++ b/doc/classes/NavigationServer2D.xml @@ -8,7 +8,7 @@ Maps are made up of regions, which are made of navigation polygons. Together, they define the navigable areas in the 2D world. [b]Note:[/b] Most NavigationServer changes take effect after the next physics frame and not immediately. This includes all changes made to maps, regions or agents by navigation related Nodes in the SceneTree or made through scripts. For two regions to be connected to each other, they must share a similar edge. An edge is considered connected to another if both of its two vertices are at a distance less than [code]edge_connection_margin[/code] to the respective other edge's vertex. - You may assign navigation layers to regions with [method NavigationServer2D.region_set_layers], which then can be checked upon when requesting a path with [method NavigationServer2D.map_get_path]. This allows allowing or forbidding some areas to 2D objects. + You may assign navigation layers to regions with [method NavigationServer2D.region_set_navigation_layers], which then can be checked upon when requesting a path with [method NavigationServer2D.map_get_path]. This allows allowing or forbidding some areas to 2D objects. To use the collision avoidance system, you may use agents. You can set an agent's target velocity, then the servers will emit a callback with a modified velocity. [b]Note:[/b] The collision avoidance system ignores regions. Using the modified velocity as-is might lead to pushing and agent outside of a navigable area. This is a limitation of the collision avoidance system, any more complex situation may require the use of the physics engine. This server keeps tracks of any call and executes them during the sync phase. This means that you can request any change to the map, using any thread, without worrying. @@ -44,7 +44,8 @@ <argument index="2" name="method" type="StringName" /> <argument index="3" name="userdata" type="Variant" default="null" /> <description> - Callback called at the end of the RVO process. + Callback called at the end of the RVO process. If a callback is created manually and the agent is placed on a navigation map it will calculate avoidance for the agent and dispatch the calculated [code]safe_velocity[/code] to the [code]receiver[/code] object with a signal to the chosen [code]method[/code] name. + [b]Note:[/b] Created callbacks are always processed independently of the SceneTree state as long as the agent is on a navigation map and not freed. To disable the dispatch of a callback from an agent use [method agent_set_callback] again with a [code]null[/code] object as the [code]receiver[/code]. </description> </method> <method name="agent_set_map" qualifiers="const"> @@ -175,9 +176,9 @@ <argument index="1" name="origin" type="Vector2" /> <argument index="2" name="destination" type="Vector2" /> <argument index="3" name="optimize" type="bool" /> - <argument index="4" name="layers" type="int" default="1" /> + <argument index="4" name="navigation_layers" type="int" default="1" /> <description> - Returns the navigation path to reach the destination from the origin. [code]layers[/code] is a bitmask of all region layers that are allowed to be in the path. + Returns the navigation path to reach the destination from the origin. [code]navigation_layers[/code] is a bitmask of all region navigation layers that are allowed to be in the path. </description> </method> <method name="map_get_regions" qualifiers="const"> @@ -254,18 +255,18 @@ Returns the [code]enter_cost[/code] of this [code]region[/code]. </description> </method> - <method name="region_get_layers" qualifiers="const"> - <return type="int" /> + <method name="region_get_map" qualifiers="const"> + <return type="RID" /> <argument index="0" name="region" type="RID" /> <description> - Returns the region's layers. + Returns the navigation map [RID] the requested [code]region[/code] is currently assigned to. </description> </method> - <method name="region_get_map" qualifiers="const"> - <return type="RID" /> + <method name="region_get_navigation_layers" qualifiers="const"> + <return type="int" /> <argument index="0" name="region" type="RID" /> <description> - Returns the navigation map [RID] the requested [code]region[/code] is currently assigned to. + Returns the region's navigation layers. </description> </method> <method name="region_get_travel_cost" qualifiers="const"> @@ -283,20 +284,20 @@ Sets the [code]enter_cost[/code] for this [code]region[/code]. </description> </method> - <method name="region_set_layers" qualifiers="const"> + <method name="region_set_map" qualifiers="const"> <return type="void" /> <argument index="0" name="region" type="RID" /> - <argument index="1" name="layers" type="int" /> + <argument index="1" name="map" type="RID" /> <description> - Set the region's layers. This allows selecting regions from a path request (when using [method NavigationServer2D.map_get_path]). + Sets the map for the region. </description> </method> - <method name="region_set_map" qualifiers="const"> + <method name="region_set_navigation_layers" qualifiers="const"> <return type="void" /> <argument index="0" name="region" type="RID" /> - <argument index="1" name="map" type="RID" /> + <argument index="1" name="navigation_layers" type="int" /> <description> - Sets the map for the region. + Set the region's navigation layers. This allows selecting regions from a path request (when using [method NavigationServer2D.map_get_path]). </description> </method> <method name="region_set_navpoly" qualifiers="const"> diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml index d6574dd69a..d2eef49cfd 100644 --- a/doc/classes/NavigationServer3D.xml +++ b/doc/classes/NavigationServer3D.xml @@ -8,7 +8,7 @@ Maps are made up of regions, which are made of navigation meshes. Together, they define the navigable areas in the 3D world. [b]Note:[/b] Most NavigationServer changes take effect after the next physics frame and not immediately. This includes all changes made to maps, regions or agents by navigation related Nodes in the SceneTree or made through scripts. For two regions to be connected to each other, they must share a similar edge. An edge is considered connected to another if both of its two vertices are at a distance less than [code]edge_connection_margin[/code] to the respective other edge's vertex. - You may assign navigation layers to regions with [method NavigationServer3D.region_set_layers], which then can be checked upon when requesting a path with [method NavigationServer3D.map_get_path]. This allows allowing or forbidding some areas to 3D objects. + You may assign navigation layers to regions with [method NavigationServer3D.region_set_navigation_layers], which then can be checked upon when requesting a path with [method NavigationServer3D.map_get_path]. This allows allowing or forbidding some areas to 3D objects. To use the collision avoidance system, you may use agents. You can set an agent's target velocity, then the servers will emit a callback with a modified velocity. [b]Note:[/b] The collision avoidance system ignores regions. Using the modified velocity as-is might lead to pushing and agent outside of a navigable area. This is a limitation of the collision avoidance system, any more complex situation may require the use of the physics engine. This server keeps tracks of any call and executes them during the sync phase. This means that you can request any change to the map, using any thread, without worrying. @@ -44,7 +44,8 @@ <argument index="2" name="method" type="StringName" /> <argument index="3" name="userdata" type="Variant" default="null" /> <description> - Callback called at the end of the RVO process. + Callback called at the end of the RVO process. If a callback is created manually and the agent is placed on a navigation map it will calculate avoidance for the agent and dispatch the calculated [code]safe_velocity[/code] to the [code]receiver[/code] object with a signal to the chosen [code]method[/code] name. + [b]Note:[/b] Created callbacks are always processed independently of the SceneTree state as long as the agent is on a navigation map and not freed. To disable the dispatch of a callback from an agent use [method agent_set_callback] again with a [code]null[/code] object as the [code]receiver[/code]. </description> </method> <method name="agent_set_map" qualifiers="const"> @@ -193,9 +194,9 @@ <argument index="1" name="origin" type="Vector3" /> <argument index="2" name="destination" type="Vector3" /> <argument index="3" name="optimize" type="bool" /> - <argument index="4" name="layers" type="int" default="1" /> + <argument index="4" name="navigation_layers" type="int" default="1" /> <description> - Returns the navigation path to reach the destination from the origin. [code]layers[/code] is a bitmask of all region layers that are allowed to be in the path. + Returns the navigation path to reach the destination from the origin. [code]navigation_layers[/code] is a bitmask of all region navigation layers that are allowed to be in the path. </description> </method> <method name="map_get_regions" qualifiers="const"> @@ -304,18 +305,18 @@ Returns the [code]enter_cost[/code] of this [code]region[/code]. </description> </method> - <method name="region_get_layers" qualifiers="const"> - <return type="int" /> + <method name="region_get_map" qualifiers="const"> + <return type="RID" /> <argument index="0" name="region" type="RID" /> <description> - Returns the region's layers. + Returns the navigation map [RID] the requested [code]region[/code] is currently assigned to. </description> </method> - <method name="region_get_map" qualifiers="const"> - <return type="RID" /> + <method name="region_get_navigation_layers" qualifiers="const"> + <return type="int" /> <argument index="0" name="region" type="RID" /> <description> - Returns the navigation map [RID] the requested [code]region[/code] is currently assigned to. + Returns the region's navigation layers. </description> </method> <method name="region_get_travel_cost" qualifiers="const"> @@ -333,20 +334,20 @@ Sets the [code]enter_cost[/code] for this [code]region[/code]. </description> </method> - <method name="region_set_layers" qualifiers="const"> + <method name="region_set_map" qualifiers="const"> <return type="void" /> <argument index="0" name="region" type="RID" /> - <argument index="1" name="layers" type="int" /> + <argument index="1" name="map" type="RID" /> <description> - Set the region's layers. This allows selecting regions from a path request (when using [method NavigationServer3D.map_get_path]). + Sets the map for the region. </description> </method> - <method name="region_set_map" qualifiers="const"> + <method name="region_set_navigation_layers" qualifiers="const"> <return type="void" /> <argument index="0" name="region" type="RID" /> - <argument index="1" name="map" type="RID" /> + <argument index="1" name="navigation_layers" type="int" /> <description> - Sets the map for the region. + Set the region's navigation layers. This allows selecting regions from a path request (when using [method NavigationServer3D.map_get_path]). </description> </method> <method name="region_set_navmesh" qualifiers="const"> diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 966e24c537..b7591ed4f4 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -778,12 +778,14 @@ <argument index="0" name="node" type="Node" /> <description> Emitted when a child node enters the scene tree, either because it entered on its own or because this node entered with it. + This signal is emitted [i]after[/i] the child node's own [constant NOTIFICATION_ENTER_TREE] and [signal tree_entered]. </description> </signal> - <signal name="child_exited_tree"> + <signal name="child_exiting_tree"> <argument index="0" name="node" type="Node" /> <description> - Emitted when a child node exits the scene tree, either because it exited on its own or because this node exited. + Emitted when a child node is about to exit the scene tree, either because it is being removed or freed directly, or because this node is exiting the tree. + When this signal is received, the child [code]node[/code] is still in the tree and valid. This signal is emitted [i]after[/i] the child node's own [signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]. </description> </signal> <signal name="ready"> @@ -799,6 +801,7 @@ <signal name="tree_entered"> <description> Emitted when the node enters the tree. + This signal is emitted [i]after[/i] the related [constant NOTIFICATION_ENTER_TREE] notification. </description> </signal> <signal name="tree_exited"> @@ -809,15 +812,18 @@ <signal name="tree_exiting"> <description> Emitted when the node is still active but about to exit the tree. This is the right place for de-initialization (or a "destructor", if you will). + This signal is emitted [i]before[/i] the related [constant NOTIFICATION_EXIT_TREE] notification. </description> </signal> </signals> <constants> <constant name="NOTIFICATION_ENTER_TREE" value="10"> Notification received when the node enters a [SceneTree]. + This notification is emitted [i]before[/i] the related [signal tree_entered]. </constant> <constant name="NOTIFICATION_EXIT_TREE" value="11"> Notification received when the node is about to exit a [SceneTree]. + This notification is emitted [i]after[/i] the related [signal tree_exiting]. </constant> <constant name="NOTIFICATION_MOVED_IN_PARENT" value="12"> Notification received when the node is moved in the parent. diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index e65c666900..2238be4ece 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -116,6 +116,7 @@ </member> <member name="scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)"> The node's scale. Unscaled value: [code](1, 1)[/code]. + [b]Note:[/b] Negative X scales in 2D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, negative scales on the X axis will be changed to negative scales on the Y axis and a rotation of 180 degrees when decomposed. </member> <member name="skew" type="float" setter="set_skew" getter="get_skew" default="0.0"> </member> diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml index 4444416a06..ac434af4fa 100644 --- a/doc/classes/Node3D.xml +++ b/doc/classes/Node3D.xml @@ -302,6 +302,7 @@ </member> <member name="scale" type="Vector3" setter="set_scale" getter="get_scale" default="Vector3(1, 1, 1)"> Scale part of the local transformation. + [b]Note:[/b] Mixed negative scales in 3D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, the scale values will either be all positive or all negative. </member> <member name="top_level" type="bool" setter="set_as_top_level" getter="is_set_as_top_level" default="false"> If [code]true[/code], the node will not inherit its transformations from its parent. Node transformations are only in global space. diff --git a/doc/classes/ORMMaterial3D.xml b/doc/classes/ORMMaterial3D.xml index 69d238ceff..656594a3c3 100644 --- a/doc/classes/ORMMaterial3D.xml +++ b/doc/classes/ORMMaterial3D.xml @@ -1,9 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ORMMaterial3D" inherits="BaseMaterial3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Physically based rendering (PBR) material that can be applied to 3D objects, can use an ORM texture. </brief_description> <description> + ORMMaterial3D's properties are inherited from [BaseMaterial3D]. Unlike [StandardMaterial3D], ORMMaterial3D uses a single texture for ambient occlusion, roughness and metallic maps, known as an ORM texture. </description> <tutorials> + <link title="Standard Material 3D and ORM Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link> </tutorials> </class> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 2512dec4b3..aaf08dec2f 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -175,6 +175,10 @@ if argument.find("=") > -1: var key_value = argument.split("=") arguments[key_value[0].lstrip("--")] = key_value[1] + else: + # Options without an argument will be present in the dictionary, + # with the value set to an empty string. + arguments[argument.lstrip("--")] = "" [/gdscript] [csharp] var arguments = new Godot.Collections.Dictionary(); @@ -185,6 +189,12 @@ string[] keyValue = argument.Split("="); arguments[keyValue[0].LStrip("--")] = keyValue[1]; } + else + { + // Options without an argument will be present in the dictionary, + // with the value set to an empty string. + arguments[keyValue[0].LStrip("--")] = ""; + } } [/csharp] [/codeblocks] @@ -469,7 +479,12 @@ <argument index="0" name="path" type="String" /> <description> Moves the file or directory to the system's recycle bin. See also [method Directory.remove]. + The method takes only global paths, so you may need to use [method ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/code] as it will not work in exported project. [b]Note:[/b] If the user has disabled the recycle bin on their system, the file will be permanently deleted instead. + [codeblock] + var file_to_remove = "user://slot1.sav" + OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove)) + [/codeblock] </description> </method> <method name="open_midi_inputs"> diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml index 42844794b0..11ae7cc2b0 100644 --- a/doc/classes/Object.xml +++ b/doc/classes/Object.xml @@ -325,7 +325,7 @@ </method> <method name="get" qualifiers="const"> <return type="Variant" /> - <argument index="0" name="property" type="String" /> + <argument index="0" name="property" type="StringName" /> <description> Returns the [Variant] value of the given [code]property[/code]. If the [code]property[/code] doesn't exist, this will return [code]null[/code]. [b]Note:[/b] In C#, the property name must be specified as snake_case if it is defined by a built-in Godot node. This doesn't apply to user-defined properties where you should use the same convention as in the C# source (typically PascalCase). @@ -399,7 +399,7 @@ </method> <method name="get_signal_connection_list" qualifiers="const"> <return type="Array" /> - <argument index="0" name="signal" type="String" /> + <argument index="0" name="signal" type="StringName" /> <description> Returns an [Array] of connections for the given [code]signal[/code]. </description> @@ -490,7 +490,7 @@ </method> <method name="set"> <return type="void" /> - <argument index="0" name="property" type="String" /> + <argument index="0" name="property" type="StringName" /> <argument index="1" name="value" type="Variant" /> <description> Assigns a new value to the given property. If the [code]property[/code] does not exist or the given value's type doesn't match, nothing will happen. diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml index bf80aa94a5..73413b379e 100644 --- a/doc/classes/PopupMenu.xml +++ b/doc/classes/PopupMenu.xml @@ -8,6 +8,7 @@ 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 0, the [PopupMenu] height will be limited by its parent rect. All [code]set_*[/code] methods allow negative item index, which makes the item accessed from the last one. + [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]. </description> <tutorials> </tutorials> @@ -201,6 +202,13 @@ Returns the accelerator of the item at the given [code]index[/code]. Accelerators are special combinations of keys that activate the item, no matter which control is focused. </description> </method> + <method name="get_item_horizontal_offset" qualifiers="const"> + <return type="int" /> + <argument index="0" name="index" type="int" /> + <description> + Returns the horizontal offset of the item at the given [code]index[/code]. + </description> + </method> <method name="get_item_icon" qualifiers="const"> <return type="Texture2D" /> <argument index="0" name="index" type="int" /> @@ -395,6 +403,14 @@ Enables/disables the item at the given [code]index[/code]. When it is disabled, it can't be selected and its action can't be invoked. </description> </method> + <method name="set_item_horizontal_offset"> + <return type="void" /> + <argument index="0" name="index" type="int" /> + <argument index="1" name="offset" type="int" /> + <description> + Sets the horizontal offset of the item at the given [code]index[/code]. + </description> + </method> <method name="set_item_icon"> <return type="void" /> <argument index="0" name="index" type="int" /> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 8a3677c0b4..fc86b67c60 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -307,6 +307,12 @@ <member name="audio/driver/output_latency.web" type="int" setter="" getter="" default="50"> Safer override for [member audio/driver/output_latency] in the Web platform, to avoid audio issues especially on mobile devices. </member> + <member name="audio/general/2d_panning_strength" type="float" setter="" getter="" default="1.0"> + The base strength of the panning effect for all AudioStreamPlayer2D nodes. The panning strength can be further scaled on each Node using [member AudioStreamPlayer2D.panning_strength]. + </member> + <member name="audio/general/3d_panning_strength" type="float" setter="" getter="" default="1.0"> + The base strength of the panning effect for all AudioStreamPlayer3D nodes. The panning strength can be further scaled on each Node using [member AudioStreamPlayer3D.panning_strength]. + </member> <member name="audio/video/video_delay_compensation_ms" type="int" setter="" getter="" default="0"> Setting to hardcode audio delay when playing video. Best to leave this untouched unless you know what you are doing. </member> @@ -441,8 +447,11 @@ <member name="debug/gdscript/warnings/void_assignment" type="int" setter="" getter="" default="1"> If [code]enabled[/code], prints a warning or an error when assigning the result of a function that returns [code]void[/code] to a variable. </member> - <member name="debug/settings/crash_handler/message" type="String" setter="" getter="" default=""Please include this when reporting the bug on https://github.com/godotengine/godot/issues""> - Message to be displayed before the backtrace when the engine crashes. + <member name="debug/settings/crash_handler/message" type="String" setter="" getter="" default=""Please include this when reporting the bug to the project developer.""> + Message to be displayed before the backtrace when the engine crashes. By default, this message is only used in exported projects due to the editor-only override applied to this setting. + </member> + <member name="debug/settings/crash_handler/message.editor" type="String" setter="" getter="" default=""Please include this when reporting the bug on: https://github.com/godotengine/godot/issues""> + Editor-only override for [member debug/settings/crash_handler/message]. Does not affect exported projects in debug or release mode. </member> <member name="debug/settings/fps/force_fps" type="int" setter="" getter="" default="0"> Maximum number of frames per second allowed. The actual number of frames per second may still be below this value if the game is lagging. @@ -544,6 +553,33 @@ See [enum DisplayServer.VSyncMode] for possible values and how they affect the behavior of your application. Depending on the platform and used renderer, the engine will fall back to [code]Enabled[/code], if the desired mode is not supported. </member> + <member name="editor/movie_writer/disable_vsync" type="bool" setter="" getter="" default="false"> + If [code]true[/code], requests V-Sync to be disabled when writing a movie (similar to setting [member display/window/vsync/vsync_mode] to [b]Disabled[/b]). This can speed up video writing if the hardware is fast enough to render, encode and save the video at a framerate higher than the monitor's refresh rate. + [b]Note:[/b] [member editor/movie_writer/disable_vsync] has no effect if the operating system or graphics driver forces V-Sync with no way for applications to disable it. + </member> + <member name="editor/movie_writer/fps" type="int" setter="" getter="" default="60"> + The number of frames per second to record in the video when writing a movie. Simulation speed will adjust to always match the specified framerate, which means the engine will appear to run slower at higher [member editor/movie_writer/fps] values. Certain FPS values will require you to adjust [member editor/movie_writer/mix_rate_hz] to prevent audio from desynchronizing over time. + This can be specified manually on the command line using the [code]--fixed-fps <fps>[/code] command line argument. + </member> + <member name="editor/movie_writer/mix_rate_hz" type="int" setter="" getter="" default="48000"> + The audio mix rate to use in the recorded audio when writing a movie (in Hz). This can be different from [member audio/driver/mix_rate], but this value must be divisible by [member editor/movie_writer/fps] to prevent audio from desynchronizing over time. + </member> + <member name="editor/movie_writer/mjpeg_quality" type="float" setter="" getter="" default="0.75"> + The JPEG quality to use when writing a video to an AVI file, between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger file sizes. Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.90[/code]. Even at quality [code]1.00[/code], JPEG compression remains lossy. + [b]Note:[/b] JPEG does not saving an alpha channel. If the [Image] contains an alpha channel, the image will still be saved, but the resulting JPEG file won't contain the alpha channel. + [b]Note:[/b] This does not affect the audio quality or writing PNG image sequences. + </member> + <member name="editor/movie_writer/movie_file" type="String" setter="" getter="" default=""""> + The output path for the movie. The file extension determines the [MovieWriter] that will be used. + Godot has 2 built-in [MovieWriter]s: + - AVI container with MJPEG for video and uncompressed audio ([code].avi[/code] file extension). Lossy compression, medium file sizes, fast encoding. The lossy compression quality can be adjusted by changing [member ProjectSettings.editor/movie_writer/mjpeg_quality]. The resulting file can be viewed in most video players, but it must be converted to another format for viewing on the web or by Godot with [VideoStreamPlayer]. AVI output is currently limited to a file of 4 GB in size at most. + - PNG image sequence for video and WAV for audio ([code].png[/code] file extension). Lossless compression, large file sizes, slow encoding. Designed to be encoded to a video file with another tool such as [url=https://ffmpeg.org/]FFmpeg[/url] after recording. Transparency is currently not supported. + If you need to encode to a different format or pipe a stream through third-party software, you can extend this [MovieWriter] class to create your own movie writers. + When using PNG output, the frame number will be appended at the end of the file name. It starts from 0 and is padded with 8 digits to ensure correct sorting and easier processing. For example, if the output path is [code]/tmp/hello.png[/code], the first two frames will be [code]/tmp/hello00000000.png[/code] and [code]/tmp/hello00000001.png[/code]. The audio will be saved at [code]/tmp/hello.wav[/code]. + </member> + <member name="editor/movie_writer/speaker_mode" type="int" setter="" getter="" default="0"> + The speaker mode to use in the recorded audio when writing a movie. See [enum AudioServer.SpeakerMode] for possible values. + </member> <member name="editor/node_naming/name_casing" type="int" setter="" getter="" default="0"> When creating node names automatically, set the type of casing in this project. This is mostly an editor setting. </member> @@ -1714,28 +1750,40 @@ <member name="rendering/global_illumination/voxel_gi/quality" type="int" setter="" getter="" default="0"> </member> <member name="rendering/lightmapping/bake_performance/max_rays_per_pass" type="int" setter="" getter="" default="32"> + 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. </member> <member name="rendering/lightmapping/bake_performance/max_rays_per_probe_pass" type="int" setter="" getter="" default="64"> + 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. </member> <member name="rendering/lightmapping/bake_performance/region_size" type="int" setter="" getter="" default="512"> + The region size to use when baking lightmaps with [LightmapGI]. </member> <member name="rendering/lightmapping/bake_quality/high_quality_probe_ray_count" type="int" setter="" getter="" default="512"> + The number of rays to use for baking dynamic object lighting in [LightmapProbe]s when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_HIGH]. </member> <member name="rendering/lightmapping/bake_quality/high_quality_ray_count" type="int" setter="" getter="" default="256"> + The number of rays to use for baking lightmaps with [LightmapGI] when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_HIGH]. </member> <member name="rendering/lightmapping/bake_quality/low_quality_probe_ray_count" type="int" setter="" getter="" default="64"> + The number of rays to use for baking dynamic object lighting in [LightmapProbe]s when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_LOW]. </member> <member name="rendering/lightmapping/bake_quality/low_quality_ray_count" type="int" setter="" getter="" default="16"> + The number of rays to use for baking lightmaps with [LightmapGI] when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_LOW]. </member> <member name="rendering/lightmapping/bake_quality/medium_quality_probe_ray_count" type="int" setter="" getter="" default="256"> + The number of rays to use for baking dynamic object lighting in [LightmapProbe]s when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_MEDIUM]. </member> <member name="rendering/lightmapping/bake_quality/medium_quality_ray_count" type="int" setter="" getter="" default="64"> + The number of rays to use for baking lightmaps with [LightmapGI] when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_MEDIUM]. </member> <member name="rendering/lightmapping/bake_quality/ultra_quality_probe_ray_count" type="int" setter="" getter="" default="2048"> + The number of rays to use for baking dynamic object lighting in [LightmapProbe]s when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_ULTRA]. </member> <member name="rendering/lightmapping/bake_quality/ultra_quality_ray_count" type="int" setter="" getter="" default="1024"> + The number of rays to use for baking lightmaps with [LightmapGI] when [member LightmapGI.quality] is [constant LightmapGI.BAKE_QUALITY_ULTRA]. </member> <member name="rendering/lightmapping/probe_capture/update_speed" type="float" setter="" getter="" default="15"> + The framerate-independent update speed when representing dynamic object lighting from [LightmapProbe]s. Higher values make dynamic object lighting update faster. Higher values can prevent fast-moving objects from having "outdated" indirect lighting displayed on them, at the cost of possible flickering when an object moves from a bright area to a shaded area. </member> <member name="rendering/limits/cluster_builder/max_clustered_elements" type="float" setter="" getter="" default="512"> </member> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index c5cc343fac..1294e5b58a 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -454,8 +454,8 @@ </method> </methods> <members> - <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="RichTextLabel.AutowrapMode" default="3"> - If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. To see how each mode behaves, see [enum AutowrapMode]. + <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="3"> + If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. To see how each mode behaves, see [enum TextServer.AutowrapMode]. </member> <member name="bbcode_enabled" type="bool" setter="set_use_bbcode" getter="is_using_bbcode" default="false"> If [code]true[/code], the label uses BBCode formatting. @@ -530,8 +530,8 @@ The restricted number of characters to display in the label. If [code]-1[/code], all characters will be displayed. [b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count]. </member> - <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="RichTextLabel.VisibleCharactersBehavior" default="0"> - Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum VisibleCharactersBehavior] for more info. + <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="TextServer.VisibleCharactersBehavior" default="0"> + Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum TextServer.VisibleCharactersBehavior] for more info. </member> </members> <signals> @@ -560,18 +560,6 @@ </signal> </signals> <constants> - <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode"> - Autowrap is disabled. - </constant> - <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available. - </constant> - <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode"> - Wraps the text inside the node's bounding rectangle by soft-breaking between words. - </constant> - <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode"> - Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line. - </constant> <constant name="LIST_NUMBERS" value="0" enum="ListType"> Each list item has a number marker. </constant> @@ -638,21 +626,6 @@ </constant> <constant name="ITEM_CUSTOMFX" value="26" enum="ItemType"> </constant> - <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior"> - Trims text before the shaping. e.g, increasing [member visible_characters] value is visually identical to typing the text. - </constant> - <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior"> - Displays glyphs that are mapped to the first [member visible_characters] characters from the beginning of the text. - </constant> - <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value. - </constant> - <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the left. - </constant> - <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior"> - Displays [member percent_visible] glyphs, starting from the right. - </constant> </constants> <theme_items> <theme_item name="default_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)"> diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml index 2305a9d325..bd6e5cdfa2 100644 --- a/doc/classes/StandardMaterial3D.xml +++ b/doc/classes/StandardMaterial3D.xml @@ -1,10 +1,12 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="StandardMaterial3D" inherits="BaseMaterial3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> <brief_description> + Physically based rendering (PBR) material that can be applied to 3D objects. </brief_description> <description> + StandardMaterial3D's properties are inherited from [BaseMaterial3D]. </description> <tutorials> - <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link> + <link title="Standard Material 3D and ORM Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link> </tutorials> </class> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index 1f3d5596aa..f4d453700c 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -412,9 +412,9 @@ </method> <method name="left" qualifiers="const"> <return type="String" /> - <argument index="0" name="position" type="int" /> + <argument index="0" name="length" type="int" /> <description> - Returns a number of characters from the left of the string. If negative [code]position[/code] is used, the characters are counted downwards from [String]'s length. + Returns a number of characters from the left of the string. If negative [code]length[/code] is used, the characters are counted downwards from [String]'s length. Examples: [codeblock] print("sample text".left(3)) #prints "sam" @@ -599,9 +599,9 @@ </method> <method name="right" qualifiers="const"> <return type="String" /> - <argument index="0" name="position" type="int" /> + <argument index="0" name="length" type="int" /> <description> - Returns a number of characters from the right of the string. If negative [code]position[/code] is used, the characters are counted downwards from [String]'s length. + Returns a number of characters from the right of the string. If negative [code]length[/code] is used, the characters are counted downwards from [String]'s length. Examples: [codeblock] print("sample text".right(3)) #prints "ext" diff --git a/doc/classes/SurfaceTool.xml b/doc/classes/SurfaceTool.xml index 43d34d3890..ad638a680b 100644 --- a/doc/classes/SurfaceTool.xml +++ b/doc/classes/SurfaceTool.xml @@ -35,7 +35,7 @@ <return type="void" /> <argument index="0" name="index" type="int" /> <description> - Adds an index to index array if you are using indexed vertices. Does not need to be called before adding vertices. + Adds a vertex to index array if you are using indexed vertices. Does not need to be called before adding vertices. </description> </method> <method name="add_triangle_fan"> @@ -123,6 +123,8 @@ <argument index="0" name="nd_threshold" type="float" /> <argument index="1" name="target_index_count" type="int" default="3" /> <description> + Generates a LOD for a given [code]nd_threshold[/code] in linear units (square root of quadric error metric), using at most [code]target_index_count[/code] indices. + Deprecated. Unused internally and neglects to preserve normals or UVs. Consider using [method ImporterMesh.generate_lods] instead. </description> </method> <method name="generate_normals"> @@ -139,25 +141,31 @@ Generates a tangent vector for each vertex. Requires that each vertex have UVs and normals set already (see [method generate_normals]). </description> </method> - <method name="get_custom_format" qualifiers="const"> - <return type="int" enum="SurfaceTool.CustomFormat" /> - <argument index="0" name="index" type="int" /> + <method name="get_aabb" qualifiers="const"> + <return type="AABB" /> <description> + Returns the axis-aligned bounding box of the vertex positions. </description> </method> - <method name="get_max_axis_length" qualifiers="const"> - <return type="float" /> + <method name="get_custom_format" qualifiers="const"> + <return type="int" enum="SurfaceTool.CustomFormat" /> + <argument index="0" name="channel_index" type="int" /> <description> + Returns the format for custom [code]channel_index[/code] (currently up to 4). Returns [constant CUSTOM_MAX] if this custom channel is unused. </description> </method> - <method name="get_primitive" qualifiers="const"> + <method name="get_primitive_type" qualifiers="const"> <return type="int" enum="Mesh.PrimitiveType" /> <description> + Returns the type of mesh geometry, such as [constant Mesh.PRIMITIVE_TRIANGLES]. </description> </method> <method name="get_skin_weight_count" qualifiers="const"> <return type="int" enum="SurfaceTool.SkinWeightCount" /> <description> + By default, returns [constant SKIN_4_WEIGHTS] to indicate only 4 bone influences per vertex are used. + Returns [constant SKIN_8_WEIGHTS] if up to 8 influences are used. + [b]Note:[/b] This function returns an enum, not the exact number of weights. </description> </method> <method name="index"> @@ -169,6 +177,7 @@ <method name="optimize_indices_for_cache"> <return type="void" /> <description> + Optimizes triangle sorting for performance. Requires that [method get_primitive_type] is [constant Mesh.PRIMITIVE_TRIANGLES]. </description> </method> <method name="set_bones"> @@ -188,16 +197,20 @@ </method> <method name="set_custom"> <return type="void" /> - <argument index="0" name="index" type="int" /> - <argument index="1" name="custom" type="Color" /> + <argument index="0" name="channel_index" type="int" /> + <argument index="1" name="custom_color" type="Color" /> <description> + Sets the custom value on this vertex for [code]channel_index[/code]. + [method set_custom_format] must be called first for this [code]channel_index[/code]. Formats which are not RGBA will ignore other color channels. </description> </method> <method name="set_custom_format"> <return type="void" /> - <argument index="0" name="index" type="int" /> + <argument index="0" name="channel_index" type="int" /> <argument index="1" name="format" type="int" enum="SurfaceTool.CustomFormat" /> <description> + Sets the color format for this custom [code]channel_index[/code]. Use [constant CUSTOM_MAX] to disable. + Must be invoked after [method begin] and should be set before [method commit] or [method commit_to_arrays]. </description> </method> <method name="set_material"> @@ -218,6 +231,9 @@ <return type="void" /> <argument index="0" name="count" type="int" enum="SurfaceTool.SkinWeightCount" /> <description> + Set to [constant SKIN_8_WEIGHTS] to indicate that up to 8 bone influences per vertex may be used. + By default, only 4 bone influences are used ([constant SKIN_4_WEIGHTS]) + [b]Note:[/b] This function takes an enum, not the exact number of weights. </description> </method> <method name="set_smooth_group"> @@ -258,26 +274,37 @@ </methods> <constants> <constant name="CUSTOM_RGBA8_UNORM" value="0" enum="CustomFormat"> + Limits range of data passed to `set_custom` to unsigned normalized 0 to 1 stored in 8 bits per channel. See [constant Mesh.ARRAY_CUSTOM_RGBA8_UNORM]. </constant> <constant name="CUSTOM_RGBA8_SNORM" value="1" enum="CustomFormat"> + Limits range of data passed to `set_custom` to signed normalized -1 to 1 stored in 8 bits per channel. See [constant Mesh.ARRAY_CUSTOM_RGBA8_SNORM]. </constant> <constant name="CUSTOM_RG_HALF" value="2" enum="CustomFormat"> + Stores data passed to `set_custom` as half precision floats, and uses only red and green color channels. See [constant Mesh.ARRAY_CUSTOM_RG_HALF]. </constant> <constant name="CUSTOM_RGBA_HALF" value="3" enum="CustomFormat"> + Stores data passed to `set_custom` as half precision floats and uses all color channels. See [constant Mesh.ARRAY_CUSTOM_RGBA_HALF]. </constant> <constant name="CUSTOM_R_FLOAT" value="4" enum="CustomFormat"> + Stores data passed to `set_custom` as full precision floats, and uses only red color channel. See [constant Mesh.ARRAY_CUSTOM_R_FLOAT]. </constant> <constant name="CUSTOM_RG_FLOAT" value="5" enum="CustomFormat"> + Stores data passed to `set_custom` as full precision floats, and uses only red and green color channels. See [constant Mesh.ARRAY_CUSTOM_RG_FLOAT]. </constant> <constant name="CUSTOM_RGB_FLOAT" value="6" enum="CustomFormat"> + Stores data passed to `set_custom` as full precision floats, and uses only red, green and blue color channels. See [constant Mesh.ARRAY_CUSTOM_RGB_FLOAT]. </constant> <constant name="CUSTOM_RGBA_FLOAT" value="7" enum="CustomFormat"> + Stores data passed to `set_custom` as full precision floats, and uses all color channels. See [constant Mesh.ARRAY_CUSTOM_RGBA_FLOAT]. </constant> <constant name="CUSTOM_MAX" value="8" enum="CustomFormat"> + Used to indicate a disabled custom channel. </constant> <constant name="SKIN_4_WEIGHTS" value="0" enum="SkinWeightCount"> + Each individual vertex can be influenced by only 4 bone weights. </constant> <constant name="SKIN_8_WEIGHTS" value="1" enum="SkinWeightCount"> + Each individual vertex can be influenced by up to 8 bone weights. </constant> </constants> </class> diff --git a/doc/classes/TextLine.xml b/doc/classes/TextLine.xml index 5359937db5..f154cbbe9a 100644 --- a/doc/classes/TextLine.xml +++ b/doc/classes/TextLine.xml @@ -161,28 +161,11 @@ <member name="preserve_invalid" type="bool" setter="set_preserve_invalid" getter="get_preserve_invalid" default="true"> If set to [code]true[/code] text will display invalid characters. </member> - <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextLine.OverrunBehavior" default="3"> - Sets the clipping behavior when the text exceeds the text line's set width. See [enum OverrunBehavior] for a description of all modes. + <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="3"> + Sets the clipping behavior when the text exceeds the text line's set width. See [enum TextServer.OverrunBehavior] for a description of all modes. </member> <member name="width" type="float" setter="set_width" getter="get_width" default="-1.0"> Text line width. </member> </members> - <constants> - <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior"> - No text trimming is performed. - </constant> - <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior"> - Trims the text per character. - </constant> - <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior"> - Trims the text per word. - </constant> - <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior"> - Trims the text per character and adds an ellipsis to indicate that parts are hidden. - </constant> - <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior"> - Trims the text per word and adds an ellipsis to indicate that parts are hidden. - </constant> - </constants> </class> diff --git a/doc/classes/TextParagraph.xml b/doc/classes/TextParagraph.xml index 964e2c771f..aaaacfe3ac 100644 --- a/doc/classes/TextParagraph.xml +++ b/doc/classes/TextParagraph.xml @@ -298,28 +298,11 @@ <member name="preserve_invalid" type="bool" setter="set_preserve_invalid" getter="get_preserve_invalid" default="true"> If set to [code]true[/code] text will display invalid characters. </member> - <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="0"> - Sets the clipping behavior when the text exceeds the paragraph's set width. See [enum OverrunBehavior] for a description of all modes. + <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0"> + Sets the clipping behavior when the text exceeds the paragraph's set width. See [enum TextServer.OverrunBehavior] for a description of all modes. </member> <member name="width" type="float" setter="set_width" getter="get_width" default="-1.0"> Paragraph width. </member> </members> - <constants> - <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior"> - No text trimming is performed. - </constant> - <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior"> - Trims the text per character. - </constant> - <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior"> - Trims the text per word. - </constant> - <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior"> - Trims the text per character and adds an ellipsis to indicate that parts are hidden. - </constant> - <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior"> - Trims the text per word and adds an ellipsis to indicate that parts are hidden. - </constant> - </constants> </class> diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml index 2f57b76374..ca1aec19ea 100644 --- a/doc/classes/TextServer.xml +++ b/doc/classes/TextServer.xml @@ -121,6 +121,20 @@ Returns font embolden strength. </description> </method> + <method name="font_get_face_count" qualifiers="const"> + <return type="int" /> + <argument index="0" name="font_rid" type="RID" /> + <description> + Returns number of faces in the TrueType / OpenType collection. + </description> + </method> + <method name="font_get_face_index" qualifiers="const"> + <return type="int" /> + <argument index="0" name="font_rid" type="RID" /> + <description> + Recturns an active face index in the TrueType / OpenType collection. + </description> + </method> <method name="font_get_fixed_size" qualifiers="const"> <return type="int" /> <argument index="0" name="font_rid" type="RID" /> @@ -593,6 +607,14 @@ Sets font embolden strength. If [code]strength[/code] is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness. </description> </method> + <method name="font_set_face_index"> + <return type="void" /> + <argument index="0" name="font_rid" type="RID" /> + <argument index="1" name="face_index" type="int" /> + <description> + Sets an active face index in the TrueType / OpenType collection. + </description> + </method> <method name="font_set_fixed_size"> <return type="void" /> <argument index="0" name="font_rid" type="RID" /> @@ -1520,6 +1542,18 @@ <constant name="JUSTIFICATION_CONSTRAIN_ELLIPSIS" value="16" enum="JustificationFlag"> Apply justification to the trimmed line with ellipsis. </constant> + <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode"> + Autowrap is disabled. + </constant> + <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode"> + Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available. + </constant> + <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode"> + Wraps the text inside the node's bounding rectangle by soft-breaking between words. + </constant> + <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode"> + Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line. + </constant> <constant name="BREAK_NONE" value="0" enum="LineBreakFlag"> Do not break the line. </constant> @@ -1535,7 +1569,37 @@ <constant name="BREAK_WORD_BOUND_ADAPTIVE" value="320" enum="LineBreakFlag"> Break the line between the words, or any unconnected graphemes if line is too short to fit the whole word. </constant> - <constant name="OVERRUN_NO_TRIMMING" value="0" enum="TextOverrunFlag"> + <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior"> + Trims text before the shaping. e.g, increasing [member Label.visible_characters] or [member RichTextLabel.visible_characters] value is visually identical to typing the text. + </constant> + <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior"> + Displays glyphs that are mapped to the first [member Label.visible_characters] or [member RichTextLabel.visible_characters] characters from the beginning of the text. + </constant> + <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior"> + Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value. + </constant> + <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior"> + Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the left. + </constant> + <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior"> + Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the right. + </constant> + <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior"> + No text trimming is performed. + </constant> + <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior"> + Trims the text per character. + </constant> + <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior"> + Trims the text per word. + </constant> + <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior"> + Trims the text per character and adds an ellipsis to indicate that parts are hidden. + </constant> + <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior"> + Trims the text per word and adds an ellipsis to indicate that parts are hidden. + </constant> + <constant name="OVERRUN_NO_TRIM" value="0" enum="TextOverrunFlag"> No trimming is performed. </constant> <constant name="OVERRUN_TRIM" value="1" enum="TextOverrunFlag"> diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml index 434d6f909c..b3be858ca1 100644 --- a/doc/classes/TextServerExtension.xml +++ b/doc/classes/TextServerExtension.xml @@ -114,6 +114,20 @@ Returns font embolden strength. </description> </method> + <method name="font_get_face_count" qualifiers="virtual const"> + <return type="int" /> + <argument index="0" name="font_rid" type="RID" /> + <description> + Returns number of faces in the TrueType / OpenType collection. + </description> + </method> + <method name="font_get_face_index" qualifiers="virtual const"> + <return type="int" /> + <argument index="0" name="font_rid" type="RID" /> + <description> + Returns an active face index in the TrueType / OpenType collection. + </description> + </method> <method name="font_get_fixed_size" qualifiers="virtual const"> <return type="int" /> <argument index="0" name="font_rid" type="RID" /> @@ -590,6 +604,14 @@ Sets font embolden strength. If [code]strength[/code] is not equal to zero, emboldens the font outlines. Negative values reduce the outline thickness. </description> </method> + <method name="font_set_face_index" qualifiers="virtual"> + <return type="void" /> + <argument index="0" name="font_rid" type="RID" /> + <argument index="1" name="face_index" type="int" /> + <description> + Sets an active face index in the TrueType / OpenType collection. + </description> + </method> <method name="font_set_fixed_size" qualifiers="virtual"> <return type="void" /> <argument index="0" name="font_rid" type="RID" /> diff --git a/doc/classes/TileData.xml b/doc/classes/TileData.xml index d5c2693f8b..66cf602e5d 100644 --- a/doc/classes/TileData.xml +++ b/doc/classes/TileData.xml @@ -79,7 +79,7 @@ Returns the occluder polygon of the tile for the TileSet occlusion layer with index [code]layer_id[/code]. </description> </method> - <method name="get_peering_bit_terrain" qualifiers="const"> + <method name="get_terrain_peering_bit" qualifiers="const"> <return type="int" /> <argument index="0" name="peering_bit" type="int" enum="TileSet.CellNeighbor" /> <description> @@ -185,7 +185,7 @@ Sets the occluder for the TileSet occlusion layer with index [code]layer_id[/code]. </description> </method> - <method name="set_peering_bit_terrain"> + <method name="set_terrain_peering_bit"> <return type="void" /> <argument index="0" name="peering_bit" type="int" enum="TileSet.CellNeighbor" /> <argument index="1" name="terrain" type="int" /> @@ -199,12 +199,15 @@ </member> <member name="flip_v" type="bool" setter="set_flip_v" getter="get_flip_v" default="false"> </member> - <member name="material" type="ShaderMaterial" setter="set_material" getter="get_material"> + <member name="material" type="Material" setter="set_material" getter="get_material"> + The [Material] to use for this [TileData]. This can be a [CanvasItemMaterial] to use the default shader, or a [ShaderMaterial] to use a custom shader. </member> <member name="modulate" type="Color" setter="set_modulate" getter="get_modulate" default="Color(1, 1, 1, 1)"> </member> <member name="probability" type="float" setter="set_probability" getter="get_probability" default="1.0"> </member> + <member name="terrain" type="int" setter="set_terrain" getter="get_terrain" default="-1"> + </member> <member name="terrain_set" type="int" setter="set_terrain_set" getter="get_terrain_set" default="-1"> </member> <member name="texture_offset" type="Vector2i" setter="set_texture_offset" getter="get_texture_offset" default="Vector2i(0, 0)"> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index 259c800a78..d532f583e6 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -243,15 +243,30 @@ - The alternative tile identifier [code]alternative_tile[/code] identifies a tile alternative the source is a [TileSetAtlasSource], and the scene for a [TileSetScenesCollectionSource]. </description> </method> - <method name="set_cells_from_surrounding_terrains"> + <method name="set_cells_terrain_connect"> <return type="void" /> <argument index="0" name="layer" type="int" /> <argument index="1" name="cells" type="Vector2i[]" /> <argument index="2" name="terrain_set" type="int" /> - <argument index="3" name="ignore_empty_terrains" type="bool" default="true" /> + <argument index="3" name="terrain" type="int" /> + <argument index="4" name="ignore_empty_terrains" type="bool" default="true" /> <description> - Updates all the cells in the [code]cells[/code] coordinates array and replace them by tiles that matches the surrounding cells terrains. Only cells form the given [code]terrain_set[/code] are considered. - If [code]ignore_empty_terrains[/code] is true, zones with no terrain defined are ignored to select the tiles. + Update all the cells in the [code]cells[/code] coordinates array so that they use the given [code]terrain[/code] for the given [code]terrain_set[/code]. If an updated cell has the same terrain as one of its neighboring cells, this function tries to join the two. This function might update neighboring tiles if needed to create correct terrain transitions. If [code]ignore_empty_terrains[/code] is true, empty terrains will be ignored when trying to find the best fitting tile for the given terrain constraints. + If [code]ignore_empty_terrains[/code] is true, empty terrains will be ignored when trying to find the best fitting tile for the given terrain constraints. + [b]Note:[/b] To work correctly, [code]set_cells_terrain_connect[/code] requires the TileMap's TileSet to have terrains set up with all required terrain combinations. Otherwise, it may produce unexpected results. + </description> + </method> + <method name="set_cells_terrain_path"> + <return type="void" /> + <argument index="0" name="layer" type="int" /> + <argument index="1" name="path" type="Vector2i[]" /> + <argument index="2" name="terrain_set" type="int" /> + <argument index="3" name="terrain" type="int" /> + <argument index="4" name="ignore_empty_terrains" type="bool" default="true" /> + <description> + Update all the cells in the [code]cells[/code] coordinates array so that they use the given [code]terrain[/code] for the given [code]terrain_set[/code]. The function will also connect two successive cell in the path with the same terrain. This function might update neighboring tiles if needed to create correct terrain transitions. + If [code]ignore_empty_terrains[/code] is true, empty terrains will be ignored when trying to find the best fitting tile for the given terrain constraints. + [b]Note:[/b] To work correctly, [code]set_cells_terrain_path[/code] requires the TileMap's TileSet to have terrains set up with all required terrain combinations. Otherwise, it may produce unexpected results. </description> </method> <method name="set_layer_enabled"> diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml index 8c2a5aa6d9..e1f7ff21d0 100644 --- a/doc/classes/Transform2D.xml +++ b/doc/classes/Transform2D.xml @@ -163,6 +163,7 @@ <argument index="0" name="scale" type="Vector2" /> <description> Sets the transform's scale. + [b]Note:[/b] Negative X scales in 2D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, negative scales on the X axis will be changed to negative scales on the Y axis and a rotation of 180 degrees when decomposed. </description> </method> <method name="set_skew"> diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml index 6ae85ad242..8a30364ebe 100644 --- a/doc/classes/Tree.xml +++ b/doc/classes/Tree.xml @@ -31,6 +31,7 @@ [/csharp] [/codeblocks] To iterate over all the [TreeItem] objects in a [Tree] object, use [method TreeItem.get_next] and [method TreeItem.get_first_child] after getting the root through [method get_root]. You can use [method Object.free] on a [TreeItem] to remove it from the [Tree]. + [b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] 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]. </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualShader.xml b/doc/classes/VisualShader.xml index 5f13e4e7bc..64d901cd79 100644 --- a/doc/classes/VisualShader.xml +++ b/doc/classes/VisualShader.xml @@ -166,10 +166,6 @@ </method> </methods> <members> - <member name="engine_version" type="Dictionary" setter="set_engine_version" getter="get_engine_version" default="{}"> - The Godot version this [VisualShader] was designed for, in the form of a [Dictionary] with [code]major[/code] and [code]minor[/code] keys with integer values. Example: [code]{"major": 4, "minor": 0}[/code] - This is used by the editor to convert visual shaders from older Godot versions. - </member> <member name="graph_offset" type="Vector2" setter="set_graph_offset" getter="get_graph_offset" default="Vector2(0, 0)"> The offset vector of the whole graph. </member> diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml index c57029a180..56a662d062 100644 --- a/doc/classes/World3D.xml +++ b/doc/classes/World3D.xml @@ -19,7 +19,7 @@ The World3D's [Environment]. </member> <member name="fallback_environment" type="Environment" setter="set_fallback_environment" getter="get_fallback_environment"> - The World3D's fallback_environment will be used if the World3D's [Environment] fails or is missing. + The World3D's fallback environment will be used if [member environment] fails or is missing. </member> <member name="navigation_map" type="RID" setter="" getter="get_navigation_map"> The [RID] of this world's navigation map. Used by the [NavigationServer3D]. diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml index 8afe169874..ed8f0b9a04 100644 --- a/doc/classes/WorldEnvironment.xml +++ b/doc/classes/WorldEnvironment.xml @@ -16,6 +16,7 @@ </tutorials> <members> <member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects"> + The [CameraEffects] resource used by this [WorldEnvironment], defining the default properties. This [CameraEffects] resource will be used by all [Camera3D]s that do not define their own [CameraEffects]. </member> <member name="environment" type="Environment" setter="set_environment" getter="get_environment"> The [Environment] resource used by this [WorldEnvironment], defining the default properties. diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py index f59f2ff872..ce09361dfa 100755 --- a/doc/tools/make_rst.py +++ b/doc/tools/make_rst.py @@ -913,9 +913,9 @@ def format_codeblock(code_type, post_text, indent_level, state): # types: str, if to_skip > indent_level: print_error( - "{}.xml: Four spaces should be used for indentation within [" - + code_type - + "].".format(state.current_class), + "{}.xml: Four spaces should be used for indentation within [{}].".format( + state.current_class, code_type + ), state, ) diff --git a/doc/translations/ar.po b/doc/translations/ar.po index e611dbc51d..8354193353 100644 --- a/doc/translations/ar.po +++ b/doc/translations/ar.po @@ -480,7 +480,7 @@ msgstr "" #, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3543,6 +3543,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3555,6 +3561,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8532,7 +8544,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8731,7 +8743,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8748,10 +8763,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8936,7 +8947,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13785,7 +13798,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19269,11 +19282,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19559,6 +19576,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "ÙŠÙØ±Ø¬Ø¹ باقي قسمة كل من Ø§Ù„Ù…ÙØªØ¬Ù‡ÙŠÙ† (الشعاعين)." @@ -21499,9 +21523,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21512,9 +21550,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21627,11 +21674,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26277,7 +26343,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26299,7 +26366,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27107,6 +27175,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27157,6 +27231,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29549,7 +29627,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29698,10 +29776,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29895,24 +29969,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29948,6 +30004,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30255,8 +30329,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30519,9 +30593,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34832,9 +34906,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35639,6 +35714,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35661,10 +35741,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35699,6 +35791,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35715,8 +35813,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35744,7 +35846,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35814,6 +35926,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35838,7 +35954,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35857,6 +35976,12 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم." msgid "Sets the map active." msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة الجيب العكسية للمَعلم." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35872,15 +35997,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "ÙŠÙØ±Ø¬Ø¹ باقي قسمة كل من Ø§Ù„Ù…ÙØªØ¬Ù‡ÙŠÙ† (الشعاعين)." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35890,6 +36061,11 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ القيمة المعاكسة للمَعلم." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35899,9 +36075,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35919,7 +36102,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35935,11 +36126,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35981,6 +36185,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35993,7 +36203,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36020,6 +36236,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36082,9 +36305,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36101,13 +36331,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." @@ -36128,6 +36351,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36158,8 +36388,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36182,9 +36412,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36198,14 +36428,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36217,7 +36447,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36245,29 +36475,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36286,7 +36516,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36349,7 +36579,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36371,13 +36601,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36427,8 +36657,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36446,8 +36676,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36476,10 +36719,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36496,7 +36763,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36537,7 +36806,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36618,6 +36889,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36654,6 +36933,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36661,6 +36964,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36740,6 +37059,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38503,7 +38828,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40604,8 +40935,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46973,7 +47311,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47218,6 +47565,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47443,6 +47802,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47651,6 +48202,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47918,6 +48661,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49420,7 +50206,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51569,6 +52354,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53306,8 +54107,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55028,7 +55829,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61140,6 +61946,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61246,6 +62057,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62377,7 +63192,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66060,11 +66880,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66104,6 +66925,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70866,6 +71697,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74066,8 +74907,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74082,11 +74923,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74101,8 +74948,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74119,6 +74966,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/ca.po b/doc/translations/ca.po index ebf220d30b..234b5cd60c 100644 --- a/doc/translations/ca.po +++ b/doc/translations/ca.po @@ -460,7 +460,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3492,6 +3492,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3504,6 +3510,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8479,7 +8491,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8678,7 +8690,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8695,10 +8710,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8883,7 +8894,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13726,7 +13739,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19201,11 +19214,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19491,6 +19507,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21429,9 +21452,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21442,9 +21479,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21557,11 +21603,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26199,7 +26264,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26221,7 +26287,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27027,6 +27094,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27077,6 +27150,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29467,7 +29544,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29616,10 +29693,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29813,24 +29886,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29866,6 +29921,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30173,8 +30246,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30437,9 +30510,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34745,9 +34818,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35545,6 +35619,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35567,10 +35645,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35605,6 +35695,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35621,8 +35717,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35650,7 +35750,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35714,6 +35824,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35737,7 +35851,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35754,6 +35871,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35769,14 +35892,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35785,6 +35950,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35794,9 +35963,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35814,7 +35990,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35829,11 +36013,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35874,6 +36071,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35886,7 +36089,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35913,6 +36122,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35975,9 +36191,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35993,13 +36216,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -36019,6 +36235,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36049,8 +36272,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36072,9 +36295,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36088,14 +36311,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36107,7 +36330,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36135,29 +36358,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36176,7 +36399,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36239,7 +36462,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36260,13 +36483,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36316,8 +36539,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36334,8 +36557,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36364,10 +36600,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36384,7 +36644,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36424,7 +36686,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36504,6 +36768,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36540,6 +36812,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36547,6 +36843,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36622,6 +36934,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38385,7 +38703,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40478,8 +40802,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46825,7 +47156,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47070,6 +47410,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47295,6 +47647,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47503,6 +48047,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47770,6 +48506,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49272,7 +50051,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51419,6 +52197,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53156,8 +53950,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54878,7 +55672,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60979,6 +61778,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61085,6 +61888,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62216,7 +63023,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65887,11 +66699,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65931,6 +66744,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70676,6 +71499,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73872,8 +74705,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73888,8 +74721,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73907,8 +74745,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73926,6 +74764,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot index 30133154a8..72d9388f80 100644 --- a/doc/translations/classes.pot +++ b/doc/translations/classes.pot @@ -340,7 +340,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3372,6 +3372,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3384,6 +3390,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8359,7 +8371,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8558,7 +8570,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8575,10 +8590,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8763,7 +8774,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13606,7 +13619,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19081,11 +19094,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19371,6 +19387,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21309,9 +21332,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21322,9 +21359,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21437,11 +21483,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26076,7 +26141,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26098,7 +26164,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26904,6 +26971,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26954,6 +27027,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29344,7 +29421,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29493,10 +29570,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29690,24 +29763,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29743,6 +29798,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30050,8 +30123,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30314,9 +30387,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34622,9 +34695,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35422,6 +35496,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35444,10 +35522,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35482,6 +35572,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35498,8 +35594,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35527,7 +35627,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35591,6 +35701,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35614,7 +35728,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35631,6 +35748,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35646,14 +35769,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35662,6 +35827,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35671,9 +35840,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35691,7 +35867,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35706,11 +35890,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35751,6 +35948,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35763,7 +35966,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35790,6 +35999,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35852,9 +36068,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35870,13 +36093,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35896,6 +36112,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35926,8 +36149,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35949,9 +36172,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35965,14 +36188,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35984,7 +36207,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36012,29 +36235,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36053,7 +36276,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36116,7 +36339,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36137,13 +36360,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36193,8 +36416,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36211,8 +36434,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36241,10 +36477,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36261,7 +36521,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36301,7 +36563,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36381,6 +36645,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36417,6 +36689,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36424,6 +36720,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36499,6 +36811,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38262,7 +38580,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40355,8 +40679,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46702,7 +47033,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46947,6 +47287,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47172,6 +47524,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47380,6 +47924,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47647,6 +48383,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49149,7 +49928,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51296,6 +52074,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53033,8 +53827,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54755,7 +55549,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60856,6 +61655,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60962,6 +61765,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62093,7 +62900,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65764,11 +66576,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65808,6 +66621,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70553,6 +71376,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73749,8 +74582,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73765,8 +74598,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73784,8 +74622,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73803,6 +74641,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/cs.po b/doc/translations/cs.po index 8673936d3f..4b60e4d7c4 100644 --- a/doc/translations/cs.po +++ b/doc/translations/cs.po @@ -489,7 +489,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3877,6 +3877,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3889,6 +3895,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8869,7 +8881,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9068,7 +9080,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9085,10 +9100,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9273,7 +9284,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14133,7 +14146,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19646,11 +19659,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Vrátà sinus parametru." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19937,6 +19954,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Vrátà zbytek po dÄ›lenà dvou vektorů." @@ -21878,9 +21902,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21891,9 +21929,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22006,11 +22053,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26661,7 +26727,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26683,7 +26750,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27495,6 +27563,13 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27545,6 +27620,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29938,7 +30017,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30087,10 +30166,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30284,24 +30359,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30337,6 +30394,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30644,8 +30719,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30908,9 +30983,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35226,9 +35301,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36034,6 +36110,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Vrátà sinus parametru." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36056,10 +36137,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36094,6 +36187,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36110,8 +36209,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36140,7 +36243,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36210,6 +36323,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36234,7 +36351,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36253,6 +36373,12 @@ msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false. msgid "Sets the map active." msgstr "Vrátà arkus sinus parametru." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36268,15 +36394,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Vrátà sinus parametru." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Vrátà sinus parametru." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36286,6 +36458,11 @@ msgstr "Vrátà opaÄnou hodnotu parametru." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Vracà [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36295,9 +36472,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36315,7 +36499,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36331,11 +36523,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36379,6 +36584,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36391,7 +36602,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36418,6 +36635,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36480,9 +36704,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36499,13 +36730,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Vrátà sinus parametru." @@ -36526,6 +36750,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36555,10 +36786,13 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" +"Vracà [code]true[/code] pokud si jsou [code]a[/code] a [code]b[/code] " +"pÅ™iblÞnÄ› rovny." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -36580,9 +36814,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36596,14 +36830,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36615,7 +36849,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36643,29 +36877,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36684,7 +36918,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36747,7 +36981,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36769,13 +37003,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36825,8 +37059,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36844,8 +37078,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36874,10 +37121,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36894,7 +37165,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36935,7 +37208,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37016,6 +37291,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37052,6 +37335,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37059,6 +37366,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37138,6 +37461,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38901,7 +39230,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41011,8 +41346,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47387,7 +47729,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47632,6 +47983,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47857,6 +48220,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -48065,6 +48620,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48332,6 +49079,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49834,7 +50624,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51990,6 +52779,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53728,8 +54533,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55451,7 +56256,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61599,6 +62409,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Vrátà [code] true [/code], pokud je vektor normalizován, jinak false." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61705,6 +62520,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62839,7 +63658,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66533,11 +67357,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66577,6 +67402,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71346,6 +72181,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74546,8 +75391,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74562,11 +75407,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Vrátà sinus parametru." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74581,8 +75432,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74599,6 +75450,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Vrátà sinus parametru." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/de.po b/doc/translations/de.po index fd65d8b4bf..640725bd9a 100644 --- a/doc/translations/de.po +++ b/doc/translations/de.po @@ -533,9 +533,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4378,6 +4379,15 @@ msgstr "" "die optional benannten 2D-Physikebenen verwendet." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"Weist darauf hin, dass eine Integer-Eigenschaft eine Bitmaske ist, welche " +"die optional benannten 2D-Renderebenen verwendet." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4394,6 +4404,15 @@ msgstr "" "die optional benannten 3D-Physikebenen verwendet." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"Weist darauf hin, dass eine Integer-Eigenschaft eine Bitmaske ist, welche " +"die optional benannten 2D-Renderebenen verwendet." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -10407,7 +10426,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -10606,7 +10625,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -10623,10 +10645,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -10811,7 +10829,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -15732,7 +15752,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -21355,11 +21375,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Der Name des Audiobusses des Bereichs." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -21647,6 +21671,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Gibt die Nummer von Elementen innerhalb eines Arrays wieder." @@ -23591,9 +23622,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -23604,9 +23649,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -23719,11 +23773,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -28408,7 +28481,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -28430,7 +28504,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -29261,6 +29336,15 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"Wenn [code]true[/code], aktualisiert Animationen als Reaktion auf " +"prozessbezogene Benachrichtigungen." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -29311,6 +29395,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -31715,7 +31803,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -31864,10 +31952,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -32064,24 +32148,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -32117,6 +32183,25 @@ msgid "" msgstr "" #: doc/classes/Input.xml +#, fuzzy +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "Der operator, der benutzt wird. Siehe [enum Operator] für Optionen." + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -32424,8 +32509,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -32688,9 +32773,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -37030,9 +37115,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -37838,6 +37924,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Gibt die Anzahl der Spuren in der Animation zurück." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -37861,10 +37952,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -37900,6 +38003,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "Der Anrufmodus, der für Spuren der Anrufmethode verwendet werden soll." +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml #, fuzzy msgid "Server interface for low-level 2D navigation access." @@ -37917,8 +38026,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -37952,7 +38065,17 @@ msgstr "" "Gibt [code]true[/code] zurück, wenn der Graph das übergebene Node enthält." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -38023,6 +38146,13 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" +"Gibt die aktuelle Zeile in der geöffneten Datei zurück (aktuell nicht " +"implementiert)." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -38050,7 +38180,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -38069,6 +38202,12 @@ msgstr "Gibt [code]true[/code] zurück falls das Array leer ist." msgid "Sets the map active." msgstr "Die letzte Aktion wiederholen." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -38084,15 +38223,62 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" +"Gibt [code]true[/code] zurück, wenn das Array [code]value[/code] enthält." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Gibt die Anzahl der Verbindungen im Graphen zurück." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Gibt die Größe des Arrays zurück." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -38105,6 +38291,11 @@ msgstr "" "Gibt zurück, ob die Knochenauflage für den Bone an [code]bone_idx[/code] " "deaktiviert ist." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -38114,9 +38305,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -38134,9 +38332,16 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -#, fuzzy -msgid "Returns the path from start to finish in global coordinates." -msgstr "Gibt die Rotation in Radians zurück." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" #: doc/classes/NavigationAgent.xml #, fuzzy @@ -38152,11 +38357,24 @@ msgid "" "system." msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück." -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -38202,6 +38420,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -38214,7 +38438,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -38241,6 +38471,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -38305,9 +38542,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -38325,13 +38569,6 @@ msgid "" msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück." #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Gibt die Anzahl der Spuren in der Animation zurück." @@ -38352,6 +38589,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -38381,10 +38625,11 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." -msgstr "" +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." +msgstr "Gibt das Unternodemit dem angegebenen [code]Namen[/code] zurück." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -38406,9 +38651,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -38422,14 +38667,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38441,7 +38686,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38470,13 +38715,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38487,13 +38726,22 @@ msgstr "Wenn [code]true[/code], ist die Filterung aktiviert." #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +#, fuzzy +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" +"Wenn der Wert [code]true[/code] ist, dann ist Tranzparenz für den Körper " +"aktiviert. Siehe auch [member blend_mode]." #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -38512,7 +38760,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -38576,7 +38824,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38598,13 +38846,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38655,8 +38903,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -38674,8 +38922,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -38704,11 +38965,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "Das [NavigationMeshGenerator] Singleton." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "Benachrichtigt, wenn eine Animation abgespielt wird." @@ -38727,7 +39012,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -38769,7 +39056,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -38850,6 +39139,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -38886,6 +39183,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -38893,6 +39214,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "Das [NavigationMeshGenerator] Singleton." + #: doc/classes/NavigationServer.xml #, fuzzy msgid "Server interface for low-level 3D navigation access." @@ -38974,6 +39312,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -40740,7 +41084,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -42865,8 +43215,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -49324,7 +49681,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -49569,6 +49935,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -49794,6 +50172,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -50002,6 +50572,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -50269,6 +51031,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -51773,7 +52578,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -53966,6 +54770,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -55720,8 +56540,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -57454,7 +58274,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -63689,6 +64514,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Wenn [code]true[/code], ist die Filterung aktiviert." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -63795,6 +64625,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -64932,7 +65766,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -68799,12 +69638,16 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +#, fuzzy +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" +"Die Animationen werden während des Physikframes (d. h. [method Node." +"_physics_process]) fortgesetzt." #: doc/classes/VisibilityEnabler2D.xml msgid "This enabler will stop [AnimatedSprite] nodes animations." @@ -68843,6 +69686,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml #, fuzzy msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "Gesendet wenn die Sichtbarkeit (versteckt/sichtbar) sich verändert." @@ -73673,6 +74526,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -76898,11 +77761,15 @@ msgid "Class that has everything pertaining to a world." msgstr "Eine Klasse die alles für eine Welt mitbringt." #: doc/classes/World.xml +#, fuzzy msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" +"Eine Klasse die alles für eine 2D Welt mitbringt. Einen physikalischen Raum, " +"ein visuelles Szenario und einen Bereich für Sounds. 2D Knotenpunkte " +"registrieren ihre Resourcen in die aktuelle 2D Welt." #: doc/classes/World.xml msgid "" @@ -76917,14 +77784,21 @@ msgid "The World's [Environment]." msgstr "Das [Environment] der Welt." #: doc/classes/World.xml +#, fuzzy msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" "Das fallback_environment der Welt wird genutzt, sollte das [Environment] der " "Welt nicht existieren oder nicht geladen werden können." #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Gibt die Anzahl der Spuren in der Animation zurück." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "Das visuelle Szenario der Welt." @@ -76937,10 +77811,11 @@ msgid "Class that has everything pertaining to a 2D world." msgstr "Eine Klasse die alles für eine 2D Welt mitbringt." #: doc/classes/World2D.xml +#, fuzzy msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" "Eine Klasse die alles für eine 2D Welt mitbringt. Einen physikalischen Raum, " "ein visuelles Szenario und einen Bereich für Sounds. 2D Knotenpunkte " @@ -76962,6 +77837,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Gibt die Anzahl der Spuren in der Animation zurück." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/el.po b/doc/translations/el.po index 41e4925578..e19557ebb4 100644 --- a/doc/translations/el.po +++ b/doc/translations/el.po @@ -355,7 +355,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3387,6 +3387,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3399,6 +3405,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8376,7 +8388,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8575,7 +8587,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8592,10 +8607,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8780,7 +8791,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13630,7 +13643,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19114,11 +19127,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19404,6 +19421,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "ΕπιστÏÎφει το υπόλοιπο των 2 διανυσμάτων." @@ -21344,9 +21368,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21357,9 +21395,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21472,11 +21519,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26122,7 +26188,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26144,7 +26211,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26952,6 +27020,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27002,6 +27076,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29394,7 +29472,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29543,10 +29621,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29740,24 +29814,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29793,6 +29849,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30100,8 +30174,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30364,9 +30438,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34677,9 +34751,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35478,6 +35553,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35500,10 +35580,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35538,6 +35630,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35554,8 +35652,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35583,7 +35685,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35653,6 +35765,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35677,7 +35793,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35696,6 +35815,12 @@ msgstr "ΕπιστÏÎφει το συνημίτονο της παÏαμÎÏ„Ïο msgid "Sets the map active." msgstr "ΕπιστÏÎφει το τόξο ημιτόνου της παÏαμÎÏ„Ïου." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35711,15 +35836,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "ΕπιστÏÎφει το υπόλοιπο των 2 διανυσμάτων." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35729,6 +35900,11 @@ msgstr "ΕπιστÏÎφει την αντίθετη τιμή της παÏαμΠmsgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35738,9 +35914,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35758,7 +35941,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35774,11 +35965,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35820,6 +36024,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35832,7 +36042,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35859,6 +36075,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35921,9 +36144,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35940,13 +36170,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." @@ -35967,6 +36190,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35997,8 +36227,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36021,9 +36251,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36037,14 +36267,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36056,7 +36286,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36084,29 +36314,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36125,7 +36355,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36188,7 +36418,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36210,13 +36440,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36266,8 +36496,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36285,8 +36515,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36315,10 +36558,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36335,7 +36602,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36376,7 +36645,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36457,6 +36728,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36493,6 +36772,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36500,6 +36803,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36579,6 +36898,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38342,7 +38667,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40443,8 +40774,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46799,7 +47137,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47044,6 +47391,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47269,6 +47628,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47477,6 +48028,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47744,6 +48487,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49246,7 +50032,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51395,6 +52180,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53132,8 +53933,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54854,7 +55655,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60966,6 +61772,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "ΕπιστÏÎφει το συνημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61072,6 +61883,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62203,7 +63018,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65886,11 +66706,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65930,6 +66751,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70692,6 +71523,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73891,8 +74732,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73907,11 +74748,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -73926,8 +74773,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73944,6 +74791,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "ΕπιστÏÎφει το ημίτονο της παÏαμÎÏ„Ïου." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/es.po b/doc/translations/es.po index ced2e2ad3e..4c4982ad59 100644 --- a/doc/translations/es.po +++ b/doc/translations/es.po @@ -34,12 +34,13 @@ # Francesco Santoro <fgsantoror20@gmail.com>, 2022. # Jake-insane <jake0insane@gmail.com>, 2022. # Luis Alberto Flores Baca <betofloresbaca@gmail.com>, 2022. +# emnrx <emanuelermancia@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-25 15:12+0000\n" -"Last-Translator: Ventura Pérez GarcÃa <vetu@protonmail.com>\n" +"PO-Revision-Date: 2022-06-16 18:58+0000\n" +"Last-Translator: emnrx <emanuelermancia@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/es/>\n" "Language: es\n" @@ -47,7 +48,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -525,7 +526,7 @@ msgstr "" #, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4433,6 +4434,15 @@ msgstr "" "opcionalmente nombradas, capas de fÃsica 2D." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"Sugiere que una propiedad entera es una máscara de bits usando las, " +"opcionalmente nombradas, capas de representación 2D." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4449,6 +4459,15 @@ msgstr "" "opcionalmente nombrada, capas fisicas 3D." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"Sugiere que una propiedad entera es una máscara de bits usando las, " +"opcionalmente nombradas, capas de representación 2D." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -11064,7 +11083,7 @@ msgstr "" "astar.connect_points(1,2, false)\n" "[/codeblock]" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -11356,8 +11375,16 @@ msgstr "" "actualizados con los pesos dados." #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." -msgstr "Devuelve si hay una conexion/segmento entre los puntos dados." +#, fuzzy +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." +msgstr "" +"Devuelve si dos puntos dados estan directamente conectados por un segmento. " +"Si [code]bidirectional[/code] es [code]false[/code], devuelve si el " +"movimiento desde [code]id[/code] a [code]to_id[/code] es posible a traves " +"del segmento." #: doc/classes/AStar2D.xml msgid "" @@ -11382,10 +11409,6 @@ msgstr "" "[/codeblock]" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "Elimina el segmento entre los puntos dados." - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -11640,7 +11663,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -17842,7 +17867,7 @@ msgstr "" "configurado." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "Devuelve el [RID] del objeto." @@ -25066,12 +25091,16 @@ msgstr "" "de dibujar curvas y/o guardarlas como archivos de imagen." #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." msgstr "La [code]curve[/code] renderizada en la textura." #: doc/classes/CurveTexture.xml -msgid "The width of the texture." -msgstr "El ancho de la textura." +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 " +"the cost of increased generation time and memory usage." +msgstr "" #: doc/classes/CylinderMesh.xml msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -25504,6 +25533,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "Devuelve la lista de claves en el [Dictionary]." #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Devuelve el número de archivos en este directorio." @@ -28190,13 +28226,24 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" -"Obtiene el estado de su editor de plugins. Se usa cuando se guarda la escena " -"(asà que el estado se mantiene al abrirla de nuevo) y para cambiar de " -"pestaña (asà que el estado puede ser restaurado cuando la pestaña vuelve)." #: doc/classes/EditorPlugin.xml msgid "" @@ -28209,14 +28256,19 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" -"Consigue el diseño de la interfaz gráfica del plugin. Se utiliza para " -"guardar la disposición del editor del proyecto cuando se llama a [method " -"queue_save_layout] o se ha cambiado la disposición del editor (por ejemplo, " -"cambiando la posición de un dock)." #: doc/classes/EditorPlugin.xml msgid "" @@ -28357,13 +28409,31 @@ msgstr "" "especialmente útil si tu plugin quiere usar raycast en la escena." #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." -msgstr "Restaurar el estado guardado por [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" +msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" -"Restaurar el diseño del plugin GUI guardado por [method get_window_layout]." #: doc/classes/EditorPlugin.xml msgid "" @@ -34517,12 +34587,14 @@ msgid "Gradient-filled texture." msgstr "Textura llena de gradientes." #: doc/classes/GradientTexture.xml +#, fuzzy msgid "" "GradientTexture uses a [Gradient] to fill the texture data. The gradient " "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" "GradientTexture utiliza un [Gradient] para rellenar los datos de la textura. " "El gradiente se rellenará de izquierda a derecha usando los colores " @@ -34551,7 +34623,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" "GradientTexture utiliza un [Gradient] para rellenar los datos de la textura. " "El gradiente se rellenará de izquierda a derecha usando los colores " @@ -35589,6 +35662,15 @@ msgstr "" "GridMap." #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"Si [code]true[/code], actualiza las animaciones en respuesta a las " +"notificaciones relacionadas con el proceso." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" "Si [code]true[/code], los elementos de la cuadrÃcula se centran en el eje X." @@ -35654,6 +35736,10 @@ msgid "The assigned [MeshLibrary]." msgstr "La [MeshLibrary] asignada." #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -38952,7 +39038,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -39135,10 +39221,6 @@ msgstr "" "botones del ratón al mismo tiempo, los bits se suman." #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "Devuelve el modo de ratón. Vea las constantes para más información." - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -39396,36 +39478,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "Establece el modo del ratón. Vea las constantes para más información." - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" -"Habilita o deshabilita la acumulación de eventos de entrada similares " -"enviados por el sistema operativo. Cuando la acumulación de entrada está " -"activada, todos los eventos de entrada generados durante una trama se " -"fusionarán y se emitirán cuando la trama se termine de renderizar. Por lo " -"tanto, esto limita el número de llamadas del método de entrada por segundo " -"al FPS de renderización.\n" -"La acumulación de entrada está habilitada por defecto. Se puede desactivar " -"para obtener una entrada ligeramente más precisa/reactiva a costa de un " -"mayor uso de la CPU. En aplicaciones donde se requiere dibujar lÃneas a mano " -"alzada, la acumulación de entrada generalmente debe deshabilitarse mientras " -"el usuario está dibujando la lÃnea para obtener resultados que sigan de " -"cerca la entrada real." - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -39474,6 +39526,38 @@ msgid "" msgstr "" #: doc/classes/Input.xml +#, fuzzy +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "Establece el modo del ratón. Vea las constantes para más información." + +#: doc/classes/Input.xml +#, fuzzy +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" +"Habilita o deshabilita la acumulación de eventos de entrada similares " +"enviados por el sistema operativo. Cuando la acumulación de entrada está " +"activada, todos los eventos de entrada generados durante una trama se " +"fusionarán y se emitirán cuando la trama se termine de renderizar. Por lo " +"tanto, esto limita el número de llamadas del método de entrada por segundo " +"al FPS de renderización.\n" +"La acumulación de entrada está habilitada por defecto. Se puede desactivar " +"para obtener una entrada ligeramente más precisa/reactiva a costa de un " +"mayor uso de la CPU. En aplicaciones donde se requiere dibujar lÃneas a mano " +"alzada, la acumulación de entrada generalmente debe deshabilitarse mientras " +"el usuario está dibujando la lÃnea para obtener resultados que sigan de " +"cerca la entrada real." + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "Se emite cuando se ha conectado o desconectado un dispositivo joypad." @@ -39889,9 +39973,10 @@ msgstr "" "code], se libera el estado del botón." #: doc/classes/InputEventJoypadButton.xml +#, fuzzy msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" "Representa la presión que el usuario ejerce sobre el botón con su dedo, si " "el controlador lo soporta. Va de [code]0[/code] a [code]1[/code]." @@ -40212,13 +40297,14 @@ msgid "Input event type for mouse motion events." msgstr "Tipo de evento de entrada para los eventos de movimiento del ratón." #: doc/classes/InputEventMouseMotion.xml +#, fuzzy msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -45871,9 +45957,10 @@ msgstr "Nodo utilizado para mostrar una [Mesh] en 2D." #: doc/classes/MeshInstance2D.xml #, fuzzy msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" "Nodo utilizado para mostrar una [Mesh] en 2D. Puede ser construido a partir " "de un [Sprite2D] existente mediante una herramienta en la barra de " @@ -46937,6 +47024,11 @@ msgstr "" #: doc/classes/Navigation.xml #, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Devuelve el [RID] de la forma enésima de un área." + +#: doc/classes/Navigation.xml +#, fuzzy msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -46965,12 +47057,24 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" "Define qué dirección es hacia arriba. Por defecto, esto es [code](0, 1, 0)[/" "code], que es la dirección \"arriba\" del mundo." +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "Navegación 2D y nodo de búsqueda de caminos." @@ -47015,6 +47119,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "El modo de llamada a utilizar para las Call Method Tracks." +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml #, fuzzy msgid "Server interface for low-level 2D navigation access." @@ -47032,8 +47142,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -47066,7 +47180,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Devuelve [code]true[/code] si el script puede ser instanciado." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -47138,6 +47262,13 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" +"Obtiene la lÃnea actual en el archivo analizado (actualmente no " +"implementado)." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -47168,9 +47299,11 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -#, fuzzy -msgid "Returns the navigation path to reach the destination from the origin." -msgstr "Devuelve el polÃgono de navegación del tile." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." +msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" @@ -47188,6 +47321,13 @@ msgstr "Devuelve [code]true[/code] si la selección está activa." msgid "Sets the map active." msgstr "Detiene el temporizador." +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "Devuelve la transformada aplicada a la malla de navegación del objeto." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Set the map cell size used to weld the navigation mesh polygons." @@ -47205,15 +47345,64 @@ msgstr "Crea un [Area2D]." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" +"Devuelve la proyección ortogonal de [code]point[/code] en un punto del plano." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Devuelve [code]true[/code] si existe la [code]signal[/code] dada." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Devuelve la malla de navegación del objeto." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Devuelve [code]true[/code] si existe la [code]signal[/code] dada." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" +"Coloca la [code]position[/code] para el punto con el [code]id[/code] dado." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Establece los metadatos del borde dado." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -47224,6 +47413,12 @@ msgstr "Establece la malla de navegación del objeto." msgid "Sets the global transformation for the region." msgstr "Establece la matriz de transformación global del Viewport." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" +"Coloca la [code]position[/code] para el punto con el [code]id[/code] dado." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -47233,9 +47428,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -47253,9 +47455,16 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -#, fuzzy -msgid "Returns the path from start to finish in global coordinates." -msgstr "Devuelve el RID del viewport del [VisualServer]." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" #: doc/classes/NavigationAgent.xml #, fuzzy @@ -47271,11 +47480,24 @@ msgid "" "system." msgstr "Devuelve el nodo animacion con el nombre dado." -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -47322,6 +47544,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -47334,9 +47562,14 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -#, fuzzy -msgid "The agent height offset to match the navigation mesh height." -msgstr "Devuelve el desplazamiento del polÃgono de navegación del tile." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." +msgstr "" #: doc/classes/NavigationAgent.xml msgid "" @@ -47364,6 +47597,13 @@ msgstr "El valor máximo de luminosidad para la exposición automática." msgid "The maximum speed that an agent can move." msgstr "El valor máximo que puede alcanzar la curva." +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml #, fuzzy msgid "The distance to search for other agents." @@ -47429,9 +47669,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -47449,13 +47696,6 @@ msgid "" msgstr "Devuelve el nodo animacion con el nombre dado." #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Devuelve el [RID] de la forma enésima de un área." @@ -47476,6 +47716,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -47512,8 +47759,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml #, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" "Devuelve [code]true[/code] si el bit de la máscara de colisión dada está " "configurado." @@ -47544,9 +47791,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -47562,14 +47809,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -47582,7 +47829,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -47611,13 +47858,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -47628,13 +47869,22 @@ msgstr "Si [code]true[/code], se activan las pulsaciones de paso." #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." +msgstr "" +"Si [code]true[/code], las partÃculas emitirán una vez y luego se detendrán. " +"Equivalente a [member GPUParticles.one_shot]." + +#: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -47657,7 +47907,7 @@ msgstr "El modo de fondo. Ver [enum BGMode] para los posibles valores." #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -47724,7 +47974,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -47746,13 +47996,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -47803,8 +48053,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -47823,8 +48073,21 @@ msgstr "Nodo que instancia un [MultiMesh]." #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -47853,11 +48116,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "El recurso [Mesh] para la instancia." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "Notifica cuando una animación comienza a reproducirse." @@ -47876,7 +48163,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -47921,7 +48210,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -48039,6 +48330,14 @@ msgstr "" "vértices." #: doc/classes/NavigationPolygon.xml +msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml #, fuzzy msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " @@ -48090,6 +48389,31 @@ msgstr "" "[method make_polygons_from_outlines] para que los polÃgonos se actualicen." #: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "A region of the 2D navigation map." +msgstr "Establece la malla de navegación del objeto." + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -48097,6 +48421,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "El recurso [Mesh] para la instancia." + #: doc/classes/NavigationServer.xml #, fuzzy msgid "Server interface for low-level 3D navigation access." @@ -48182,6 +48523,12 @@ msgid "Bakes the navigation mesh." msgstr "Establece la malla de navegación del objeto." #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml #, fuzzy msgid "Control activation of this server." msgstr "Traducción local de este nodo." @@ -50745,8 +51092,14 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "Rotación en grados, en relación con el padre del nodo." #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." -msgstr "La escala del nodo. Valor no escalado: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." +msgstr "" #: doc/classes/Node2D.xml msgid "Local [Transform2D]." @@ -53656,8 +54009,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -62139,9 +62499,17 @@ msgstr "" "una función que devuelve [code]void[/code] a una variable." #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" -"Mensaje que se mostrará antes del retroceso cuando el motor se crashea." #: doc/classes/ProjectSettings.xml #, fuzzy @@ -62455,6 +62823,18 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml #, fuzzy msgid "" "Search path for project-specific script templates. Godot will search for " @@ -62779,6 +63159,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "Retraso predeterminado para las sugerencias (en segundos)." #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "Nombre opcional para la capa 1 de la fÃsica 2D." @@ -62999,6 +63571,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "Nombre opcional para la capa 9 del renderizado 2D." #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "Nombre opcional para la capa 1 de la fÃsica 3D." @@ -63294,6 +64058,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -64356,6 +65163,12 @@ msgid "" "when it is set to [code]false[/code], i.e. there are problems with the " "default method." msgstr "" +"Usa un método simplificado para generar datos CPV (Conjunto Potencialmente " +"Visible). Los resultados pueden no ser precisos cuando más de un portal une " +"habitaciones adyacentes.\n" +"[b]Nota:[/b] Por lo general, solo deberÃas utilizar esta opción si " +"encuentras errores al estar en [code]false[/code], por ej. cuando hay " +"problemas con el método predeterminado." #: doc/classes/ProjectSettings.xml msgid "" @@ -65082,7 +65895,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -68009,6 +68821,26 @@ msgid "Makes text fill width." msgstr "Hace que el texto se expanda para rellenar el ancho." #: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns top of the inline image to the top of the text." +msgstr "La altura de la caja medida desde el centro de la caja." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns center of the inline image to the center of the text." +msgstr "Alinea a los niños con el centro del contenedor." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "La altura de la caja medida desde el centro de la caja." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "Alinea a los niños con el final del contenedor." + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "Cada elemento de la lista tiene un marcador numérico." @@ -70221,8 +71053,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" "Un temporizador de un solo uso gestionado por el árbol de la escena, que " "emite [signal timeout] al finalizar. Véase también [method SceneTree." @@ -72308,8 +73140,13 @@ msgstr "" "términos de ángulos YXZ-Euler en el formato (ángulo X, ángulo Y, ángulo Z)." #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." -msgstr "Parte de Escala de la transformación local." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." +msgstr "" #: doc/classes/Spatial.xml msgid "Local space [Transform] of this node, with respect to the parent node." @@ -80131,6 +80968,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Si [code]true[/code], la animación nombrada existe." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "Si [code]true[/code], los UV de la celda serán recortados." @@ -80280,6 +81122,10 @@ msgstr "" "El modo de orientación de TileMap. Vea [enum Mode] para los posibles valores." #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -81660,13 +82506,15 @@ msgstr "" "multiplicación de la matriz." #: doc/classes/Transform2D.xml -#, fuzzy msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" -"Escala la transformación por el factor de escala dado, usando la " -"multiplicación de la matriz." #: doc/classes/Transform2D.xml #, fuzzy @@ -86613,11 +87461,14 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "Este habilitador detendrá los nodos [GPUParticles2D]." #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +#, fuzzy +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "Este habilitador detendrá la función _process del padre." #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +#, fuzzy +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "Este habilitador detendrá la función del _physics_process del padre." #: doc/classes/VisibilityEnabler2D.xml @@ -86677,6 +87528,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "El cuadro delimitador del VisibilityNotifier." #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml #, fuzzy msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -92791,6 +93652,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "La cantidad del shader se repite en el fotograma." #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "La cantidad de superficie cambia en el fotograma." @@ -96917,8 +97788,8 @@ msgstr "Clase que tiene todo lo que pertenece a un mundo." #, fuzzy msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" "Clase que tiene todo lo que pertenece a un mundo. Un espacio fÃsico, un " "escenario visual y un espacio sonoro. Los nodos de Spatial registran sus " @@ -96942,14 +97813,20 @@ msgstr "El [Environment] del World." #: doc/classes/World.xml #, fuzzy msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" "El fallback_environment del World3D se usará si el [Environment] de World3D " "falla o falta." #: doc/classes/World.xml #, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Devuelve el [RID] de la forma enésima de un área." + +#: doc/classes/World.xml +#, fuzzy msgid "The World's visual scenario." msgstr "El escenario visual de World." @@ -96963,10 +97840,11 @@ msgid "Class that has everything pertaining to a 2D world." msgstr "Clase que tiene todo lo que pertenece a un mundo 2D." #: doc/classes/World2D.xml +#, fuzzy msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" "Clase que tiene todo lo que pertenece a un mundo 2D. Un espacio fÃsico, un " "escenario visual y un espacio sonoro. Los nodos 2D registran sus recursos en " @@ -96995,6 +97873,12 @@ msgstr "" #: doc/classes/World2D.xml #, fuzzy msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Devuelve el [RID] de la forma enésima de un área." + +#: doc/classes/World2D.xml +#, fuzzy +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/fa.po b/doc/translations/fa.po index 8f5ee45c36..ee4b608fbd 100644 --- a/doc/translations/fa.po +++ b/doc/translations/fa.po @@ -492,7 +492,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3811,6 +3811,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3823,6 +3829,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8798,7 +8810,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8997,7 +9009,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9014,10 +9029,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9202,7 +9213,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14045,7 +14058,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19520,11 +19533,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19810,6 +19826,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21748,9 +21771,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21761,9 +21798,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21876,11 +21922,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26518,7 +26583,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26540,7 +26606,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27346,6 +27413,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27396,6 +27469,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29786,7 +29863,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29935,10 +30012,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30132,24 +30205,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30185,6 +30240,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30492,8 +30565,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30756,9 +30829,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35064,9 +35137,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35870,6 +35944,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35892,10 +35970,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35930,6 +36020,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35946,8 +36042,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35975,7 +36075,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36039,6 +36149,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -36062,7 +36176,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36079,6 +36196,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36094,14 +36217,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -36110,6 +36275,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36119,9 +36288,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36139,7 +36315,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36154,11 +36338,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36199,6 +36396,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36211,7 +36414,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36238,6 +36447,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36300,9 +36516,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36318,13 +36541,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -36344,6 +36560,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36374,8 +36597,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36397,9 +36620,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36413,14 +36636,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36432,7 +36655,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36460,29 +36683,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36501,7 +36724,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36564,7 +36787,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36585,13 +36808,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36641,8 +36864,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36659,8 +36882,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36689,10 +36925,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36709,7 +36969,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36749,7 +37011,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36829,6 +37093,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36865,6 +37137,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36872,6 +37168,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36947,6 +37259,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38710,7 +39028,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40803,8 +41127,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47162,7 +47493,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47407,6 +47747,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47632,6 +47984,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47840,6 +48384,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48107,6 +48843,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49609,7 +50388,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51760,6 +52538,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53497,8 +54291,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55219,7 +56013,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61320,6 +62119,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61426,6 +62229,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62557,7 +63364,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66228,11 +67040,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66272,6 +67085,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71017,6 +71840,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74213,8 +75046,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74229,8 +75062,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -74248,8 +75086,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74267,6 +75105,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/fi.po b/doc/translations/fi.po index 316c56f70e..108f9f7780 100644 --- a/doc/translations/fi.po +++ b/doc/translations/fi.po @@ -422,7 +422,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3454,6 +3454,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3466,6 +3472,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8449,7 +8461,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8648,7 +8660,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8665,10 +8680,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8853,7 +8864,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13705,7 +13718,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19190,11 +19203,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Palauttaa parametrin sinin." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19480,6 +19497,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Palauttaa kahden vektorin jäännöksen." @@ -21420,9 +21444,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21433,9 +21471,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21548,11 +21595,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26199,7 +26265,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26221,7 +26288,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27035,6 +27103,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27085,6 +27159,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29477,7 +29555,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29626,10 +29704,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29823,24 +29897,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29876,6 +29932,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30183,8 +30257,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30447,9 +30521,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34761,9 +34835,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35562,6 +35637,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35584,10 +35664,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35622,6 +35714,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35638,8 +35736,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35667,7 +35769,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35737,6 +35849,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35761,7 +35877,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35780,6 +35899,12 @@ msgstr "Palauttaa parametrin kosinin." msgid "Sets the map active." msgstr "Palauttaa parametrin arkussinin." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35795,15 +35920,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Laskee kahden vektorin ristitulon." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Laskee kahden vektorin ristitulon." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Laskee kahden vektorin ristitulon." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Palauttaa parametrin sinin." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35814,6 +35985,11 @@ msgstr "Palauttaa parametrin vasta-arvon." msgid "Sets the global transformation for the region." msgstr "Laskee kahden vektorin ristitulon." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Laskee kahden vektorin ristitulon." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35823,9 +35999,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35843,7 +36026,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35859,11 +36050,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35905,6 +36109,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35917,7 +36127,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35944,6 +36160,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36006,9 +36229,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36025,13 +36255,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Palauttaa parametrin sinin." @@ -36052,6 +36275,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36082,8 +36312,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36106,9 +36336,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36122,14 +36352,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36141,7 +36371,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36169,29 +36399,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36210,7 +36440,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36273,7 +36503,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36295,13 +36525,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36351,8 +36581,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36370,8 +36600,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36400,10 +36643,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36420,7 +36687,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36461,7 +36730,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36542,6 +36813,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36578,6 +36857,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36585,6 +36888,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36664,6 +36983,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38427,7 +38752,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40528,8 +40859,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46884,7 +47222,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47129,6 +47476,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47354,6 +47713,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47562,6 +48113,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47829,6 +48572,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49331,7 +50117,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51480,6 +52265,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53217,8 +54018,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54940,7 +55741,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61056,6 +61862,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Palauttaa parametrin kosinin." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61162,6 +61973,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62293,7 +63108,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65979,11 +66799,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66023,6 +66844,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70787,6 +71618,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73988,8 +74829,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74004,11 +74845,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74023,8 +74870,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74041,6 +74888,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Palauttaa parametrin sinin." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/fil.po b/doc/translations/fil.po index 7da7a394ca..d34766797c 100644 --- a/doc/translations/fil.po +++ b/doc/translations/fil.po @@ -356,7 +356,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3388,6 +3388,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3400,6 +3406,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8375,7 +8387,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8574,7 +8586,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8591,10 +8606,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8779,7 +8790,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13622,7 +13635,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19097,11 +19110,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19387,6 +19403,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21325,9 +21348,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21338,9 +21375,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21453,11 +21499,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26095,7 +26160,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26117,7 +26183,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26923,6 +26990,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26973,6 +27046,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29363,7 +29440,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29512,10 +29589,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29709,24 +29782,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29762,6 +29817,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30069,8 +30142,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30333,9 +30406,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34641,9 +34714,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35441,6 +35515,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35463,10 +35541,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35501,6 +35591,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35517,8 +35613,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35546,7 +35646,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35610,6 +35720,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35633,7 +35747,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35650,6 +35767,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35665,14 +35788,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35681,6 +35846,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35690,9 +35859,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35710,7 +35886,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35725,11 +35909,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35770,6 +35967,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35782,7 +35985,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35809,6 +36018,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35871,9 +36087,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35889,13 +36112,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35915,6 +36131,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35945,8 +36168,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35968,9 +36191,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35984,14 +36207,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36003,7 +36226,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36031,29 +36254,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36072,7 +36295,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36135,7 +36358,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36156,13 +36379,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36212,8 +36435,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36230,8 +36453,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36260,10 +36496,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36280,7 +36540,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36320,7 +36582,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36400,6 +36664,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36436,6 +36708,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36443,6 +36739,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36518,6 +36830,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38281,7 +38599,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40374,8 +40698,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46721,7 +47052,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46966,6 +47306,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47191,6 +47543,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47399,6 +47943,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47666,6 +48402,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49168,7 +49947,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51315,6 +52093,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53052,8 +53846,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54774,7 +55568,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60875,6 +61674,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60981,6 +61784,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62112,7 +62919,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65783,11 +66595,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65827,6 +66640,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70572,6 +71395,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73768,8 +74601,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73784,8 +74617,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73803,8 +74641,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73822,6 +74660,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/fr.po b/doc/translations/fr.po index 587e9e0512..98f4921109 100644 --- a/doc/translations/fr.po +++ b/doc/translations/fr.po @@ -61,7 +61,7 @@ msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-08 05:20+0000\n" +"PO-Revision-Date: 2022-06-19 11:54+0000\n" "Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/fr/>\n" @@ -70,7 +70,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -548,9 +548,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4404,6 +4405,15 @@ msgid "" "specified by appending [code]:integer[/code] to the name, e.g. [code]\"Zero," "One,Three:3,Four,Six:6\"[/code]." msgstr "" +"Indique qu'une propriété d'un entier, un flottant ou une chaine de " +"caractères est une valeur énumérée à choisir depuis une liste spécifiée par " +"l'indicateur.\n" +"Cet indicateur est une liste séparée par des virgules de noms tels que " +"[code]\"Bonjour,Salut,Autre\"[/code]. Pour les propriétés d'entiers et de " +"flottants, le premier nom de la liste a valeur 0, le suivant 1, et ainsi de " +"suite. Les valeurs explicites peuvent également être spécifiées en ajoutant " +"[code]:integer[/code] au nom, par ex. [code]\"Zéro,Un,Trois:3,Quatre," +"Six:6\"[/code]." #: doc/classes/@GlobalScope.xml msgid "" @@ -4462,6 +4472,15 @@ msgstr "" "les couches de physique 2D optionnellement nommées." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"Indique qu'une propriété nombre entier est un masque de bits utilisant les " +"couches de rendu 2D optionnellement nommées." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4478,6 +4497,15 @@ msgstr "" "couches de physique 3D optionnellement nommées." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"Indique qu'une propriété nombre entier est un masque de bits utilisant les " +"couches de rendu 2D optionnellement nommées." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -4947,6 +4975,15 @@ msgid "" "var box2 = box.expand(Vector3(0, -1, 2))\n" "[/codeblock]" msgstr "" +"Retourne une copie de ce [AABB] aggrandi pour inclure le point donné.\n" +"[b]Exemple :[/b]\n" +"[codeblock]\n" +"# position -(3, 2, 0,) taille (1, 1, 1)\n" +"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n" +"# position -(3, -1, 0,) taille (3, 4, 2,), il contient maintenant l'ABB " +"original et le point Vector3(0, -1, 2)\n" +"var box2 = box.expand(Vector3(0, -1, 2))\n" +"/[codeblock]" #: doc/classes/AABB.xml msgid "Returns the volume of the [AABB]." @@ -4957,6 +4994,8 @@ msgid "" "Returns the center of the [AABB], which is equal to [member position] + " "([member size] / 2)." msgstr "" +"Retourne le centre du [AABB], qui est égal à [member position] + ([member " +"size] / 2)." #: doc/classes/AABB.xml msgid "Gets the position of the 8 endpoints of the [AABB] in space." @@ -5138,6 +5177,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"Retourne le label utilisé pour le texte intégré.\n" +"[b]Avertissement :[/b] Il s'agit d'un nÅ“ud interne nécessaire, le retirer et " +"le libérer peut causer un plantage. Si vous voulez le cacher lui ou l'un de " +"ses enfants, utilisez plutôt [membre CanvasItem.visible]." #: doc/classes/AcceptDialog.xml msgid "" @@ -5146,6 +5189,10 @@ msgid "" "may cause a crash. If you wish to hide it or any of its children, use their " "[member CanvasItem.visible] property." msgstr "" +"Retourne l'instance du [Button] \"OK\".\n" +"[b]Avertissement :[/b] Il s'agit d'un nÅ“ud interne nécessaire, le retirer et " +"le libérer peut causer un plantage. Si vous voulez le cacher lui ou l'un de " +"ses enfants, utilisez plutôt [membre CanvasItem.visible]." #: doc/classes/AcceptDialog.xml msgid "" @@ -7549,6 +7596,20 @@ msgid "" "time this is called, they may be updated too early. To perform the update " "immediately, call [code]advance(0)[/code]." msgstr "" +"Joue l'animation avec la clé [code]name[/code]. Les temps de mélange et la " +"vitesse peuvent être définis. Si [code]custom_speed[/code] est négatif et " +"[code]from_end[/code] est [code]true[/code], l'animation se joué à l'envers " +"et depuis la fin (qui est équivalent à appeler [method play_backwards)].\n" +"Le [AnimationPlayer] garde la trace de son animation actuelle ou la dernière " +"avec [member assigned_animation]. Si cette méthode est appelée avec cette " +"même animation nommée [code]name[/code], ou sans paramètre [code]name[/" +"code], l'animation assignée reprendra le jeu si elle a été interrompue, ou " +"redémarrer si elle a été arrêtée (voir [method stop] pour mettre en pause et " +"arrêter). Si l'animation jouait déjà , elle continuera d'être jouée.\n" +"[b]Note :[/b] L'animation sera mise à jour la prochaine fois que " +"[AnimationPlayer] sera traitée. Si d'autres variables sont mises à jour en " +"même temps, elles peuvent être mises à jour trop tôt. Pour effectuer une " +"mise à jour immédiate, appelez [code]advance(0)[/code]." #: doc/classes/AnimationPlayer.xml msgid "" @@ -7595,6 +7656,14 @@ msgid "" "animation_finished]. If you want to skip animation and emit the signal, use " "[method advance]." msgstr "" +"Avance la lecture de l'animation à la position [code]secondes[/code] dans le " +"temps (en secondes). Si [code]update[/code] est [code]true[/code], " +"l'animation se mettra à jour, sinon elle le sera au moment du traitement. " +"Les événements entre la trame actuel et la position [code]secondes[/code] " +"sont ignorés.\n" +"[b]Note :[/b] Aller à la fin de l'animation n'émet pas le signal [signal " +"animation_finished]. Si vous voulez sauter l'animation et émettre le signal, " +"utilisez plutôt [method advance]." #: doc/classes/AnimationPlayer.xml msgid "" @@ -8486,6 +8555,9 @@ msgid "" "multiplies the gravity vector. This is useful to alter the force of gravity " "without altering its direction." msgstr "" +"L'intensité de la gravité (en mètres par seconde au carré). Cette valeur " +"multiplie le vecteur de gravité. Ceci est utile pour modifier la force de la " +"gravité sans modifier sa direction." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" @@ -8498,6 +8570,8 @@ msgid "" "If [code]true[/code], gravity is calculated from a point (set via [member " "gravity_vec]). See also [member space_override]." msgstr "" +"Si [code]true[/code], la gravité est calculée à partir d'un point (set via " +"[member gravity_vec)]. Voir aussi [member space_override]." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" @@ -8544,16 +8618,21 @@ msgstr "" #: doc/classes/Area.xml msgid "If [code]true[/code], the area applies reverb to its associated audio." msgstr "" +"Si [code]true[/code], la zone applique de la réverbération à l'audio qui lui " +"est associé." #: doc/classes/Area.xml msgid "The reverb bus name to use for this area's associated audio." msgstr "" +"Le nom de bus de réverbération à utiliser pour l'audio associé à cette aire." #: doc/classes/Area.xml msgid "" "The degree to which this area's reverb is a uniform effect. Ranges from " "[code]0[/code] to [code]1[/code] with [code]0.1[/code] precision." msgstr "" +"Le degré de réverbération de cette zone est un effet uniforme. L'intervalle " +"va de [code]0[/code] à [code]1[/code] avec une précision de [code]0.1[/code]." #: doc/classes/Area.xml doc/classes/Area2D.xml msgid "" @@ -8709,6 +8788,14 @@ msgid "" "list is modified once during the physics step, not immediately after objects " "are moved. Consider using signals instead." msgstr "" +"Retourne une liste des [Area2D] qui s'intersectent. Le [member " +"CollisionObject2D.collision_layer] de l'aire intersectant doit faire partie " +"du [membre CollisionObject2D.collision_mask] de cette aire pour être " +"détecté.\n" +"Pour des raisons de performance (les colonnes sont toutes traitées en même " +"temps) cette liste est modifiée une fois pendant l'étape physique, pas " +"immédiatement après le déplacement des objets. Considérez plutôt utiliser " +"des signaux." #: doc/classes/Area2D.xml msgid "" @@ -8806,6 +8893,18 @@ msgid "" "used by the [Physics2DServer]. Get the [CollisionShape2D] node with " "[code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" +"Émis lorsque l'une des [Shape2D] de l'autre Area2D entre dans l'une des " +"[Shape2D] de cette Area2D. Nécessite [member monitoring] d'être définie à " +"[code]true[/code].\n" +"[code]area_rid[/code] le [RID] du [CollisionObject2D] de l'autre Area2D " +"utilisé par [Physics2DServer].\n" +"[code]area[/code] l'autre Area2D.\n" +"[code]area_shape_index[/code] l'index de la [Shape2D] de l'autre Area2D " +"utilisée par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec " +"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n" +"[code]local_shape_index[/code] l'index de la [Shape2D] de cette Area2D " +"utilisée par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec " +"[code]self.shape_owner_get_owner(local_shape_index)[/code]." #: doc/classes/Area2D.xml msgid "" @@ -8821,6 +8920,18 @@ msgid "" "used by the [Physics2DServer]. Get the [CollisionShape2D] node with " "[code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" +"Émis lorsque l'une des [Shape2D] de l'autre Area2D quitte l'une des " +"[Shape2D] de cette Area2D. Nécessite [member monitoring] d'être définie à " +"[code]true[/code].\n" +"[code]area_rid[/code] le [RID] du [CollisionObject2D] de l'autre Area2D " +"utilisé par [Physics2DServer].\n" +"[code]area[/code] l'autre Area2D.\n" +"[code]area_shape_index[/code] l'index de la [Shape2D] de l'autre Area2D " +"utilisée par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec " +"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n" +"[code]local_shape_index[/code] l'index de la [Shape2D] de cette Area2D " +"utilisée par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec " +"[code]self.shape_owner_get_owner(local_shape_index)[/code]." #: doc/classes/Area2D.xml msgid "" @@ -8858,6 +8969,21 @@ msgid "" "used by the [Physics2DServer]. Get the [CollisionShape2D] node with " "[code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" +"Émis quand une des [Shape2D] d'un [PhysicsBody2D] ou d'une [TileMap] entre " +"dans une des [Shape2D] de cette Area2D. Nécessite [member monitoring] à " +"[code]true[/code]. Les [TileMap] sont détectées si le [TileSet] a une " +"[Shape2D] de collision.\n" +"[code]body_rid[/code] le [RID] du [CollisionObject2D] du [PhysicsBody2D] ou " +"du [TileSet] utilisé par le [Physics2DServer].\n" +"[code]body[/code] le [Node], s'il existe dans l'arborescence, du " +"[PhysicsBody2D] ou du [TileMap].\n" +"[code]body_shape_index[/code] l'index de la [Shape2D] du [PhysicsBody2D] ou " +"du [TileMap] utilisé par le [Physics2DServer]. Obtenez le nÅ“ud " +"[CollisionShape2D] avec [code]body.shape_owner_get_owner(body_shape_index)[/" +"code].\n" +"[code]local_shape_index[/code] l'index de la [Shape2D] de ce Area2D utilisée " +"par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec [code]self." +"shape_owner_get_owner(local_shape_index)[/code]." #: doc/classes/Area2D.xml msgid "" @@ -8877,6 +9003,21 @@ msgid "" "used by the [Physics2DServer]. Get the [CollisionShape2D] node with " "[code]self.shape_owner_get_owner(local_shape_index)[/code]." msgstr "" +"Émis quand une des [Shape2D] d'un [PhysicsBody2D] ou d'une [TileMap] quitte " +"une des [Shape2D] de cette Area2D. Nécessite [member monitoring] à " +"[code]true[/code]. Les [TileMap] sont détectées si le [TileSet] a une " +"[Shape2D] de collision.\n" +"[code]body_rid[/code] le [RID] du [CollisionObject2D] du [PhysicsBody2D] ou " +"du [TileSet] utilisé par le [Physics2DServer].\n" +"[code]body[/code] le [Node], s'il existe dans l'arborescence, du " +"[PhysicsBody2D] ou du [TileMap].\n" +"[code]body_shape_index[/code] l'index de la [Shape2D] du [PhysicsBody2D] ou " +"du [TileMap] utilisé par le [Physics2DServer]. Obtenez le nÅ“ud " +"[CollisionShape2D] avec [code]body.shape_owner_get_owner(body_shape_index)[/" +"code].\n" +"[code]local_shape_index[/code] l'index de la [Shape2D] de ce Area2D utilisée " +"par [Physics2DServer]. Obtenez le nÅ“ud [CollisionShape2D] avec [code]self." +"shape_owner_get_owner(local_shape_index)[/code]." #: doc/classes/Array.xml msgid "A generic array datatype." @@ -9027,6 +9168,14 @@ msgid "" "[b]Note:[/b] Calling [method bsearch] on an unsorted array results in " "unexpected behavior." msgstr "" +"Cherche la position d'une valeur existante (ou la position d'insertion qui " +"maintient l'ordre de tri, si la valeur n'est pas encore présente dans le " +"tableau) en utilisant la recherche d'arbre binaire. En option, la valeur " +"[code]before[/code] peut être passé. Si [code]false[/code], la position " +"retournée vient après toutes les entrées existantes de la valeur dans le " +"tableau.\n" +"[b]Note :[/b] Appeler [method bsearch] sur un tableau non trié provoque un " +"comportement inattendu." #: doc/classes/Array.xml msgid "" @@ -9127,6 +9276,14 @@ msgid "" "modifying a sub-array or dictionary in the copy will also impact those " "referenced in the source array." msgstr "" +"Retourne une copie du tableau.\n" +"Si [code]deep[/code] est [code]true[/code], une copie profonde est " +"effectuée : tous les sous-tableaux et les sous-dictionnaires sont copié et " +"ne seront pas partagés avec le tableau d'origine. Si [code]false[/code], une " +"copie de surface est faite et les références aux tableaux et aux " +"dictionnaires originaux sont conservés, de sorte que la modification d'un " +"sous-tableau ou d'un sous-dictionnaire dans la copie modifiera aussi ceux " +"référencés dans le tableau d'origine." #: doc/classes/Array.xml doc/classes/PoolByteArray.xml #: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml @@ -9204,6 +9361,11 @@ msgid "" "[/code]. If the array is empty, accessing by index will pause project " "execution when running from the editor." msgstr "" +"Renvoie le premier élément du tableau. Affiche une erreur et retourne " +"[code]null[/code] si le tableau est vide.\n" +"[b]Note :[/b] L'appel de cette fonction n'est pas le même que d'écrire " +"[code]array[0][/code]. Si le tableau est vide, accéder à un élément par sa " +"position va suspendre l'exécution de projet depuis l'éditeur." #: doc/classes/Array.xml msgid "" @@ -9246,6 +9408,13 @@ msgid "" "does [i]not[/i] imply the arrays are equal, because different arrays can " "have identical hash values due to hash collisions." msgstr "" +"Renvoie entier 32 bits de chachage représentant le tableau ainsi que son " +"contenu.\n" +"[b]Note :[/b] Les [Array] avec le même contenu produira toujours la même " +"hachage. Cependant, la réciproque n'est pas vrai. Retourner un hachage " +"identiques [i]n'implique pas[/i] que les tableaux ont le même contenu, car " +"différents tableaux peuvent avoir des hachages identiques à cause des " +"collisions des hachages." #: doc/classes/Array.xml msgid "" @@ -9277,6 +9446,9 @@ msgid "" "comparable types. If the elements can't be compared, [code]null[/code] is " "returned." msgstr "" +"Retourne la valeur maximale contenue dans le tableau si tous les éléments " +"peuvent être comparés entre eux. Si les éléments ne peuvent pas être " +"comparés, [code]null[/code] est retourné." #: doc/classes/Array.xml msgid "" @@ -9284,6 +9456,9 @@ msgid "" "comparable types. If the elements can't be compared, [code]null[/code] is " "returned." msgstr "" +"Retourne la valeur minimale contenue dans le tableau si tous les éléments " +"peuvent être comparés entre eux. Si les éléments ne peuvent pas être " +"comparés, [code]null[/code] est retourné." #: doc/classes/Array.xml msgid "" @@ -9297,6 +9472,16 @@ msgid "" "removed element. The larger the array and the lower the index of the removed " "element, the slower [method pop_at] will be." msgstr "" +"Retire et retourne l'élément du tableau à la [code]position[/code]. Si " +"négatif, [code]position[/code] part de la la fin du tableau vers le début. " +"Laisse le tableau intact et retourne [code]null[/code] si le tableau est " +"vide ou s'il la position est en dehors des limites du tableau. Un message " +"d'erreur est affiché lorsque la position est en dehors des limites du " +"tableau, mais pas lorsque le tableau est vide.\n" +"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente " +"que [method pop_back] car elle réindexera les éléments du tableau qui sont " +"situés après l'élément enlevé. Plus le tableau est grand et plus la position " +"de l'élément enlevé, plus [method pop_at] sera lent." #: doc/classes/Array.xml msgid "" @@ -9304,6 +9489,9 @@ msgid "" "if the array is empty, without printing an error message. See also [method " "pop_front]." msgstr "" +"Retire et retourne le dernier élément du tableau. Retourne [code]null[/code] " +"si le tableau est vide, sans affiche de message d'erreur. Voir aussi [method " +"pop_front]." #: doc/classes/Array.xml msgid "" @@ -9314,6 +9502,13 @@ msgid "" "pop_back] as it will reindex all the array's elements every time it's " "called. The larger the array, the slower [method pop_front] will be." msgstr "" +"Retire et retourne le premier élément du tableau. Retourne [code]null[/code] " +"si le tableau est vide, sans afficher de message d'erreur. Voir aussi " +"[method pop_back].\n" +"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente " +"que [method pop_back] car elle réindexera les éléments du tableau suivants " +"chaque fois qu'elle est appelée. Plus le tableau est grand et plus la " +"position de l'élément enlevé, plus [method pop_front] sera lent." #: doc/classes/Array.xml msgid "" @@ -9327,6 +9522,11 @@ msgid "" "push_back] as it will reindex all the array's elements every time it's " "called. The larger the array, the slower [method push_front] will be." msgstr "" +"Ajoute un élément au début du tableau. Voir aussi [method push_back].\n" +"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente " +"que [method push_back] car elle réindexera les éléments du tableau suivants " +"chaque fois qu'elle est appelée. Plus le tableau est grand et plus la " +"position de l'élément enlevé, plus [method push_front] sera lent." #: doc/classes/Array.xml msgid "" @@ -9338,6 +9538,13 @@ msgid "" "element is close to the beginning of the array (index 0). This is because " "all elements placed after the removed element have to be reindexed." msgstr "" +"Retire un élément du tableau par index. Si l'index n'existe pas dans le " +"tableau, rien ne se passe. Pour supprimer un élément en recherchant sa " +"valeur, utilisez plutôt [method erase].\n" +"[b]Note :[/b] Cette méthode ne renvoie pas une valeur.\n" +"[b]Note :[/b] Sur de grands tableaux, cette méthode sera plus lente si " +"l'élément enlevé est proche du début du tableau (index 0). C'est parce que " +"tous les éléments placés après l'élément enlevé doivent être réindexés." #: doc/classes/Array.xml msgid "" @@ -9345,6 +9552,10 @@ msgid "" "size is smaller, elements are cleared, if bigger, new elements are " "[code]null[/code]." msgstr "" +"Redimensionne le tableau pour contenir un nombre différent d'éléments. Si la " +"taille du tableau est plus petite, les éléments en trop seront effacés, et " +"si la taille est plus grande, les nouveaux éléments seront à [code]null[/" +"code]." #: doc/classes/Array.xml doc/classes/PoolByteArray.xml #: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml @@ -9369,6 +9580,11 @@ msgid "" "@GDScript.randi]. Call [method @GDScript.randomize] to ensure that a new " "seed will be used each time if you want non-reproducible shuffling." msgstr "" +"Trie le tableau de sorte que tous les éléments auront une position " +"aléatoire. Cette méthode utilise le générateur de nombres aléatoires global " +"commun aux méthodes comme [method @GDScript.randi]. Appelez [méthod " +"@GDScript.randomize] pour s'assurer qu'une nouvelle graine sera utilisée à " +"chaque fois si vous voulez toujours des séquences de tri aléatoires." #: doc/classes/Array.xml doc/classes/PoolByteArray.xml #: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml @@ -9384,6 +9600,11 @@ msgid "" "and upper index are inclusive, with the [code]step[/code] describing the " "change between indices while slicing." msgstr "" +"Duplique le sous-ensemble décrit dans la fonction et le renvoie dans un " +"tableau, en recopiant le tableau en profondeur si [code]deep[/code] est " +"[code]true[/code]. Les indices inférieur et supérieur sont inclus, avec le " +"[code]step[/code] décrivant le changement entre les indices pendant le " +"découpage." #: doc/classes/Array.xml msgid "" @@ -9397,6 +9618,17 @@ msgid "" "print(strings) # Prints [string1, string10, string11, string2]\n" "[/codeblock]" msgstr "" +"Trie le tableau.\n" +"[b]Note :[/b] Les chaines sont triées par ordre alphabétique (par opposition " +"à l'ordre naturel). Cela peut conduire à un comportement inattendu lors du " +"tri d'un tableau de chaînes se terminant par des nombres. Examinez l'exemple " +"suivant :\n" +"[codeblock]\n" +"var strings = [\"string1\", \"string2\", \"string10\", \"string11\"]\n" +"strings.sort)(\n" +"print(strings) # Affiche [string1, string10, string11, string2], parce que " +"la chaine \"1...\" est avant \"2...\"\n" +"[/codeblock]" #: doc/classes/Array.xml msgid "" @@ -9422,11 +9654,34 @@ msgid "" "print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n" "[/codeblock]" msgstr "" +"Trie le tableau en utilisant une méthode personnalisée. Les arguments sont " +"un objet qui détient la méthode et le nom de cette méthode. La méthode " +"personnalisée reçoit deux arguments (une paire d'éléments du tableau) et " +"doit retourner soit [code]true[/code] ou [code]false[/code].\n" +"Pour deux éléments [code]a[/code] et [code]b[/code], si la méthode donnée " +"retourne [code]true[/code], l'élément [code]b[/code] sera après élément " +"[code]a[/code] dans le tableau trié.\n" +"[b]Note :[/b] Vous ne pouvez pas retourner une valeur de comparaison " +"aléatoire car l'algorithme de tri s'attend à un résultat déterministe. Cela " +"entraînerait un comportement inattendu.\n" +"[codeblock]\n" +"class MyCustomSorter:\n" +" static func sort_ascending(a, b): # Par premier élément croissant\n" +" if a[0] < b[0]:\n" +" return true\n" +" return false\n" +"\n" +"var my_items = [[5, \"Pomme\"], [9, \"Abricot\"], [4, \"Tomate\"]]\n" +"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n" +"print(my_items) # Affiche [[4, Tomate], [5, Pomme], [9, Abricot]].\n" +"[/codeblock]" #: doc/classes/ArrayMesh.xml msgid "" "[Mesh] type that provides utility for constructing a surface from arrays." msgstr "" +"Le type [Mesh] qui fournit un utilitaire pour la construction d'une nouvelle " +"surface à partir de tableaux." #: doc/classes/ArrayMesh.xml msgid "" @@ -9504,10 +9759,25 @@ msgid "" "length as the vertex array or be empty, except for [constant ARRAY_INDEX] if " "it is used." msgstr "" +"Crée une nouvelle surface.\n" +"Les surfaces sont créées pour être rendues en utilisant une [code]primitive[/" +"code], qui peut être l'un des types définis dans [enum Mesh.PrimitiveType] " +"(Il est préférable lors de l'utilisation d'indices d'utiliser uniquement des " +"points, des lignes ou des triangles). [method Mesh.get_surface_count] " +"deviendra l'index [code]surf_idx[/code] pour cette nouvelle surface.\n" +"L'argument [code]arrays[/code] est un tableau de tableaux. Voir [enum " +"ArrayType] pour les valeurs utilisées dans ce tableau. Par exemple, " +"l'argument [code]arrays[/code] est le tableau des sommets. Ce premier sous-" +"tableau de sommets est nécessaire ; les autres sont facultatifs. L'ajout " +"d'un tableau d'indices met cette fonction en \"mode index\" où les sommets " +"et d'autres tableaux deviennent les sources de données et le tableau d'index " +"définit l'ordre des vertex. Tous les sous-tableau doivent avoir la même " +"longueur que le tableau des sommets, ou être vides, sauf pour [constant " +"ARRAY_INDEX] s'il est utilisé." #: doc/classes/ArrayMesh.xml msgid "Removes all blend shapes from this [ArrayMesh]." -msgstr "" +msgstr "Retire toutes les formes de mélange de ce [ArrayMesh]." #: doc/classes/ArrayMesh.xml msgid "Removes all surfaces from this [ArrayMesh]." @@ -9515,11 +9785,11 @@ msgstr "Retirer toutes les surfaces de ce [ArrayMesh]." #: doc/classes/ArrayMesh.xml msgid "Returns the number of blend shapes that the [ArrayMesh] holds." -msgstr "" +msgstr "Retourne le nombre de formes de mélange détenues par ce [ArrayMesh]." #: doc/classes/ArrayMesh.xml msgid "Returns the name of the blend shape at this index." -msgstr "" +msgstr "Retourne le nom de la forme du mélange à cette position." #: doc/classes/ArrayMesh.xml msgid "" @@ -9536,6 +9806,8 @@ msgid "" "Returns the index of the first surface with this name held within this " "[ArrayMesh]. If none are found, -1 is returned." msgstr "" +"Retourne l'index de la première surface avec ce nom dans ce [ArrayMesh]. Si " +"aucune surface n'existe, -1 est retourné." #: doc/classes/ArrayMesh.xml msgid "" @@ -9554,6 +9826,8 @@ msgid "" "Returns the format mask of the requested surface (see [method " "add_surface_from_arrays])." msgstr "" +"Retourne le masque de format de la surface demandée (voir [méthode " +"add_surface_from_arrays)]." #: doc/classes/ArrayMesh.xml msgid "Gets the name assigned to this surface." @@ -9564,6 +9838,8 @@ msgid "" "Returns the primitive type of the requested surface (see [method " "add_surface_from_arrays])." msgstr "" +"Retourne le type primitif de la surface demandée (voir [method " +"add_surface_from_arrays)]." #: doc/classes/ArrayMesh.xml msgid "" @@ -9583,6 +9859,11 @@ msgid "" "[b]Warning:[/b] Only use if you know what you are doing. You can easily " "cause crashes by calling this function with improper arguments." msgstr "" +"Met à jour une région spécifique de tableaux de maillage directement dans le " +"GPU.\n" +"[b]Avertissement :[/b] N'utilisez cette méthode que si vous savez ce que " +"vous faites. Vous pouvez facilement causer des plantages en appelant cette " +"fonction avec des arguments inappropriés." #: doc/classes/ArrayMesh.xml msgid "Sets the blend shape mode to one of [enum Mesh.BlendShapeMode]." @@ -9594,6 +9875,9 @@ msgid "" "Especially useful to avoid unexpected culling when using a shader to offset " "vertices." msgstr "" +"Surcharge le [AABB] avec celui défini par l'utilisateur pour le calcul du " +"culling d'affichage. Particulièrement utile pour éviter un culling inattendu " +"lors de l'utilisation d'un shader qui décale les sommets." #: doc/classes/ArrayMesh.xml #, fuzzy @@ -9621,6 +9905,9 @@ msgid "" "first 3 floats determine the tangent, and the last the binormal direction as " "-1 or 1." msgstr "" +"Le [PoolRealArray] de tangentes des sommets. Chaque élément est un groupe de " +"4 flottants, les 3 premiers déterminent la tangente, et le dernier la " +"direction binormale qui est soit -1 ou 1." #: doc/classes/ArrayMesh.xml msgid "[PoolColorArray] of vertex colors." @@ -9661,6 +9948,17 @@ msgid "" "vertices of each triangle. For lines, the index array is in pairs indicating " "the start and end of each line." msgstr "" +"Un [PoolIntArray] d'entiers utilisés comme indices référentiels de sommets, " +"de couleurs, de normales, de tangentes et de textures. Tous ces tableaux " +"doivent avoir le même nombre d'éléments que le tableau des sommets. Aucun " +"index ne peut dépasser la taille du tableau des sommets. Lorsque ce tableau " +"d'index est présent, il met la fonction en \"mode d'index\", où l'index " +"sélectionne les *n-ième* sommet, normal, tangent, couleur, UV, etc. Cela " +"signifie que si vous voulez avoir des normales ou des couleurs différentes " +"le long d'une arrête, vous devez doubler ces sommets.\n" +"Pour les triangles, le tableau d'index est interprété comme des trios, se " +"référant aux sommets de chaque triangle. Pour les lignes, le tableau d'index " +"contient des paires indiquant le point de début et de fin de chaque ligne." #: doc/classes/ArrayMesh.xml doc/classes/Mesh.xml doc/classes/VisualServer.xml msgid "Represents the size of the [enum ArrayType] enum." @@ -9722,6 +10020,20 @@ msgid "" "more about the real world out there especially if only part of the surface " "is in view." msgstr "" +"Le point [ARVRAnchor] est un nÅ“ud spatial qui cartographie un emplacement " +"réel du monde identifié par la plateforme AR à une position dans le monde du " +"jeu. Par exemple, tant que la détection des plans dans ARKit est activée, " +"ARKit identifiera et mettra à jour la position des plans (tables, planchers, " +"etc) et créera des ancrages pour eux.\n" +"Ce nÅ“ud est connecté à l'une des ancres à travers son identifiant unique. " +"Lorsque vous recevez un signal qu'une nouvelle ancre est disponible, vous " +"devez ajouter ce nÅ“ud à votre scène pour cette ancre. Vous pouvez prédéfinir " +"les nÅ“uds et définir l'identifiant ; les nÅ“uds resteront simplement sur " +"0,0,0 jusqu'à ce qu'un plan soit reconnu.\n" +"Gardez à l'esprit que, tant que la détection du plan est activée, la taille, " +"le placement et l'orientation d'une ancre seront mis à jour car la logique " +"de détection en apprend davantage sur le monde réel, surtout si une partie " +"seulement de la surface est en vue." #: doc/classes/ARVRAnchor.xml msgid "Returns the name given to this anchor." @@ -9732,6 +10044,8 @@ msgid "" "Returns [code]true[/code] if the anchor is being tracked and [code]false[/" "code] if no anchor with this ID is currently known." msgstr "" +"Retourne [code]true[/code] si l'ancre est suivie et [code]false[/code] si " +"aucune ancre avec cet identifiant n'est actuellement connue." #: doc/classes/ARVRAnchor.xml msgid "" @@ -9741,6 +10055,11 @@ msgid "" "can be used to create shadows/reflections on surfaces or for generating " "collision shapes." msgstr "" +"Si fourni par la [ARVRInterface], ça retourne un maillage pour l'ancre. Pour " +"une ancre, il peut s'agir d'une forme liée à l'objet suivi ou peut être une " +"maille qui fournit une topologie liée à l'ancre et qui peut être utilisée " +"pour créer des ombres ou des réflexions sur les surfaces ou pour générer des " +"formes de collision." #: doc/classes/ARVRAnchor.xml msgid "" @@ -9768,6 +10087,13 @@ msgid "" "when the AR server identifies that two anchors represent different parts of " "the same plane and merges them." msgstr "" +"L'identifiant de l'ancre. Vous pouvez la définir avant que cette ancre " +"existe. La première ancre obtient l'identifiant [code]1[/code], la seconde " +"[code]2[/code], etc. Lorsque les ancres sont enlevées, le moteur peut alors " +"attribuer l'identifiant correspondant aux nouvelles ancres. Le plus souvent " +"les ancres \"disparaissent\" quand le serveur AR identifie que deux ancres " +"représentent différentes parties d'un même plan et décide alors de les " +"fusionner." #: doc/classes/ARVRAnchor.xml msgid "" @@ -9801,6 +10127,17 @@ msgid "" "tracking data of the HMD and the location of the ARVRCamera can lag a few " "milliseconds behind what is used for rendering as a result." msgstr "" +"Il s'agit d'un nÅ“ud d'aide spatiale pour notre caméra ; notez que, si le " +"rendu stéréoscopique est applicable (VR-HMD), la plupart des propriétés de " +"la caméra sont ignorées, car l'information HMD les annule. Les seules " +"propriétés qui peuvent être fiables sont les plans proches et lointains.\n" +"La position et l'orientation de ce nÅ“ud sont automatiquement mises à jour " +"par le serveur ARVR pour représenter l'emplacement du HMD si ce suivi est " +"disponible et peut donc être utilisé par la logique du jeu. Notez que, " +"contrairement au contrôleur ARVR, le fil d'exécution pour le rendu a accès " +"aux données de suivi les plus récentes de la HMD et l'emplacement de " +"l'ARVRCamera peut retarder l'accès de ces données au rendu de quelques " +"millisecondes." #: doc/classes/ARVRController.xml msgid "A spatial node representing a spatially-tracked controller." @@ -9821,6 +10158,19 @@ msgid "" "[ARVRServer]. This makes this node ideal to add child nodes to visualize the " "controller." msgstr "" +"C'est un nÅ“ud d'aide spatiale qui est lié au suivi des contrôleurs. Il offre " +"également plusieurs liens utiles à l'état des boutons et commandes des " +"contrôleurs.\n" +"Les contrôleurs sont liés par leur identifiant. Vous pouvez créer des nÅ“uds " +"de contrôleur avant même que les contrôleurs ne soient disponibles. Si votre " +"jeu utilise toujours deux contrôleurs (un pour chaque main), vous pouvez " +"prédéfinir les contrôleurs avec les identfiant 1 et 2 ; ils deviendront " +"actifs dès que les contrôleurs seront identifiés. Si vous attendez que des " +"contrôleurs supplémentaires soient utilisés, vous devez réagir aux signaux " +"et ajouter des nÅ“uds ARVRController à votre scène.\n" +"La position du nÅ“ud de contrôleur est automatiquement mise à jour par le " +"[ARVRServer]. Cela rend ce nÅ“ud idéal pour ajouter des nÅ“uds pour visualiser " +"le contrôleur." #: doc/classes/ARVRController.xml msgid "" @@ -9831,7 +10181,6 @@ msgstr "" "AR / VR utilisé." #: doc/classes/ARVRController.xml -#, fuzzy msgid "" "Returns the hand holding this controller, if known. See [enum " "ARVRPositionalTracker.TrackerHand]." @@ -9864,6 +10213,13 @@ msgid "" "the AR/VR controllers. This ID is purely offered as information so you can " "link up the controller with its joystick entry." msgstr "" +"Renvoie l'identifiant de l'objet joystick qui est lié. Chaque contrôleur " +"suivi par le [ARVRServer] qui a des boutons et un axe sera également " +"enregistré comme un joystick dans Godot. Cela signifie que tout le suivi " +"normal des joysticks et la gestion des entrées fonctionnera pour les boutons " +"et axes trouvés sur les contrôleurs AR/VR. Cet identifiant est seulement " +"disponible pour que vous puissiez lier le contrôleur avec son entrée de " +"joystick." #: doc/classes/ARVRController.xml msgid "" @@ -9874,14 +10230,14 @@ msgstr "" "contrôleur. Ceci peut être utilisé pour visualiser le contrôleur." #: doc/classes/ARVRController.xml -#, fuzzy msgid "" "Returns [code]true[/code] if the button at index [code]button[/code] is " "pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] " "constants." msgstr "" -"Rentourne [code]true[/code] (vrai) si le bouton d'index [code]button[/code] " -"est préssé. Voir [enum JoyButtonList]." +"Retourne [code]true[/code] si le bouton d'index [code]button[/code] est " +"appuyé. Voir [enum JoyButtonList], et surtout les constantes [code]JOY_VR_*[/" +"code]." #: doc/classes/ARVRController.xml msgid "" @@ -9895,6 +10251,16 @@ msgid "" "When a controller is turned off, its slot is freed. This ensures controllers " "will keep the same ID even when controllers with lower IDs are turned off." msgstr "" +"ID du contrôleur.\n" +"Un identifiant de contrôleur à 0 est déconnecté et entraînera toujours un " +"nÅ“ud inactif. L'identifiant de contrôleur 1 est réservé au premier " +"contrôleur qui s'identifie comme le contrôleur gauche et l'identifiant 2 aux " +"contrôleur droit.\n" +"Pour tout autre contrôleur que le [ARVRServer] détecte, les identifiants des " +"contrôleurs continueront à partir de 3.\n" +"Lorsqu'un contrôleur est éteint, son emplacement est libéré. Cela assure que " +"les contrôleurs garderont le même identifiant même si un contrôleur avec un " +"identifiant inférieur est éteint." #: doc/classes/ARVRController.xml msgid "" @@ -9904,6 +10270,11 @@ msgid "" "This is a useful property to animate if you want the controller to vibrate " "for a limited duration." msgstr "" +"L'intensité de vibration du contrôleur. L'intervalle va de [code]0.0[/code] " +"à [code]1.0[/code] avec une précision de [code]0.01[/code]. Si changé, met à " +"jour [membrez ARVRPositionalTracker.rumble] en conséquence.\n" +"C'est une propriété utile à animer si vous souhaitez que le contrôleur vibre " +"pendant une durée limitée." #: doc/classes/ARVRController.xml msgid "Emitted when a button on this controller is pressed." @@ -9938,6 +10309,15 @@ msgid "" "give us a working setup. You can query the available interfaces through " "[ARVRServer]." msgstr "" +"Cette classe doit être implémentée pour rendre une plateforme AR ou VR " +"disponible dans Godot et ces modules devraient être implémentés avec des " +"modules C+ ou GDNative (notez que pour GDNative, la sous-classe " +"ARVRScriptInterface devrait être utilisée). Une partie de l'interface est " +"exposée à GDScript afin que vous puissiez détecter, activer et configurer " +"une plateforme AR ou VR.\n" +"Les interfaces doivent être écrites de telle manière qu'elles permettent de " +"fonctionner simplement. Vous pouvez rechercher les interfaces disponibles " +"via [ARVRServer]." #: doc/classes/ARVRInterface.xml msgid "" @@ -9976,6 +10356,8 @@ msgid "" "provide feedback to the user whether there are issues with positional " "tracking." msgstr "" +"Si supporté, retourne l'état de notre suivi. Cela vous permettra de fournir " +"des retours à l'utilisateur s'il y a des problèmes avec le suivi de position." #: doc/classes/ARVRInterface.xml msgid "" @@ -9996,6 +10378,25 @@ msgid "" "wish to do this if you want to track controllers from other platforms. " "However, at this point in time only one interface can render to an HMD." msgstr "" +"Appelez ceci pour initialiser cette interface. La première interface qui est " +"initialisée est identifiée comme l'interface primaire et elle sera utilisée " +"pour faire le rendu de la sortie.\n" +"Après l'initialisation de l'interface que vous souhaitez utiliser, vous " +"devez activer le mode AR/VR d'un viseur et le rendu devrait commencer.\n" +"[b]Note :[/b] Vous devez activer le mode AR/VR sur le point de vue principal " +"pour tout appareil qui utilise la sortie principale de Godot, comme pour la " +"VR mobile.\n" +"Si vous faites cela pour une plate-forme qui gère sa propre sortie (comme " +"OpenVR), Godot affichera juste un des yeux sans distorsion à l'écran. " +"Alternativement, vous pouvez ajouter une fenêtre d'affichage séparée à votre " +"scène et activer AR/VR sur cette fenêtre de d'affichage. Elle sera utilisée " +"pour sortir HMD, vous permettant d'utiliser la fenêtre principale pour tout " +"autre utilisation, comme l'utilisation d'une caméra séparée comme pour un " +"spectateur ou faire un rendu complètement différent.\n" +"Bien que non utilisé pour l'instant, vous pouvez activer des interfaces " +"supplémentaires. Vous pouvez le faire si vous voulez suivre les contrôleurs " +"venant d'autres plateformes. Cependant, actuellement, une seule interface " +"peut rendre un HMD." #: doc/classes/ARVRInterface.xml msgid "" @@ -10069,12 +10470,18 @@ msgid "" "Left eye output, this is mostly used internally when rendering the image for " "the left eye and obtaining positioning and projection information." msgstr "" +"Sortie de l'Å“il gauche, cela est principalement utilisé à l'interne pour " +"rendre l'image pour l'Å“il gauche et obtenir des informations de " +"positionnement et de projection." #: doc/classes/ARVRInterface.xml msgid "" "Right eye output, this is mostly used internally when rendering the image " "for the right eye and obtaining positioning and projection information." msgstr "" +"La sortie de l'Å“il droit, c'est principalement utilisé à l'interne pour " +"rendre l'image pour l'Å“il droit et obtenir des informations de " +"positionnement et de projection." #: doc/classes/ARVRInterface.xml msgid "Tracking is behaving as expected." @@ -10085,6 +10492,8 @@ msgid "" "Tracking is hindered by excessive motion (the player is moving faster than " "tracking can keep up)." 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)." #: doc/classes/ARVRInterface.xml msgid "" @@ -10097,12 +10506,16 @@ msgid "" "We don't know the status of the tracking or this interface does not provide " "feedback." msgstr "" +"Nous ne connaissons pas l'état du suivi, ou alors cette interface ne fournit " +"aucune indication." #: doc/classes/ARVRInterface.xml msgid "" "Tracking is not functional (camera not plugged in or obscured, lighthouses " "turned off, etc.)." msgstr "" +"Le suivi n'est pas fonctionnel (la caméra n'est pas branchée ou cachée, les " +"lumières sont éteintes, etc.)." #: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml #, fuzzy @@ -10157,6 +10570,9 @@ msgid "" "assume a scale of 1 game world unit = 1 real world meter.\n" "[b]Note:[/b] This method is a passthrough to the [ARVRServer] itself." msgstr "" +"Vous permet d'ajuster l'échelle à vos unités de votre game. La plupart des " +"plateformes AR/VR assument une échelle de 1 unité jeu = 1 mètre réel.\n" +"[b]Note :[/b] Cette méthode est un passage direct au [ARVRServer]." #: doc/classes/ARVRPositionalTracker.xml msgid "A tracked object." @@ -10192,12 +10608,16 @@ msgid "" "Returns the hand holding this tracker, if known. See [enum TrackerHand] " "constants." msgstr "" +"Retourne la main tenant ce traqueur, si connu. Voir les constantes [enum " +"TrackerHand]." #: doc/classes/ARVRPositionalTracker.xml msgid "" "If this is a controller that is being tracked, the controller will also be " "represented by a joystick entry with this ID." msgstr "" +"Si c'est un contrôleur qui est suivi, le contrôleur sera également " +"représenté par une entrée de joystick avec cet identifiant." #: doc/classes/ARVRPositionalTracker.xml msgid "" @@ -10206,7 +10626,7 @@ msgstr "" #: doc/classes/ARVRPositionalTracker.xml msgid "Returns the controller or anchor point's name if available." -msgstr "" +msgstr "Retourne le nom du contrôleur ou du point d'ancrage, si disponible." #: doc/classes/ARVRPositionalTracker.xml msgid "Returns the controller's orientation matrix." @@ -10222,6 +10642,9 @@ msgid "" "tracker type and matches the ID you need to specify for nodes such as the " "[ARVRController] and [ARVRAnchor] nodes." msgstr "" +"Retourne l'identifiant de suivi interne. Cet identifiant est unique au " +"suiveur et correspond à l'identifiant que vous devez spécifier pour les " +"nÅ“uds tels que les nÅ“uds [ARVRController] et [ARVRAnchor]." #: doc/classes/ARVRPositionalTracker.xml msgid "Returns [code]true[/code] if this device tracks orientation." @@ -10249,7 +10672,7 @@ msgstr "" #: doc/classes/ARVRPositionalTracker.xml msgid "The hand this tracker is held in is unknown or not applicable." -msgstr "" +msgstr "La main de ce traqueur est inconnue ou sa valeur est invalide." #: doc/classes/ARVRPositionalTracker.xml msgid "This tracker is the left hand controller." @@ -10330,6 +10753,8 @@ msgstr "" msgid "" "Clears our current primary interface if it is set to the provided interface." msgstr "" +"Efface notre actuelle interface principale si elle est définie pour " +"l'interface donnée." #: doc/classes/ARVRServer.xml msgid "" @@ -10443,6 +10868,10 @@ msgid "" "important to react to this signal to add the appropriate [ARVRController] or " "[ARVRAnchor] nodes related to this new tracker." msgstr "" +"Émis quand un nouveau suiveur a été ajouté. Si vous n'utilisez pas un nombre " +"fixe de contrôleurs ou si vous utilisez [ARVRAnchor] pour une solution AR, " +"il est important de réagir à ce signal pour ajouter les nÅ“uds appropriés " +"[ARVRController] ou [ARVRAnchor] liés à ce nouveau suiveur." #: doc/classes/ARVRServer.xml msgid "" @@ -10452,6 +10881,11 @@ msgid "" "available (i.e. a new controller is switched on that takes the place of the " "previous one)." msgstr "" +"Émis quand une suiveur est retiré. Vous devez supprimer tout " +"[ARVRController] ou [ARVRAnchor] si nécessaire. Ce n'est pas non plus " +"obligatoire, les nÅ“uds deviennent tout simplement inactifs et seront de " +"nouveau actifs lorsqu'un nouveau suiveur sera disponible (quand un nouveau " +"contrôleur activé prendra la place du précédent)." #: doc/classes/ARVRServer.xml msgid "The tracker tracks the location of a controller." @@ -10520,6 +10954,10 @@ msgid "" "the container size is dynamic and the contents' size needs to adjust " "accordingly without losing proportions." msgstr "" +"Arrange les contrôles enfants pour préserver automatiquement leur aspect " +"lorsque le conteneur est redimensionné. Résout le problème où la taille du " +"conteneur est dynamique et la taille du contenu doit s'adapter en " +"conséquence sans perdre ses proportions." #: doc/classes/AspectRatioContainer.xml doc/classes/BoxContainer.xml #: doc/classes/CenterContainer.xml doc/classes/Container.xml @@ -10583,6 +11021,12 @@ msgid "" "and [member Control.rect_clip_content] is enabled, this allows to show only " "the container's area restricted by its own bounding rectangle." msgstr "" +"La largeur et la hauteur des contrôles enfants sont automatiquement ajustées " +"pour que leur rectangle englobant recouvre toute la zone du conteneur tout " +"en gardant le même aspect.\n" +"Lorsque le rectangle englobant des contrôles d'enfants dépasse la taille du " +"conteneur et que [member Control.rect_clip_content] est activé, cela permet " +"de limiter la visibilité à seulement la taille du conteneur." #: doc/classes/AspectRatioContainer.xml #, fuzzy @@ -10753,6 +11197,10 @@ msgid "" "[code]bidirectional[/code] is [code]false[/code], returns whether movement " "from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" +"Retourne si les deux points donnés sont directement reliés par un segment. " +"Si [code]bidirectionnel[/code] est [code]false[/code], retourne si le " +"mouvement d'identifiant [code]id[/code] vers l'autre identifiant " +"[code]to_id[/code] est possible par ce segment." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "Clears all the points and segments." @@ -10780,12 +11228,16 @@ msgstr "" "astar.connect_points(1, 2, false)\n" "[/codeblock]" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" "code] is prevented, and a unidirectional segment possibly remains." msgstr "" +"Supprime le segment entre les points donnés. Si [code]bidirectionnel[/code] " +"est [code]false[/code], seul le mouvement de l'identifiant [code]id[/code] " +"vers l'autre identifiant [code]to_id[/code] est bloqué, et un segment " +"unidirectionnel peut rester." #: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "Returns the next available point ID with no point associated to it." @@ -10802,6 +11254,12 @@ msgid "" "the one with the smallest ID will be returned, ensuring a deterministic " "result." msgstr "" +"Retourne l'identifiant du point le plus proche de [code]to_position[/code], " +"en prenant en compte les points désactivés en option. Retourne [code]-1[/" +"code] s'il n'y a pas de points dans l'ensemble de points.\n" +"[b]Note :[/b] Si plusieurs points sont proches de [code]to_position[/code], " +"celui avec le plus petit identifiant sera retourné, permettant d'obtenir un " +"résultat déterministe." #: doc/classes/AStar.xml msgid "" @@ -11059,8 +11517,16 @@ msgstr "" "position et sont facteur de poids seront mis à jour avec la valeur donnée." #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." -msgstr "Retourne s'il y a une connexion/segment entre les points spécifiés." +#, fuzzy +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." +msgstr "" +"Retourne si les deux points donnés sont directement reliés par un segment. " +"Si [code]bidirectionnel[/code] est [code]false[/code], retourne si le " +"mouvement d'identifiant [code]id[/code] vers l'autre identifiant " +"[code]to_id[/code] est possible par ce segment." #: doc/classes/AStar2D.xml msgid "" @@ -11085,10 +11551,6 @@ msgstr "" "[/codeblock]" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "Supprime le segment entre les points donnés." - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -11177,6 +11639,20 @@ msgid "" "var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n" "[/codeblock]" msgstr "" +"Retourne un tableau avec les identifiants des points qui forment la " +"connexion avec le point donné.\n" +"[codeblock]\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) # Retourne [2, 3]\n" +"[/codeblock]" #: doc/classes/AStar2D.xml msgid "" @@ -11217,6 +11693,23 @@ msgid "" "FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored " "when using an AtlasTexture." msgstr "" +"La ressource [Texture] qui ne continent qu'une partie de la texture [member " +"atlas], définie par [member region]. Le principal usage est de découper des " +"textures d'un atlas de texture, qui est un grand fichier de texture qui " +"contient plusieurs textures plus petites. Ça consiste en une [Texture] pour " +"le [member atlas], d'une [member region] qui définit la zone de [member " +"atlas] à utiliser, et une [member margin] qui définit la largeur de la " +"bordure autour.\n" +"[AtlasTexture] ne peut pas être utilisé dans une [AnimatedTexture], ne peut " +"pas être répéré dans les nÅ“uds tels que [TextureRect], et ne fonctionne pas " +"correctement si utilisé à l'intérieur d'autres [AtlasTexture]. Plusieurs " +"[AtlasTexture] peuvent être utilisées pour découper plusieurs textures de " +"l'atlas. L'utilisation d'un atlas de textures permet d'optimiser " +"l'utilisation de la mémoire vidéo en limiter les appels par rapport à " +"plusieurs petits fichiers.\n" +"[b]Note :[/b] AtlasTextures ne supporte pas les répétition. Les options " +"[constant Texture.FLAG_REPEAT] et [constant Texture.FLAG_MIRRORED_REPEAT] " +"sont ignorés pour les AtlasTexture." #: doc/classes/AtlasTexture.xml #, fuzzy @@ -11237,6 +11730,9 @@ msgid "" "(\"w\" and \"h\" in the editor) resizes the texture so it fits within the " "margin." msgstr "" +"La marge autour de la région. Le paramètre [membre Rect2.size] du [Rect2] " +"(\"w\" et \"h\" dans l'éditeur) redimensionne la texture de sorte qu'elle " +"correspond à cette marge." #: doc/classes/AtlasTexture.xml msgid "The AtlasTexture's used region." @@ -11276,13 +11772,15 @@ msgstr "" #: doc/classes/AudioEffectAmplify.xml msgid "Increases or decreases the volume being routed through the audio bus." -msgstr "" +msgstr "Augmente ou diminue le volume passé au bus audio." #: doc/classes/AudioEffectAmplify.xml msgid "" "Amount of amplification in decibels. Positive values make the sound louder, " "negative values make it quieter. Value can range from -80 to 24." msgstr "" +"La quantité d'amplification en décibels. Les valeurs positives augmentent le " +"son, les valeurs négatives le diminue. La valeur peut aller de -80 à 24 dB." #: doc/classes/AudioEffectBandLimitFilter.xml msgid "Adds a band limit filter to the audio bus." @@ -11315,7 +11813,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -11438,6 +11938,21 @@ msgid "" "- Accentuates transients by using a wider attack, making effects sound more " "punchy." msgstr "" +"Le compresseur dynamique d'intensité réduit le niveau du son lorsque le " +"volume dépasse un certain seuil de décibels. L'une des principales " +"utilisations d'un compresseur est d'augmenter la gamme dynamique en essayant " +"de saturer le moins possible le son (quand le son dépasse 0dB).\n" +"Le compresseur a de nombreuses utilisations dans les mélanges :\n" +"- Dans le bus \"Master\" pour compresser toute la sortie (même si un " +"[AudioEffectLimiter] est souvent plus adapté).\n" +"- Dans les canaux de voix pour s'assurer qu'ils sonnent aussi équilibré que " +"possible.\n" +"- Pour le \"Sidechained\". Cela peut réduire le niveau de son enchaînement " +"avec un autre bus audio pour la détection des seuils. Cette technique est " +"courante dans le jeu vidéo se mélangeant au niveau de la musique et SFX " +"tandis que les voix sont entendues.\n" +"- Accentue les transitions en utilisant une attaque plus grande, rendant les " +"effets sonores plus percutants." #: doc/classes/AudioEffectCompressor.xml msgid "" @@ -11680,6 +12195,18 @@ msgid "" "Band 10: 16000 Hz\n" "See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]." msgstr "" +"Bandes de fréquence :\n" +"Bande 1 : 31 Hz\n" +"Bande 2 : 62 Hz\n" +"Bande 3 : 125 Hz\n" +"Bande 4 : 250 Hz\n" +"Bande 5 : 500 Hz\n" +"Bande 6 : 1000 Hz\n" +"Bande 7 : 2000 Hz\n" +"Bande 8 : 4000 Hz\n" +"Bande 9 : 8000 Hz\n" +"Bande 10 : 16000 Hz\n" +"Voir aussi [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]." #: doc/classes/AudioEffectEQ21.xml msgid "" @@ -11756,6 +12283,14 @@ msgid "" "Band 6: 10000 Hz\n" "See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]." msgstr "" +"Bandes de fréquence :\n" +"Bande 1 : 32 Hz\n" +"Bande 2 : 100 Hz\n" +"Bande 3 : 320 Hz\n" +"Bande 4 : 1000 Hz\n" +"Bande 5 : 3200 Hz\n" +"Bande 6 : 10000 Hz\n" +"Voir aussi [AudioEffectEQ], [AudioEffectEQ10] et [AudioEffectEQ21]." #: doc/classes/AudioEffectFilter.xml msgid "Adds a filter to the audio bus." @@ -11810,6 +12345,13 @@ msgid "" "and progressively increases its effect as the input level increases such " "that the threshold is never exceeded." msgstr "" +"Un limiteur est semblable à un compresseur, mais il est moins flexible et " +"conçu pour limiter le son au delà d'un certain seuil de décibels donné. " +"L'ajout d'un limiteur dans le bus \"Master\" est toujours recommandé pour " +"réduire les effets de la coupure.\n" +"La coupure douce commence à réduire les pics un peu en dessous du seuil et " +"augmente progressivement son effet puisque le niveau d'entrée augmente de " +"sorte que le seuil n'est jamais dépassé." #: doc/classes/AudioEffectLimiter.xml msgid "" @@ -11934,6 +12476,11 @@ msgid "" "this higher latency are especially noticeable on sounds that have sudden " "amplitude changes." msgstr "" +"La taille de la mémoire de la [url=https://fr.wikipedia.org/wiki/" +"Transformation_de_Fourier_rapide]Transformation de Fourier rapide[/url]. Les " +"valeurs plus élevées lissent l'effet dans le temps, mais ont une plus grande " +"latence. Cette latence sera bien plus visible sur les sons qui changent " +"soudainement." #: doc/classes/AudioEffectPitchShift.xml msgid "" @@ -12379,6 +12926,13 @@ msgid "" "input. If an invalid device name is set, the value will be reverted back to " "[code]\"Default\"[/code]." msgstr "" +"Le nom du périphérique actuel pour l'entrée audio (voir [method " +"get_device_list)]. Sur les systèmes avec plusieurs entrées audio (comme " +"l'analogique, l'USB et l'audio par HDMI), cela peut être utilisé pour " +"sélectionner le périphérique d'entrée pour l'audio. La valeur " +"[code]\"Defaut\"[/code] enregistrera l'audio sur l'entrée audio par défaut " +"du système. Si un nom de périphérique invalide est défini, la valeur sera " +"retournée à [code]\"Defaut\"[/code]." #: doc/classes/AudioServer.xml msgid "" @@ -12389,6 +12943,13 @@ msgid "" "output. If an invalid device name is set, the value will be reverted back to " "[code]\"Default\"[/code]." msgstr "" +"Le nom du périphérique actuel pour la sortie audio (voir [method " +"get_device_list)]. Sur les systèmes avec plusieurs sorties audio (tels que " +"l'analogique, l'USB et l'audio par HDMI), cela peut être utilisé pour " +"sélectionner le périphérique de sortie de l'audio. La valeur " +"[code]\"Default\"[/code] jouera l'audio sur la sortie audio par défaut au " +"niveau du système. Si un nom de périphérique invalide est défini, la valeur " +"[code]\"Default\"[/code] sera retournée." #: doc/classes/AudioServer.xml msgid "" @@ -12481,6 +13042,18 @@ msgid "" "as [code]32000[/code] or [code]22050[/code] may be usable with no loss in " "quality." msgstr "" +"Le taux d'échantillonnage à utiliser (en Hz). Les valeurs plus élevées " +"demandent plus de puissant de CPU, mais cela produit une meilleure qualité.\n" +"Dans les jeux, les taux d'échantillonnage courants sont [code]11025[/code], " +"[code]16000[/code], [code]22050[/code], [code]32000[/code], [code]44100[/" +"code], et [code]48000[/code].\n" +"D'après le [url=https://fr.wikipedia.org/wiki/" +"Th%C3%A9or%C3%A8me_d'%C3%A9chantillonnage]Théorème d'échantillonnage[/url], " +"il n'y a aucune différence de qualité pour l'audition humaine au-delà de 40 " +"000 Hz (puisque la plupart des humains ne peuvent entendre que jusqu'à 20 " +"000 Hz, et souvent bien moins). Si vous générez des sons inférieurs tels que " +"les voix, des taux d'échantillonnage inférieurs tels que [code]32000[/code] " +"ou [code]22050[/code] peuvent être utilisables sans perte de qualité audible." #: doc/classes/AudioStreamGeneratorPlayback.xml msgid "Plays back audio generated using [AudioStreamGenerator]." @@ -12491,6 +13064,8 @@ msgid "" "This class is meant to be used with [AudioStreamGenerator] to play back the " "generated audio in real-time." msgstr "" +"Cette classe est destinée à être utilisée avec un [AudioStreamGenerator] " +"pour lire l'audio généré en temps réel." #: doc/classes/AudioStreamGeneratorPlayback.xml #, fuzzy @@ -12740,6 +13315,19 @@ msgid "" "[member unit_db] to a very low value like [code]-100[/code] (which isn't " "audible to human hearing)." msgstr "" +"Joue un effet sonore avec des effets sonores dirigés, amortit par la " +"distance au besoin, qui génère l'effet de la position audible dans l'espace " +"environnement. Pour plus de réalisme, un filtre à passe-bas s'applique " +"automatiquement aux sons lointains. Cela peut être désactivé en définissant " +"[member attenuation_filter_cutoff_hz] à [code]20500[/code].\n" +"Par défaut, l'audio est entendu depuis la position de la caméra. Cela peut " +"être changé en ajoutant un nÅ“ud [Listener] à la scène et en l'activant en " +"appelant [method Listener.make_current] sur lui.\n" +"Voir aussi [AudioStreamPlayer] pour jouer un son non-positionnel.\n" +"[b]Note :[/b] Masquer un nÅ“ud [AudioStreamPlayer3D] ne désactive pas sa " +"sortie audio. Pour désactiver temporairement une sortie audio " +"[AudioStreamPlayer3D], définissez [member unit_db] à une valeur très basse " +"comme [code]-100[/code] dB (qui n'est pas audible humainement)." #: doc/classes/AudioStreamPlayer3D.xml msgid "" @@ -12756,6 +13344,12 @@ msgid "" "\"water\" area so that sounds played in the water are redirected through an " "audio bus to make them sound like they are being played underwater." msgstr "" +"Détermine quelles calques du [Area] affectent le son pour les effets de " +"réverbération et les effets des bus audio. Les aires peuvent être utilisées " +"pour rediriger les [AudioStream] afin qu'ils jouent dans un certain bus " +"audio. Un exemple d'utilisation est de faire une aire \"eau\" où les sons " +"joués dans l'eau sont redirigés par un bus audio qui modifie ces sons pour " +"qu'ils donnent l'impression d'être joués dans l'eau." #: doc/classes/AudioStreamPlayer3D.xml msgid "" @@ -12798,6 +13392,11 @@ msgid "" "doppler_tracking] property is set to a value other than [constant Camera." "DOPPLER_TRACKING_DISABLED]." msgstr "" +"Décide dans quelle mesure [url=https://fr.wikipedia.org/wiki/" +"Effet_Doppler]L'effet Doppler[/url] doit être calculé.\n" +"[b]Note :[/b] Ce n'est efficace que si la propriété actuelle [Camera] " +"enregistrée [member Camera.doppler_tracking] est définie à une valeur autre " +"que [constant Camera. DOPPLER_TRACKING_DISABLED]" #: doc/classes/AudioStreamPlayer3D.xml msgid "The angle in which the audio reaches cameras undampened." @@ -14392,6 +14991,12 @@ msgid "" "to create [CallbackTweener]. Any [CallbackTweener] created manually will not " "function correctly." msgstr "" +"[CallbackTweener] est utilisé pour appeler une méthode dans une séquence " +"d'interpolation. Voir [method SceneTreeTween.tween_callback] pour plus " +"d'informations sur son utilisation.\n" +"[b]Note :[/b] [method SceneTreeTween.tween_callback] est le seul moyen " +"correct de créer un [CallbackTweener]. Tout [CallbackTweener] créé " +"manuellement ne fonctionnera pas correctement." #: doc/classes/CallbackTweener.xml msgid "" @@ -14402,6 +15007,12 @@ msgid "" "after 2 seconds\n" "[/codeblock]" msgstr "" +"Retarde l'appel par le temps donné en secondes. Par exemple :\n" +"[codeblock]\n" +"var tween = get_tree().create_tween()\n" +"tween.tween_callback(queue_free).set_delay(2) # Cela va appeler " +"\"queue_free()\"\" après 2 secondes\n" +"/[codeblock]" #: doc/classes/Camera.xml msgid "Camera node, displays from a point of view." @@ -14417,6 +15028,14 @@ msgid "" "capabilities to a [Viewport], and, without one, a scene registered in that " "[Viewport] (or higher viewports) can't be displayed." msgstr "" +"La caméra est un nÅ“ud spécial qui affiche ce qui est visible depuis son " +"emplacement actuel. Les caméras s'enregistrent dans le nÅ“ud [Viewport] le " +"plus proche (en remontant l'arborescence). Une seule caméra peut être active " +"par fenêtre d'affichage. Si aucune fenêtre d'affichage n'est disponible dans " +"l'arborescence, la caméra s'enregistrera dans la fenêtre d'affichage racine. " +"En d'autres termes, une caméra permet l'affichage en 3D dans un [Viewport] " +"et, sans caméra, une scène enregistrée dans ce [Viewport] (où les fenêtres " +"d'affichage plus hautes) n'affichent rien." #: doc/classes/Camera.xml msgid "" @@ -14543,6 +15162,19 @@ msgid "" "unproject_position(global_transform.origin)\n" "[/codeblock]" msgstr "" +"Retourne les coordonnées 2D dans le rectangle [Viewport] qui projette le " +"point 3D donné dans l'espace global.\n" +"[b]Note :[/b] Lors de l'utilisation de cette fonction pour positionner des " +"éléments graphiques sur un viseur 3D, utilisez [method is_position_behind] " +"pour les empêcher d'apparaître si ce point 3D est derrière la caméra :\n" +"[codeblock]\n" +"# Ce bloc de code fait partie d'un script qui hérite de Spatial.\n" +"# `control` est une référence à un nÅ“ud héritant de Control.\n" +"control.visible = not get_viewport().get_camera()." +"is_position_behind(global_transform.origin)\n" +"control.rect_position = get_viewport().get_camera()." +"unproject_position(global_transform.origin)\n" +"/[codeblock]" #: doc/classes/Camera.xml msgid "" @@ -14568,6 +15200,15 @@ msgid "" "Perspective menu in the top-left corner of the 3D viewport and toggle " "[b]Enable Doppler[/b]." msgstr "" +"Si n'est pas [constant DOPPLER_TRACKING_DISABLED], cette caméra simulera " +"[url=https://fr.wikipedia.org/wiki/Effet_Doppler]L'effet Doppler[/url] pour " +"les objets modifiés en particulier durant la méthode [code]_process[/code]. " +"L'effet Doppler est seulement simulé pour les nÅ“uds [AudioStreamPlayer3D] " +"qui ont [member AudioStreamPlayer3D.doppler_tracking] défini à une valeur " +"autre que [constant AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED]\n" +"[b]Note :[/b] Pour basculer la prévisualisation de l'effet Doppler dans " +"l'éditeur, utilisez le menu \"Perspective\" dans le coin supérieur gauche de " +"la vue 3D et activer l'option [b]Activer Doppler[/b]." #: doc/classes/Camera.xml msgid "The [Environment] to use for this camera." @@ -14976,6 +15617,8 @@ msgid "" "The camera's position is fixed so that the top-left corner is always at the " "origin." msgstr "" +"La position de l'appareil photo est fixe de telle sorte que le coin " +"supérieur gauche soit toujours placé sur l'origine." #: doc/classes/Camera2D.xml msgid "" @@ -14998,6 +15641,8 @@ msgid "" "A camera feed gives you access to a single physical camera attached to your " "device." msgstr "" +"Un flux de caméra vous donne accès à une caméra physique qui est connectée à " +"votre appareil." #: doc/classes/CameraFeed.xml msgid "" @@ -15009,6 +15654,14 @@ msgid "" "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." #: doc/classes/CameraFeed.xml msgid "Returns the unique ID for this feed." @@ -15050,6 +15703,8 @@ msgid "" "Feed supplies separate Y and CbCr images that need to be combined and " "converted to RGB." msgstr "" +"Fournis des images Y et CbCr séparées qui doivent être combinées puis " +"converties en RGB." #: doc/classes/CameraFeed.xml msgid "Unspecified position." @@ -15076,6 +15731,13 @@ msgid "" "[b]Note:[/b] This class is currently only implemented on macOS and iOS. On " "other platforms, no [CameraFeed]s will be available." msgstr "" +"Le [CameraServer] garde en mémoire de différentes caméras accessibles dans " +"Godot. Ce sont des caméras externes telles que des webcams ou les caméras " +"sur votre téléphone.\n" +"Ce serveur est notamment utilisé pour fournir des flux vidéo venant de la " +"caméra aux modules AR.\n" +"[b]Note :[/b] Cette classe n'est actuellement implémentée que sur macOS et " +"iOS. Sur les autres plates-formes, aucun [CameraFeed] ne sera disponible." #: doc/classes/CameraServer.xml #, fuzzy @@ -15187,6 +15849,33 @@ msgid "" "parameters must have angles specified as [i]radians[/i]. To convert degrees " "to radians, use [method @GDScript.deg2rad]." msgstr "" +"La classe de base de tout ce qui est en 2D. Les objets du canevas sont placé " +"dans une arborescence; les enfants héritent et étendent la transformation du " +"parent. [CanvasItem] est hérité par [Control] pour tout ce qui concerne " +"l'interface utilisateur, et par [Node2D] pour tout ce qui concerne le moteur " +"2D.\n" +"Tout [CanvasItem] peut servir à dessiner. Pour cela, [méthode update] doit " +"être appelée, puis [constant NOTIFICATION_DRAW] sera reçu lors du temps " +"inoccupé pour la requête de dessin. En raison de cela, les éléments des " +"canevas n'ont pas besoin d'être redessinés à chaque trame, ce qui améliore " +"considérablement les performances. Plusieurs fonctions pour dessiner dans un " +"[CanvasItem] sont fournies (voir [code]draw_*[/code]). Cependant, elles ne " +"peuvent être utilisés qu'à l'intérieur des fonctions virtuelles [method " +"Object._notification], des signaux ou de [method _draw].\n" +"Les objets des canevas sont dessinés dans l'ordre de l'arborescence. Par " +"défaut, les enfants sont au-dessus de leurs parents afin que le [CanvasItem] " +"racine soit dessiné en arrière fond. Ce comportement peut être modifié pour " +"chaque élément.\n" +"Un [CanvasItem] peut aussi être caché, ce qui cachera aussi ses enfants. Il " +"existe de nombreuses façons de modifier des paramètres tels que la " +"modulation (pour lui-même et ses enfants) et la modulation de ce seul " +"élément, ainsi que son mode de mélange.\n" +"Enfin, une notification de transformation peut être demandée, ce qui " +"signalera au nÅ“ud que sa position globale a changé au cas où l'arborescence " +"parente a changé.\n" +"[b]Note :[/b] Sauf exception, toutes les paramètres d'angle doivent être des " +"spécifiés en [i]radians[/i]. Pour convertir des degrés en radians, utilisez " +"[méthod @GDScript.deg2rad]" #: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml #: doc/classes/InputEvent.xml doc/classes/Viewport.xml @@ -15218,12 +15907,28 @@ msgid "" "mipmaps to perform antialiasing. 2D batching is also still supported with " "those antialiased lines." msgstr "" +"Dessine un arc non rempli entre les deux angles donnés. Plus la valeur " +"[code]point_count[/code] est grande, plus la courbe est lisse. Voir aussi " +"[method draw_circle].\n" +"[b]Note :[/b] Le dessin de ligne n'est pas accéléré par lots si " +"[code]antialiased[/code] est [code]true[/code].\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les lignes semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage. L'accélération par lot est " +"toujours supporté même avec les lignes avec anticrénelage." #: doc/classes/CanvasItem.xml msgid "" "Draws a string character using a custom font. Returns the advance, depending " "on the character width and kerning with an optional next character." msgstr "" +"Dessine un caractère d'une chaîne en utilisant une police personnalisée. " +"Retourne l'avancement, en fonction de la largeur de caractère et du kerning " +"avec un caractère optionnel suivant." #: doc/classes/CanvasItem.xml msgid "" @@ -15235,6 +15940,14 @@ msgid "" "create an AntialiasedRegularPolygon2D node. That node relies on a texture " "with custom mipmaps to perform antialiasing." msgstr "" +"Dessine un cercle coloré rempli. Voir aussi [method draw_arc], [method " +"draw_polyline] et [method draw_polygon].\n" +"[b]Note :[/b] L'anticrénelage intégré n'est pas prévu pour [méthod " +"draw_circle]. Vous pouvez corriger ce problème en installant le greffon " +"[url=https://github.com/godot-extended-libraries/godot-antialiased-" +"line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"AntialiasedRegularPolygon2D. Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15248,6 +15961,16 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"Dessine un polygone coloré avec un nombre donné de points, qu'il soit " +"convexe ou concave. Contrairement à [method draw_polygon], une seule couleur " +"doit être spécifiée pour tout le polygone.\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les polygones semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15264,6 +15987,19 @@ msgid "" "perform antialiasing. 2D batching is also still supported with those " "antialiased lines." msgstr "" +"Dessine une ligne d'un point 2D à un autre, avec une couleur et une " +"épaisseur données. L'anticrénelage peut être activé en option. Voir aussi " +"[method draw_multiline] et [method draw_polyline].\n" +"[b]Note :[/b] Le dessin de ligne n'est pas accéléré par lots si " +"[code]antialiased[/code] est [code]true[/code].\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les lignes semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage. L'accélération par lot est " +"toujours supporté même avec les lignes avec anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15344,6 +16080,17 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"Dessine un polygone plein à partir d'un nombre arbitraire de points, qu'il " +"soit convexe ou concave. Contrairement à [method draw_colored_polygon], la " +"couleur de chaque point peut être changée individuellement. Voir aussi " +"[method draw_polyline] et [method draw_polyline_colors].\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les polygones semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15359,6 +16106,19 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"Dessine des segments interconnectés d'une couleur [code]color[/code] et " +"d'une épaisseur [code]width[/code] constantes avec un anticrénelage " +"facultatif. Si vous dessinez de grandes quantités de lignes, cette méthode " +"est plus rapide que d'appeler [méthode draw_line] à chaque ligne. Pour " +"dessiner des lignes déconnectées, utilisez plutôt [method draw_multiline]. " +"Voir aussi [method draw_polygon].\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les polygones semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15398,6 +16158,11 @@ msgid "" "See also [method draw_line], [method draw_polyline], [method draw_polygon], " "and [method draw_rect]." msgstr "" +"Dessine une primitive personnalisée. 1 point pour dessiner un point, 2 " +"points pour une ligne, 3 points pour un triangle, et 4 points pour un quad. " +"Si 0 points ou plus de 4 points sont spécifiés, rien ne sera dessiné et un " +"message d'erreur sera affiché. Voir aussi [method draw_line], [method " +"draw_polyline], [method draw_polygon], et [method draw_rect]." #: doc/classes/CanvasItem.xml msgid "" @@ -15416,6 +16181,21 @@ msgid "" "AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps " "to perform antialiasing." msgstr "" +"Dessine un rectangle. Si [code]filled[/code] est [code]true[/code], le " +"rectangle sera rempli avec la couleur [code]color[/code] spécifiée. Si " +"[code]filled[/code] est [code]false[/code], seule la bordure du rectangle " +"sera dessinée avec [code]color[/code] et l'épaisseur [code]width[/code] " +"spécifiées. Si [code]antialiased[/code] est [code]true[/code], il sera tenté " +"d'utiliser de l'anticrénelage pour l'affichage des bordures via OpenGL.\n" +"[b]Note :[/b] [code]width[/code] et [code]antialiased[/code] ne seront pris " +"en compte que quand [code]filled[/code] est [code]false[/code].\n" +"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en " +"interne n'est pas correct pour les polygones semi-transparents voire peut ne " +"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème " +"en installant le greffon [url=https://github.com/godot-extended-libraries/" +"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nÅ“ud " +"\"AntialiasedPolygon2D\". Ce nÅ“ud utilise des texture avec des mipmaps " +"personnalisés pour afficher l'anticrénelage." #: doc/classes/CanvasItem.xml msgid "" @@ -15479,6 +16259,9 @@ msgid "" "color. If [code]transpose[/code] is [code]true[/code], the texture will have " "its X and Y coordinates swapped." msgstr "" +"Dessine un rectangle texturé à une position donnée, coloré par une couleur " +"facultative donnée. Si [code]transpose[/code] est [code]true[/code], la " +"texture aura ses coordonnées X et Y échangées." #: doc/classes/CanvasItem.xml msgid "" @@ -15799,6 +16582,9 @@ msgid "" "[b]Note:[/b] This property is only used and visible in the editor if [member " "particles_animation] is [code]true[/code]." msgstr "" +"Si [code]true[/code], l'animation des particules boucle.\n" +"[b]Note :[/b] Cette propriété est uniquement utilisée et visible dans " +"l'éditeur si [member particles_animation] est [code]true[/code]." #: doc/classes/CanvasItemMaterial.xml msgid "" @@ -15807,6 +16593,10 @@ msgid "" "[b]Note:[/b] This property is only used and visible in the editor if [member " "particles_animation] is [code]true[/code]." msgstr "" +"Le nombre de lignes dans la feuille de textures assigné comme [Texture] pour " +"un [Particles2D] ou un [CPUParticles2D].\n" +"[b]Note :[/b] Cette propriété est uniquement utilisée et visible dans " +"l'éditeur si [member particles_animation] est [code]true[/code]." #: doc/classes/CanvasItemMaterial.xml msgid "" @@ -15817,6 +16607,13 @@ msgid "" "This property (and other [code]particles_anim_*[/code] properties that " "depend on it) has no effect on other types of nodes." msgstr "" +"Si [code]true[/code], cela active les fonctionnalités d'animation basées sur " +"des feuilles de textures lorsqu'elles sont affectées aux nÅ“uds [Particles2D] " +"et [CPUParticles2D]. Le [member ParticlesMaterial.anim_speed] ou [member " +"CPUParticles2D.anim_speed] doit être une valeur positive pour l'animation à " +"jouer.\n" +"Cette propriété (et les autres propriétés [code]particles_anim_*[/code] qui " +"en dépendent) n'a aucun effet sur d'autres types de nÅ“uds." #: doc/classes/CanvasItemMaterial.xml msgid "" @@ -15845,6 +16642,13 @@ msgid "" "index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or " "above), or backgrounds (in layer -1 or below)." msgstr "" +"Le calque de dessin du canevas. Les nÅ“uds [CanvasItem] qui sont des enfants " +"directs ou indirects d'un [CanvasLayer] seront dessinés dans ce calque. Le " +"calque est un index numérique qui définit l'ordre d'affichage. La scène 2D " +"par défaut fait le rendu avec l'index 0, donc un [CanvasLayer] avec index -1 " +"sera dessiné en-dessous, et un avec l'index 1 sera dessiné par dessus. Ceci " +"est très utile pour les interfaces (dans la calque +1 ou au-dessus,) ou les " +"arrière-plans (dans un calque -1 ou en dessous)." #: doc/classes/CanvasLayer.xml msgid "Canvas layers" @@ -16234,6 +17038,8 @@ msgid "" "The [StyleBox] to display as a background when the [CheckBox] is hovered and " "pressed." msgstr "" +"La [StyleBox] à afficher en arrière-plan lorsque la [CheckBox] est survolée " +"et appuyée." #: doc/classes/CheckBox.xml doc/classes/CheckButton.xml msgid "The [StyleBox] to display as a background." @@ -16260,6 +17066,14 @@ msgid "" "See also [BaseButton] which contains common properties and methods " "associated with this node." msgstr "" +"CheckButton est un bouton à bascule affiché avec une coche. Il est semblable " +"à [CheckBox] dans ses fonctionnalités, mais son apparence est différente. " +"Pour suivre les modèles UX établis, il est recommandé d'utiliser CheckButton " +"pour les effet [b]immédiat[/b] d'une action. Par exemple, il devrait être " +"utilisé si le basculement active/désactive un réglage sans nécessiter que " +"l'utilisateur appuie sur un bouton de confirmation.\n" +"Voir aussi [BaseButton] qui contient des propriétés et des méthodes communes " +"associées à ce nÅ“ud." #: doc/classes/CheckButton.xml msgid "The [CheckButton] text's font color." @@ -16658,7 +17472,7 @@ msgstr "" "défini." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "Retourne le [RID] de l'objet." @@ -16667,10 +17481,15 @@ msgid "" "Returns an [Array] of [code]owner_id[/code] identifiers. You can use these " "ids in other methods that take [code]owner_id[/code] as an argument." msgstr "" +"Retourne un [Array] d'identifiants [code]owner_id[/code]. Vous pouvez " +"utiliser ces identifiants dans les méthodes prennant [code]owner_id[/code] " +"comme argument." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "If [code]true[/code], the shape owner and its shapes are disabled." msgstr "" +"Si [code]true[/code], le propriétaire de la forme et toutes ses formes sont " +"désactivés." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "Removes the given shape owner." @@ -16683,6 +17502,10 @@ msgid "" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" "code] in the the [member collision_layer]." msgstr "" +"Si [code]value[/code] est [code]true[/code], définit le [code]bit[/code] " +"spécifié dans le calque [member collision_layer].\n" +"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] " +"spécifié dans le calque [member collision_layer]." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "" @@ -16691,6 +17514,10 @@ msgid "" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" "code] in the the [member collision_mask]." msgstr "" +"Si [code]value[/code] est [code]true[/code]], définit le [code]bit[/code] " +"spécifié dans le masque [nom collision_mask].\n" +"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] " +"spécifié dans le masque [nom collision_mask]." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "Returns the [code]owner_id[/code] of the given shape." @@ -16750,6 +17577,14 @@ msgid "" "and-masks]Collision layers and masks[/url] in the documentation for more " "information." msgstr "" +"Les calques physiques où ce CollisionObject3D est inclu. Les objets de " +"collision peuvent exister dans un ou plusieurs des 32 calques existants. " +"Voir aussi [member collision_mask].\n" +"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'un des calques " +"que l'objet B observe, ou l'objet B est dans toutes les couches que l'objet " +"A observe. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction." +"html#collision-layers-and-masks]Calques et masques de collision[/url] dans " +"la documentation pour plus d'informations." #: doc/classes/CollisionObject.xml msgid "" @@ -16761,12 +17596,22 @@ msgid "" "and-masks]Collision layers and masks[/url] in the documentation for more " "information." msgstr "" +"Le calque physique que ce CollisionObject3D observe. Les objets de collision " +"peuvent observer un ou plusieurs des 32 calques existants. Voir aussi " +"[member collision_layer].\n" +"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'une des couches " +"que l'objet B observe, ou l'objet B est dans toutes les couches que l'objet " +"A observe. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction." +"html#collision-layers-and-masks]Calques et masques de collision[/url] dans " +"la documentation pour plus d'informations." #: doc/classes/CollisionObject.xml msgid "" "If [code]true[/code], the [CollisionObject] will continue to receive input " "events as the mouse is dragged across its shapes." msgstr "" +"Si [code]true[/code], le [CollisionObject] continuera de recevoir des " +"événements d'entrée quand la souris sera déplacée au-dessus de ses formes." #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml msgid "" @@ -16782,6 +17627,10 @@ msgid "" "the shape with index [code]shape_idx[/code] and [code]normal[/code] is the " "normal vector of the surface at that point." msgstr "" +"Émis lorsque l'objet reçoit un [InputEvent] non traité. [code]position[/" +"code] est l'emplacement dans les coordonnées globales de la souris sur la " +"surface de la forme à l'index [code]shape_idx[/code], et [code]normal[/code] " +"est la normale à la surface à ce point." #: doc/classes/CollisionObject.xml msgid "Emitted when the mouse pointer enters any of this object's shapes." @@ -16807,6 +17656,16 @@ msgid "" "([Viewport] canvas or [CanvasLayer]) are supported. The behavior of " "collisions between objects in different canvases is undefined." msgstr "" +"CollisionObject2D est la classe de base pour les objets de physique en 2D. " +"Il peut contenir n'importe quel nombre de formes [Shape2D] de collisions 2D. " +"Chaque forme doit être assignée à un propriétaire de [i]forme[/i]. Le " +"CollisionObject2D peut avoir autant de propriétaires de forme qui " +"nécessaire. Les propriétaires de forme ne sont pas des nÅ“uds et ne " +"apparaissent pas dans l'éditeur, mais sont accessibles par le code en " +"utilisant les méthodes [code]shape_owner[* /code].\n" +"[b]Note :[/b] Seules les collisions entre des objets dans le même canevas " +"(dans une même [Viewport] ou [CanvasLayer]) sont supportées. Le comportement " +"des collisions entre des objets dans différents canevas est indéfini." #: doc/classes/CollisionObject2D.xml msgid "" @@ -17115,6 +17974,24 @@ msgid "" "[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" "color_constants.png]Color constants cheatsheet[/url]" msgstr "" +"Une couleur représentée par des composants rouge, vert, bleu et alpha " +"(RGBA). Le composant alpha est souvent utilisé pour l'opacité. Les valeurs " +"sont des flottants et vont habituellement de 0 à 1. Certaines propriétés " +"(comme CanvasItem.modulate) peuvent accepter des valeurs supérieures à 1 " +"(sur-luminosité ou HDR).\n" +"Vous pouvez également créer une couleur à partir de noms de couleurs " +"standardisés en utilisant [méthode @GDScript.ColorN] ou en utilisant " +"directement les constantes de couleur définies ici. Le jeu de couleurs " +"standardisé est basé sur la liste [url=https://fr.wikipedia.org/wiki/" +"Noms_de_couleur_X11]des noms de couleurs X11[/url].\n" +"Si vous voulez fournir des valeurs dans une gamme de 0 à 255, vous devez " +"utiliser [méthode @GDScript.Color8]\n" +"[b]Note :[/b] Lors de la conversion en booléen, une Color sera évaluée à " +"[code]false[/code] si elle correspond à [code]Color(0, 0, 0, 1)[/code] (noir " +"complètement opaque). Sinon, une Color sera toujours évaluée à [code]true[/" +"code].\n" +"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/" +"color_constants.png]Antiscèhe des constantes de couleurs[/url]" #: doc/classes/Color.xml doc/classes/ColorPickerButton.xml msgid "2D GD Paint Demo" @@ -17248,8 +18125,8 @@ msgstr "" "Construit une couleur à partir d’un profil HSV. [code]h[/code], [code]s[/" "code], et [code]v[/code] sont des valeurs comprises entre 0 et 1.\n" "[codeblock]\n" -"var color = Color.from_hsv(0,58, 0,5, 0,79, 0,8) # Équivalent au HSV (210, 50, " -"79, 0,8) ou au Color8 (100, 151, 201, 0,8)\n" +"var color = Color.from_hsv(0,58, 0,5, 0,79, 0,8) # Équivalent au HSV (210, " +"50, 79, 0,8) ou au Color8 (100, 151, 201, 0,8)\n" "[/codeblock]" #: doc/classes/Color.xml @@ -17417,6 +18294,15 @@ msgid "" "var s2 = color.to_html(false) # Returns \"ffffff\"\n" "[/codeblock]" msgstr "" +"Retourne la chaîne de caractères avec le code hexadécimal façon HTML au " +"format ARGB (par exemple [code]ff34f822[/code)].\n" +"Définir [code]with_alpha[/code] à [code]false[/code] ne retourne pas la " +"valeur alpha dans le code hexadécimal retourné.\n" +"[codeblock]\n" +"var color = Color(1, 1, 1, 0.5)\n" +"var s1 = color.to_html() # Retourne \"7fffffff\"\n" +"var s2 = color.to_html(false) # Retourne \"ffffff\"\n" +"/[codeblock]" #: doc/classes/Color.xml msgid "" @@ -17458,6 +18344,9 @@ msgid "" "means that the color is fully transparent. A value of 1 means that the color " "is fully opaque." msgstr "" +"Le composant alpha de la couleur, généralement de 0 à 1. Une valeur de 0 " +"signifie que la couleur est entièrement transparente. Une valeur de 1 " +"signifie que la couleur est entièrement opaque." #: doc/classes/Color.xml msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1." @@ -17467,7 +18356,7 @@ msgstr "" #: doc/classes/Color.xml msgid "The color's blue component, typically on the range of 0 to 1." -msgstr "" +msgstr "Le composant bleu de la couleur, généralement de 0 à 1." #: doc/classes/Color.xml msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1." @@ -17477,7 +18366,7 @@ msgstr "" #: doc/classes/Color.xml msgid "The color's green component, typically on the range of 0 to 1." -msgstr "" +msgstr "Le composant vert de la couleur, généralement de 0 à 1." #: doc/classes/Color.xml msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1." @@ -17487,11 +18376,11 @@ msgstr "" #: doc/classes/Color.xml msgid "The HSV hue of this color, on the range 0 to 1." -msgstr "" +msgstr "La teinte HSV de cette couleur, dans l'intervalle de 0 à 1." #: doc/classes/Color.xml msgid "The color's red component, typically on the range of 0 to 1." -msgstr "" +msgstr "Le composant rouge de la couleur, généralement de 0 à 1." #: doc/classes/Color.xml msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1." @@ -17501,7 +18390,7 @@ msgstr "" #: doc/classes/Color.xml msgid "The HSV saturation of this color, on the range 0 to 1." -msgstr "" +msgstr "La saturation HSV de cette couleur, dans l'intervalle de 0 à 1." #: doc/classes/Color.xml msgid "The HSV value (brightness) of this color, on the range 0 to 1." @@ -18805,6 +19694,45 @@ msgid "" "[method get_icon], [method get_stylebox], and the [code]add_*_override[/" "code] methods provided by this class." msgstr "" +"La classe de base pour tous les nÅ“uds liés à l'interface utilisateur. " +"[Control] contient un rectangle englobant qui définit sa taille, une " +"position d'ancrage par rapport au contrôle parent ou à la fenêtre " +"d'affichage actuele, et des marges qui représentent un décalage par rapport " +"à l'ancre. Les marges se mettent à jour automatiquement lorsque le nÅ“ud, " +"l'un de ses parents ou la taille de l'écran changent.\n" +"Pour plus d'informations sur le système d'interface utilisateur, les ancres, " +"les marges et les conteneurs, voir les tutoriels correspondants dans la " +"documentation. Pour construire des interfaces flexibles, vous avez besoin " +"d'un ensemble d'éléments de l'interface utilisateur héritant de [Control] et " +"de [Container].\n" +"[b]NÅ“uds d'interface utilisateur et les événements[/b]\n" +"Godot envoie d'abord des événements d'entrée au nÅ“ud racine de la scène, en " +"appelant [method Node._input]. [method Node._input] fait suivre les " +"événements vers le bas de l'arborescence sous le curseur de la souris, ou " +"suivant le focus du clavier. Pour cela, Godot appelle [method MainLoop." +"_input_event]. Appelez [méthode accept_event] pour qu'aucun autre nÅ“ud ne " +"puisse recevoir cet événement. Une fois que vous acceptez un événement " +"d'entrée, elle est modifiée pour qu'aucune méthode [method Node." +"_unhandled_input] ne la reçoive.\n" +"Un seul nÅ“ud [Control] peut avoir le focus du clavier. Et seulement ce nÅ“ud " +"recevra des événements de clavier. Pour obtenir le focus, appelez [method " +"grab_focus]. Les nÅ“uds [Controle] perdent de le focus quand un autre nÅ“ud le " +"prend, ou si vous désactivez ce nÅ“ud pour qu'il ne puisse plus obtenir le " +"focus.\n" +"Mettez [member souris_filter] à [constant MOUSE_FILTER_IGNORE] pour " +"signifier qu' un nÅ“ud [Control] doit ignorer les événements de souris ou du " +"clavier. Vous en avez besoin si vous placez une icône par dessus un bouton.\n" +"Les ressources [Theme] ressources changent l'aspect des Control. Si vous " +"changez le [Thème] sur un nÅ“ud [Control], cela affectera aussi tous ses " +"enfants. Pour remplacer certains paramètres du thème, appelez l'une des " +"méthodes [code]add_*_override[/code], comme [method add_font_override]. Vous " +"pouvez surcharger le thème depuis l'inspecteur.\n" +"[b]Note :[/b] Les objets des thèmes sont des propriétés et [i]non pas[/i] " +"des [Object]. Cela signifie que vous ne pouvez pas enregistrer leurs valeurs " +"en utilisant les méthodes [method Object.get] et [method Object.set]. Au " +"lieu de cela, utilisez les méthodes [method get_color], [method " +"get_constant], [method get_font], [method get_icon], [method get_stylebox], " +"et [code]add_*_override[/code] fournies par cette classe." #: doc/classes/Control.xml msgid "GUI tutorial index" @@ -18872,6 +19800,27 @@ msgid "" "[member rect_clip_content] or [method _clips_input] enabled.\n" "[b]Note:[/b] Event position is relative to the control origin." msgstr "" +"La méthode virtuelle à surcharger par l'utilisateur. Utilisez cette méthode " +"pour traiter et accepter les entrées sur les éléments d'interface " +"utilisateur. Voir [method accept_event].\n" +"Exemple : cliquer sur un contrôle.\n" +"[codeblock]\n" +"func _gui_input(event):\n" +" if event is InputEventMouseButton:\n" +" if event.button_index == BUTTON_LEFT and event.pressed:\n" +" print(\"J'ai cliqué !\")\n" +"/[codeblock]\n" +"L'événement ne sera pas déclenché si :\n" +"* le clic est en dehors du contrôle (voir [method has_point)] ;\n" +"* le contrôle a [member mouse_filter] à [constant MOUSE_FILTER_IGNORE] ;\n" +"* le contrôle est recouvert par un autre [Control], si celui-ci n'a pas " +"[member mouse_filter] à [constant MOUSE_FILTER_IGNORE] ;\n" +"* le parent de ce contrôle a [member mouse_filter] à [constant " +"MOUSE_FILTER_STOP] ou a accepté cet événement ;\n" +"* le clic est en dehors du rectangle du parent et ce parent a soit [member " +"rect_clip_content] ou [method _clips_input] d'activé.\n" +"[b]Note :[/b] La position de l'événement est relative à l'origine du " +"contrôle." #: doc/classes/Control.xml msgid "" @@ -19001,6 +19950,13 @@ msgid "" "remove_font_override] instead.\n" "See also [method get_font]." msgstr "" +"Crée une surcharge locale pour la police [Font] du thème nommée [code]name[/" +"code]. Les surcharges locales ont toujours la priorité lors de la " +"récupération des éléments d'un contrôle.\n" +"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur " +"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, " +"utilisez plutôt [method remove_font_override].\n" +"Voir aussi [method get_font]." #: doc/classes/Control.xml msgid "" @@ -19012,6 +19968,13 @@ msgid "" "remove_icon_override] instead.\n" "See also [method get_icon]." msgstr "" +"Crée une surcharge locale pour l'icône du thème nommée [code]name[/code]. " +"Les surcharges locales ont toujours la priorité lors de la récupération des " +"éléments d'un contrôle.\n" +"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur " +"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, " +"utilisez plutôt [method remove_icon_override].\n" +"Voir aussi [method get_icon]." #: doc/classes/Control.xml msgid "" @@ -19022,6 +19985,12 @@ msgid "" "value. This behavior is deprecated and will be removed in 4.0, use [method " "remove_shader_override] instead." msgstr "" +"Crée une surcharge locale pour le shader du thème nommé [code]name[/code]. " +"Les surcharges locales ont toujours la priorité lors de la récupération des " +"éléments d'un contrôle.\n" +"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur " +"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, " +"utilisez plutôt [method remove_shader_override]." #: doc/classes/Control.xml msgid "" @@ -19214,6 +20183,21 @@ msgid "" " return mydata\n" "[/codeblock]" msgstr "" +"Godot appelle cette méthode pour obtenir des données qui peuvent être " +"déposées et glissées sur les contrôles qui gère le déposé-glissé. Retournez " +"[code]null[/code] s'il n'y a pas de données à glisser. Les contrôles qui " +"veulent recevoir les déposé-glissé doivent implémenter [method " +"can_drop_data] et [method drop_data]. [code]position[/code] est local à ce " +"contrôle. Le déposé-glissé peut être forcé avec [method force_drag].\n" +"Un aperçu affiché à côté de la souris représentant les données peut être " +"défini avec [methode set_drag_preview]. L'appel à cette méthode est un bon " +"moment définir cet aperçu.\n" +"[codeblock]\n" +"func get_drag_data(position):\n" +" var mydata = make_data()\n" +" set_drag_preview(make_preview(mydata))\n" +" return mydata\n" +"[/codeblock]" #: doc/classes/Control.xml msgid "Returns [member margin_right] and [member margin_bottom]." @@ -19525,6 +20509,18 @@ msgid "" "[code]push_opposite_anchor[/code] was [code]false[/code], the left anchor " "would get value 0.5." msgstr "" +"Définit l'ancre identifiée par la constante [code]margin[/code] de " +"l'énumération [enum Margin] avec [code]anchor[/code]. C'est une méthode de " +"setter pour [member anchor_bottom], [member anchor_left], [member " +"anchor_right] et [member anchor_top].\n" +"Si [code]keep_margin[/code] est [code]true[/code], les marges ne seront pas " +"mises à jour après cette opération.\n" +"Si [code]push_opposite_anchor[/code] est [code]true[/code] et que l'ancre " +"opposée recouvre cette ancre, l'ancre opposée aura sa valeur surchargée. Par " +"exemple, lorsque l'ancre gauche est fixée à 1 et que l'ancre droite a une " +"valeur de 0,5, l'ancre droite aura également une valeur de 1. Si " +"[code]push_opposite_anchor[/code] est [code]false[/code], l'ancre gauche a " +"alors la valeur 0.5" #: doc/classes/Control.xml msgid "" @@ -19672,6 +20668,10 @@ msgid "" "If [code]keep_margins[/code] is [code]true[/code], control's anchors will be " "updated instead of margins." msgstr "" +"Définit le [member rect_global_position] à la [code]position[/code] " +"spécifiée.\n" +"Si [code]keep_margins[/code] est [code]true[/code], les ancrages de contrôle " +"seront changés à la place des marges." #: doc/classes/Control.xml msgid "" @@ -19858,6 +20858,27 @@ msgid "" "theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n" "[/codeblock]" msgstr "" +"Change le texte de l'infobulle. Cette infobulle apparaît lorsque le curseur " +"de la souris reste sur ce contrôle durant quelques instants, à condition que " +"la propriété [member mouse_filter] ne soit pas [constant " +"MOUSE_FILTER_IGNORE]. Vous pouvez modifier le temps nécessaire avant que " +"l'infobulle n'apparaisse avec [code]gui/timers/tooltip_delay_sec[/code] dans " +"les réglages du projet.\n" +"Le panneau de l'infobulle utilisera soit l'implémentation par défaut, soit " +"une que vous pouvez personnaliser avec [method make_custom_tooltip]. " +"L'infobulle par défaut comprend un [PopupPanel] et un [Label] dont les " +"propriétés thématiques peuvent être personnalisées en utilisant un [Thème] " +"pour le panneau [code]\"TooltipPanel\"[/code] et le label " +"[code]\"TooltipLabel\"[/code] respectivement. Par exemple :\n" +"[codeblock]\n" +"var style_box = StyleBoxFlat.new()\n" +"style_box.set_bg_color(Color(1, 1, 0))\n" +"style_box.set_border_width_all(2)\n" +"# On part du principe ici que la propriété `theme` a déjà été assignée avec " +"un Theme personnalisé.\n" +"theme.set_stylebox(\"panel\", \"TooltipPanel\", style_box)\n" +"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n" +"/[codeblock]" #: doc/classes/Control.xml msgid "" @@ -19875,6 +20896,12 @@ msgid "" "you should not modify them manually if your node is a direct child of a " "[Container]. Margins update automatically when you move or resize the node." msgstr "" +"La distance entre le bord du bas du nÅ“ud et son contrôle parent, basé sur " +"[member anchor_bottom].\n" +"Les marges sont souvent contrôlées par un ou plusieurs nÅ“uds [Container] " +"parents, de sorte que vous ne devriez pas les modifier manuellement si votre " +"nÅ“ud est un enfant direct d'un [Container]. Les marges se mettent à jour " +"automatiquement lorsque vous déplacez ou redimensionnez le nÅ“ud." #: doc/classes/Control.xml msgid "" @@ -19884,6 +20911,12 @@ msgid "" "you should not modify them manually if your node is a direct child of a " "[Container]. Margins update automatically when you move or resize the node." msgstr "" +"La distance entre le bord gauche du nÅ“ud et son contrôle parent, basé sur " +"[member anchor_bottom].\n" +"Les marges sont souvent contrôlées par un ou plusieurs nÅ“uds [Container] " +"parents, de sorte que vous ne devriez pas les modifier manuellement si votre " +"nÅ“ud est un enfant direct d'un [Container]. Les marges se mettent à jour " +"automatiquement lorsque vous déplacez ou redimensionnez le nÅ“ud." #: doc/classes/Control.xml msgid "" @@ -19893,6 +20926,12 @@ msgid "" "you should not modify them manually if your node is a direct child of a " "[Container]. Margins update automatically when you move or resize the node." msgstr "" +"La distance entre le bord droit du nÅ“ud et son contrôle parent, basé sur " +"[member anchor_bottom].\n" +"Les marges sont souvent contrôlées par un ou plusieurs nÅ“uds [Container] " +"parents, de sorte que vous ne devriez pas les modifier manuellement si votre " +"nÅ“ud est un enfant direct d'un [Container]. Les marges se mettent à jour " +"automatiquement lorsque vous déplacez ou redimensionnez le nÅ“ud." #: doc/classes/Control.xml msgid "" @@ -19902,6 +20941,12 @@ msgid "" "you should not modify them manually if your node is a direct child of a " "[Container]. Margins update automatically when you move or resize the node." msgstr "" +"La distance entre le bord du bas du nÅ“ud et son contrôle parent, basé sur " +"[member anchor_bottom].\n" +"Les marges sont souvent contrôlées par un ou plusieurs nÅ“uds [Container] " +"parents, de sorte que vous ne devriez pas les modifier manuellement si votre " +"nÅ“ud est un enfant direct d'un [Container]. Les marges se mettent à jour " +"automatiquement lorsque vous déplacez ou redimensionnez le nÅ“ud." #: doc/classes/Control.xml msgid "" @@ -20032,6 +21077,24 @@ msgid "" "The earliest match against any type/class name is returned. The project-" "level Theme and the default Theme are checked last." msgstr "" +"Le nom d'une variation de type d'un thème utilisée par ce [Control] pour " +"examiner ses propres éléments thématiques. Lorsqu'il est vide, le nom de " +"classe du nÅ“ud est utilisé (par exemple [code]Button[/code] pour le contrôle " +"[Button]), ainsi que les noms de classe de toutes les classes parentes (dans " +"l'ordre d'héritage).\n" +"Lorsqu'elle est définie, cette propriété donne la plus haute priorité pour " +"le type de nom qui est spécifié. Ce type peut ensuite étendre un autre type, " +"formant une chaîne de dépendance. Voir [method Theme.set_type_variation]. Si " +"l'élément de thème n'est pas trouvé en utilisant ce type ou ces types de " +"base, la recherche revient alors sur les noms de classe.\n" +"[b]Note :[/b] Pour rechercher les éléments d'un [Control], utilisez les " +"méthodes [code]get_*[/code] sans spécifier de [code]theme_type[/code].\n" +"[b]Note :[/b] Les objets de thème sont recherchés dans l'ordre de " +"l'arborescence, depuis le contrôle jusqu'à la racine, où chaque nÅ“ud " +"[Control] est vérifié suivant sa propriété [member theme]. Le premier " +"résultat trouvé de la recherche sur n'importe quel type ou classe est " +"retourné. Le thème du projet et celui par défaut est utilisé en dernier " +"recours." #: doc/classes/Control.xml msgid "Emitted when the node gains keyboard focus." @@ -20416,6 +21479,10 @@ msgid "" "expand size flags. Use with [member size_flags_horizontal] and [member " "size_flags_vertical]." msgstr "" +"Précise au [Container] parent de centrer le nÅ“ud en son milieu. Il centre le " +"contrôle basé sur sont rectangle englobant, donc ça ne fonctionne pas avec " +"les drapeaux de remplissage ou d'extension. Utilisez avec [membre " +"size_flags_horizontal] et [membre size_flags_vertical]." #: doc/classes/Control.xml msgid "" @@ -20424,6 +21491,10 @@ msgid "" "flags. Use with [member size_flags_horizontal] and [member " "size_flags_vertical]." msgstr "" +"Précise au [Container] parent d'aligner le nÅ“ud sur la fin, soit en bas, " +"soit sur bord droit. Il ne fonctionne pas avec les drapeaux de remplissage " +"ou d'extension. Utilisez avec [membre size_flags_horizontal] et [membre " +"size_flags_vertical]." #: doc/classes/Control.xml msgid "" @@ -20433,6 +21504,12 @@ msgid "" "automatically marked as handled, and they will not propagate further to " "other controls. This also results in blocking signals in other controls." msgstr "" +"Le contrôle recevra les événements d'entrée de la souris via [method " +"gui_input] si vous cliquez dessus. Et le contrôle recevra les signaux " +"[signal mouse_entered] et [signal mouse_exited]. Ces événements sont " +"automatiquement marqués comme traités, et ils ne se propagent pas vers les " +"autres contrôles. Cela permet également de bloquer la propagation de ces " +"signaux à partir d'autres contrôles." #: doc/classes/Control.xml msgid "" @@ -20445,6 +21522,14 @@ msgid "" "all, the event will still be handled automatically, so unhandled input will " "not be fired." msgstr "" +"La contrôle recevra les événements d'entrée de la souris via [method " +"gui_input] si vous cliquez dessus. Et le contrôle recevra les signaux " +"[signal mouse_entered] et [signal mouse_exited]. Si ce contrôle ne traite " +"pas l'événement, cet événement sera envoyé au contrôle parent (s'il existe), " +"et ainsi de suite jusqu'à ce qu'il n'y ait plus de contrôle parent pour le " +"traiter. Cela permet également aux signaux d'être émis dans d'autres " +"contrôles. Même si aucun contrôle ne l'a traité, l'événement sera toujours " +"traité automatiquement, alors les entrées non traitées ne seront pas émises." #: doc/classes/Control.xml msgid "" @@ -20454,24 +21539,35 @@ msgid "" "receiving these events or firing the signals. Ignored events will not be " "handled automatically." msgstr "" +"Le contrôle ne recevra pas d'événements d'entrée de la souris via [méthode " +"gui_input]. Le contrôle ne recevra pas non plus les signaux [signal " +"mouse_entered] et [signal mouse_exited]. Cela ne bloquera pas d'autres " +"contrôles de recevoir ces événements et n'émettra pas les signaux. Les " +"événements ignorés ne seront pas traités automatiquement." #: doc/classes/Control.xml msgid "" "The control will grow to the left or top to make up if its minimum size is " "changed to be greater than its current size on the respective axis." msgstr "" +"Le contrôle va croître à gauche ou en haut pour compenser si sa taille " +"minimale est plus grande que sa taille actuelle selon l'axe correspondant." #: doc/classes/Control.xml msgid "" "The control will grow to the right or bottom to make up if its minimum size " "is changed to be greater than its current size on the respective axis." msgstr "" +"Le contrôle va croître à droite ou en bas pour compenser si sa taille " +"minimale est plus grande que sa taille actuelle selon l'axe correspondant." #: doc/classes/Control.xml msgid "" "The control will grow in both directions equally to make up if its minimum " "size is changed to be greater than its current size." msgstr "" +"Le contrôle va croître dans les deux directions de façon égale pour " +"compenser si sa taille minimale est plus grande que sa taille actuelle." #: doc/classes/Control.xml msgid "" @@ -21928,6 +23024,17 @@ msgid "" "masks]Collision layers and masks[/url] in the documentation for more " "information." msgstr "" +"Le calque physique de cette zone.\n" +"Les objets de collision peuvent exister dans l'un des 32 calques " +"différentes. Ces calques fonctionnent comme un système de marquage, et ne " +"sont pas visuels. Un objet de collision peut utiliser ces calques pour " +"sélectionner avec quels objets il peut entrer en collision, en utilisant la " +"propriété [member collision_mask].\n" +"Un contact est détecté si l'objet A est dans l'un des calques que l'objet B " +"observe, ou si l'objet B est dans tous les calques observés par l'objet A. " +"Voir [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-" +"layers-and-masks]Calques et masques de collision[/url] dans la documentation " +"pour plus d'informations." #: modules/csg/doc_classes/CSGShape.xml msgid "" @@ -22097,6 +23204,8 @@ msgid "" "Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] " "constants." msgstr "" +"Retourne une [Image] pour le côté du [CubeMap] correspondant à l'une des " +"constantes [enum Side]." #: doc/classes/CubeMap.xml #, fuzzy @@ -22108,6 +23217,8 @@ msgid "" "Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] " "constants." msgstr "" +"Définit une [Image] pour le côté du [CubeMap] correspondant à l'une des " +"constantes [enum Side]." #: doc/classes/CubeMap.xml msgid "" @@ -22122,6 +23233,8 @@ msgid "" "The lossy storage quality of the [CubeMap] if the storage mode is set to " "[constant STORAGE_COMPRESS_LOSSY]." msgstr "" +"La qualité de stockage avec perte du [CubeMap] si le mode de stockage est " +"défini à [constant STORAGE_COMPRESS_LOSSY]." #: doc/classes/CubeMap.xml #, fuzzy @@ -22181,10 +23294,14 @@ msgstr "Répète (plutôt que s'arrête aux bords)." #: doc/classes/CubeMap.xml msgid "Turn on magnifying filter, to enable smooth zooming in of the texture." msgstr "" +"Active le filtre grossissant pour permettre un agrandissement plus lisse de " +"la texture." #: doc/classes/CubeMap.xml msgid "Default flags. Generate mipmaps, repeat, and filter are enabled." msgstr "" +"Les drapeaux par défaut. Cela génère les mipmaps, et active la répétition et " +"le filtrage de la texture." #: doc/classes/CubeMesh.xml msgid "Generate an axis-aligned cuboid [PrimitiveMesh]." @@ -22627,6 +23744,19 @@ msgid "" "segment may deviate from the real curve, before the segment has to be " "subdivided." msgstr "" +"Retourne une liste de points le long de la courbe, avec une densité de point " +"contrôlée par sa courbure. C'est-à -dire que les virages de la courbe auront " +"plus de points que les segments bien droits.\n" +"Cette approximation génère des segments droits entre chaque point, puis " +"divise ces segments jusqu'à ce que la nouvelle forme soit assez proche.\n" +"L'argument [code]max_stages[/code] contrôle le nombre de divisions qu'un " +"segment de courbe peut avoir avant qu'il soit considéré comme assez proche. " +"Chaque division découpe le segment en deux, de sorte que les 5 étapes par " +"défaut peuvent atteindre 32 divisions par segment de la courbe. Soyez donc " +"prudent si vous augmentez cette valeur !\n" +"L'argument [code]tolerance_degrees[/code] contrôle de quel angle, en degrés, " +"le point du milieu d'un segment peut s'éloigné de la courbe avant que ce " +"segment ne soit divisé." #: doc/classes/Curve2D.xml msgid "" @@ -22636,6 +23766,11 @@ msgid "" "smaller the distance, the more points in the cache and the more memory it " "will consume, so use with care." msgstr "" +"La distance en pixels entre deux points du cache qui sont voisins. Le " +"changement recalcule le cache des points la fois suivante où [method " +"get_baked_points] ou [method get_baked_length] sera appelée. Plus la " +"distance est petite, plus il y a de points dans ce cache, et donc plus il " +"consommera de mémoire, à utiliser donc avec soin." #: doc/classes/Curve3D.xml msgid "Describes a Bézier curve in 3D space." @@ -22788,12 +23923,16 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." msgstr "La [code]curve[/code] rendue sur la texture." #: doc/classes/CurveTexture.xml -msgid "The width of the texture." -msgstr "La largeur de 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 " +"the cost of increased generation time and memory usage." +msgstr "" #: doc/classes/CylinderMesh.xml msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -23220,6 +24359,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "Retourne la liste des clés dans le [Dictionary]." #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "Retourne le nombre de clés dans le dictionnaire." @@ -23403,6 +24549,13 @@ msgid "" "code] or [code]res://somedir/newdir[/code]).\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Change le dossier actuellement ouvert par celui donné en argument. " +"L'argument peut être relatif au répertoire actuel (par exemple " +"[code]nouveau_dossier[/code] ou [code]./dossier[ /code,)] ou être un chemin " +"absolu (par exemple [code]/tmp/dossier[/code] ou [code]res://parent/" +"dossier[ /code)].\n" +"Retourne une des constantes de code [enum Error] (et [code]OK[/code] en cas " +"de succès)." #: doc/classes/Directory.xml msgid "" @@ -23425,6 +24578,10 @@ msgid "" "call is a directory ([code].[/code] and [code]..[/code] are considered " "directories)." msgstr "" +"Retourne si l'élément actuellement traité lors du dernier appel à [method " +"get_next] est un dossier (le dossier actuel [code].[/code] et le dossier " +"parent [code]..[/code] comptent aussi des dossiers ordinaires pour cette " +"méthode)." #: doc/classes/Directory.xml msgid "" @@ -23455,6 +24612,8 @@ msgid "" "Returns the currently opened directory's drive index. See [method get_drive] " "to convert returned index to the name of the drive." msgstr "" +"Retourne l'index du disque du dossier actuellement ouvert. Voir [method " +"get_drive] pour convertir cet index retourné en nom du disque." #: doc/classes/Directory.xml msgid "" @@ -23466,6 +24625,14 @@ msgid "" "On other platforms, or if the requested drive does not exist, the method " "returns an empty String." msgstr "" +"Sur Windows, retourne le nom du disque (du moins la partition) passé en " +"argument (par exemple [code]C:[/code)].\n" +"Sur macOS, retourne le chemin vers le volume monté qui est passé en " +"argument.\n" +"Sur Linux, retourne le chemin vers le volume monté, ou le favoris GTK 3, " +"passé en argument.\n" +"Pour les autres plates-formes, ou si le disque demandé n'existe pas, la " +"méthode retourne une chaîne vide." #: doc/classes/Directory.xml msgid "" @@ -23475,6 +24642,12 @@ msgid "" "On Linux, returns the number of mounted volumes and GTK 3 bookmarks.\n" "On other platforms, the method returns 0." msgstr "" +"Sur Windows, retourne le nombre de disque (de partitions) montés sur le " +"système de fichiers actuel.\n" +"Sur macOS, retourne le nombre de volumes montés.\n" +"Sur Linux, retourne le nombre de volumes montés, ainsi que les favoris GTK " +"3.\n" +"Pour les autres plates-formes, la méthode retourne 0." #: doc/classes/Directory.xml msgid "" @@ -23486,6 +24659,14 @@ msgid "" "closes the stream automatically (i.e. [method list_dir_end] would not be " "mandatory in such a case)." msgstr "" +"Retourne l'élément suivant (un fichier ou un dossier) dans le dossier actuel " +"(y compris [code].[/code] et [code].[/code], sauf si " +"[code]skip_navigational[/code] a été passé lors de l'appel [method " +"list_dir_begin)].\n" +"Le nom du fichier ou du dossier est retourné (et non pas son chemin " +"complet). Une fois que le flux a été entièrement traité, la méthode retourne " +"une String vide et ferme automatiquement ce flux (dans ce cas, l'appel à " +"[méthod list_dir_end] n'était pas obligatoire)." #: doc/classes/Directory.xml msgid "" @@ -23522,6 +24703,8 @@ msgid "" "Closes the current stream opened with [method list_dir_begin] (whether it " "has been fully processed with [method get_next] does not matter)." msgstr "" +"Ferme le flux ouvert actuel avec [method list_dir_begin] (qu'il ait été " +"entièrement traité avec [method get_next] n'a pas d'importance)." #: doc/classes/Directory.xml msgid "" @@ -23531,6 +24714,11 @@ msgid "" "make_dir_recursive]).\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Crée un dossier. L'argument peut être un chemin relatif au dossier actuel, " +"ou un chemin absolu. Le dossier cible doit être placé dans un dossier déjà " +"existant (pour créer les dossiers intermédiaires, voir [méthod " +"make_dir_recursive)].\n" +"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)." #: doc/classes/Directory.xml msgid "" @@ -23539,6 +24727,10 @@ msgid "" "to the current directory, or an absolute path.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Crée un dossier cible et ainsi que tous les dossiers intermédiaires " +"nécessaires, en appelant [method make_dir] de façon récursive. L'argument " +"peut être un chemin relatif au dossier actuel, ou un chemin absolu.\n" +"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)." #: doc/classes/Directory.xml msgid "" @@ -23565,6 +24757,12 @@ msgid "" "move_to_trash] instead.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Supprime définitivement le fichier cible ou un répertoire s'il est vide. " +"L'argument peut être un chemin relatif au dossier actuel, ou un chemin " +"absolu. Si le répertoire cible n'est pas vide, l'opération échouera.\n" +"Si vous ne voulez pas supprimer définitivement le fichier ou le dossier, " +"utilisez plutôt [method OS.move_to_trash].\n" +"Retourne un des codes [enum Error] (et [code]OK[/code] en cas de succès)." #: doc/classes/Directory.xml msgid "" @@ -23574,6 +24772,12 @@ msgid "" "is not access-protected, it will be overwritten.\n" "Returns one of the [enum Error] code constants ([code]OK[/code] on success)." msgstr "" +"Renomme (déplace) le fichier ou le dossier [code]from[/code] vers la " +"destination [code]to[/code]. Les deux arguments devraient être des chemins " +"vers des fichiers ou des dossiers, soit relatifs ou absolus. Si le fichier " +"ou le dossier de destination existe et que son accès n'est pas protégé en " +"écriture, il sera écrasé.\n" +"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)." #: doc/classes/DTLSServer.xml msgid "Helper class to implement a DTLS server." @@ -23713,6 +24917,10 @@ msgid "" "[code]chain[/code] parameter to provide additional CA chain information " "along with the certificate." msgstr "" +"Configure le serveur DTLS pour utiliser la clé privée [code]private_key[/" +"code] et fourni le certificat [code]certificate[/code] aux clients. Vous " +"pouvez passer le paramètre facultatif [code]chain[/code] pour fournir des " +"informations supplémentaires sur la chaîne \"CA\" en plus du certificat." #: doc/classes/DTLSServer.xml msgid "" @@ -23723,6 +24931,12 @@ msgid "" "[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of " "the new connections will be invalid due to cookie exchange." msgstr "" +"Essaye de débuter une poignée de main DTLS avec le pair [code]udp_peer[/" +"code] qui doit être connecté au préalable (voir [method PacketPeerUDP." +"connect_to_host)]\n" +"[b]Note :[/b] Vous devez vérifier que le status du PacketPeerUDP est " +"[constant PacketPeerDTLS.STATUS_HANDSHAKING], car il est commun que 50% des " +"nouvelles connexions deviennent invalides en raison de l'échange de cookies." #: doc/classes/DynamicFont.xml msgid "DynamicFont renders vector font files at runtime." @@ -23961,6 +25175,13 @@ msgid "" "To use [EditorExportPlugin], register it using the [method EditorPlugin." "add_export_plugin] method first." msgstr "" +"Les [EditorExportPlugin] sont automatiquement invoqués lorsque l'utilisateur " +"exporte le projet. Ils sont plus le souvent utilisés de déterminer quels " +"fichiers doivent être inclus dans le projet exporté. Pour chaque greffon, " +"[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]." #: doc/classes/EditorExportPlugin.xml msgid "" @@ -23971,12 +25192,22 @@ msgid "" "exported project. [code]flags[/code] is only used when running a runnable " "profile, e.g. when using native run on Android." msgstr "" +"La méthode virtuelle à surcharger par l'utilisateur. Il est appelé lorsque " +"l'exportation commence et fournit toutes les informations sur cette " +"exportation. [code]features[/code] est la liste des fonctionnalités de " +"l'exportation, [code]is_debug[/code] est [code]true[/code] pour les exports " +"avec l'option de débogage, et [code]path[/code] est le chemin cible pour " +"l'export du projet. [code]flags[/code] est seulement utilisé pour les " +"profils de lancement, par exemple lorsque vous utilisez le lancement natif " +"sur Android." #: doc/classes/EditorExportPlugin.xml msgid "" "Virtual method to be overridden by the user. Called when the export is " "finished." msgstr "" +"Une méthode virtuelle à surcharger par l'utilisateur. Elle est appelée " +"lorsque l'exportation est terminée." #: doc/classes/EditorExportPlugin.xml msgid "" @@ -23988,6 +25219,14 @@ msgid "" "Calling [method skip] inside this callback will make the file not included " "in the export." msgstr "" +"Une méthode virtuelle à surcharger par l'utilisateur. Elle est appelée pour " +"chaque fichier exporté, passant des arguments qui permettent d'identifier le " +"fichier exporté. [code]path[/code] est le chemin du fichier, [code]type[/" +"code] est la [Resource] représentée par ce fichier (par exemple " +"[PackedScene]) et [code]features[/code] est la liste des fonctionnalités de " +"cette exportation.\n" +"Appeler [method skip] dans cette méthode surchargée pour ne pas exporter ce " +"fichier." #: doc/classes/EditorExportPlugin.xml msgid "" @@ -23996,6 +25235,11 @@ msgid "" "the file. If [code]remap[/code] is [code]true[/code], file will not be " "exported, but instead remapped to the given [code]path[/code]." msgstr "" +"Ajoute un fichier personnalisé à exporter. [code]path[/code] est le chemin " +"virtuel qui peut être utilisé pour charger le fichier, [code]file[/code] " +"représente les données binaires du fichier. Si [code]remap[/code] est " +"[code]true[/code], le fichier ne sera pas exporté, mais sera remplacé par " +"une référence au chemin [code]path[/code]." #: doc/classes/EditorExportPlugin.xml msgid "" @@ -24008,6 +25252,8 @@ msgid "" "Adds a C++ code to the iOS export. The final code is created from the code " "appended by each active export plugin." msgstr "" +"Ajoute un code C++ à l'exportation iOS. Le code final est créé à partir de " +"ce code ajouté à chaque greffon d'exportation actif." #: doc/classes/EditorExportPlugin.xml msgid "" @@ -24161,48 +25407,68 @@ msgid "" "specified in [code]feature[/code]. When a feature is disabled, it will " "disappear from the editor entirely." msgstr "" +"Si [code]disable[/code] est [code]true[/code], désactive la fonction " +"d'éditeur spécifiée dans [code]feature[/code]. Lorsqu'une fonction est " +"désactivée, elle disparaîtra entièrement de l'éditeur." #: doc/classes/EditorFeatureProfile.xml msgid "" "The 3D editor. If this feature is disabled, the 3D editor won't display but " "3D nodes will still display in the Create New Node dialog." msgstr "" +"L'éditeur 3D. Si cette fonctionnalité est désactivée, l'éditeur 3D ne sera " +"pas affiché mais les nÅ“uds 3D seront toujours affichés dans le dialogue " +"\"Créer un nouveau nÅ“ud\"." #: doc/classes/EditorFeatureProfile.xml msgid "" "The Script tab, which contains the script editor and class reference " "browser. If this feature is disabled, the Script tab won't display." msgstr "" +"L'onglet \"Script\", qui contient l'éditeur de script et le navigateur de " +"documentation des classes. Si cette fonctionnalité est désactivée, " +"l'affichage de l'onglet \"Script\" ne sera pas affiché." #: doc/classes/EditorFeatureProfile.xml msgid "" "The AssetLib tab. If this feature is disabled, the AssetLib tab won't " "display." msgstr "" +"L'onglet AssetLib. Si cette caractéristique est désactivée, l'onglet " +"AssetLib ne sera pas affiché." #: doc/classes/EditorFeatureProfile.xml msgid "" "Scene tree editing. If this feature is disabled, the Scene tree dock will " "still be visible but will be read-only." msgstr "" +"L'éditeur de l'arborescence de la scène. Si cette caractéristique est " +"désactivée, le dock de l'arborescence de la scène sera toujours visible, " +"mais ne pourra pas être modifié." #: doc/classes/EditorFeatureProfile.xml msgid "" "The Node dock. If this feature is disabled, signals and groups won't be " "visible and modifiable from the editor." msgstr "" +"Le dock des NÅ“uds. Si cette caractéristique est désactivée, les signaux et " +"les groupes ne seront pas affichés ni modifiables dans l'éditeur." #: doc/classes/EditorFeatureProfile.xml msgid "" "The FileSystem dock. If this feature is disabled, the FileSystem dock won't " "be visible." msgstr "" +"Le dock de système de fichiers. Si cette caractéristique est désactivée, le " +"dock de système de fichiers ne sera pas visible." #: doc/classes/EditorFeatureProfile.xml msgid "" "The Import dock. If this feature is disabled, the Import dock won't be " "visible." msgstr "" +"Le dock d'importation. Si cette caractéristique est désactivée, le dock " +"d'importation ne sera pas visible." #: doc/classes/EditorFeatureProfile.xml doc/classes/SpatialMaterial.xml msgid "Represents the size of the [enum Feature] enum." @@ -24853,6 +26119,19 @@ msgid "" "To use [EditorInspectorPlugin], register it using the [method EditorPlugin." "add_inspector_plugin] method first." msgstr "" +"[EditorInspectorPlugin] permet d'ajouter des éditeurs de propriétés " +"personnalisés dans [EditorInspector].\n" +"Lorsqu'un objet est modifié, la fonction [method can_handle] est appelée et " +"doit retourner [code]true[/code] si ce type d'objet est supporté.\n" +"Si supporté, la fonction [method parse_begin] sera appelée, permettant de " +"placer des contrôles personnalisés au début de la classe.\n" +"Puis, les méthodes [méthod parse_category] et [method parse_property] seront " +"appelées pour chaque catégorie et chaque propriété. Elles offrent la " +"possibilité d'ajouter d'autres contrôles personnalisés à l'inspecteur.\n" +"Enfin, la méthode [method parse_end] sera appelée.\n" +"Sur chacun de ces appels, les methodes \"add\" peuvent être appelées.\n" +"Pour utiliser votre [EditorInspectorPlugin], commencez par l'enregistrer " +"avec la méthode [method EditorPlugin.add_inspector_greffon]." #: doc/classes/EditorInspectorPlugin.xml msgid "Inspector plugins" @@ -25136,6 +26415,8 @@ msgstr "" msgid "" "Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]." msgstr "" +"Ajoute un script à [code]path[/code] à la liste des scripts chargés " +"automatiquement sous le nom [code]name[/code]." #: doc/classes/EditorPlugin.xml msgid "" @@ -25145,6 +26426,12 @@ msgid "" "your custom control with [method remove_control_from_bottom_panel] and free " "it with [method Node.queue_free]." msgstr "" +"Ajoute un contrôle au panneau du bus (avec \"Sortie\", \"Deboggage\", " +"\"Animation\", etc.). Retourne une référence au bouton ajouté. Il revient à " +"vous de masquer le bouton si besoin. Lorsque votre greffon est désactivé, " +"assurez-vous de supprimer votre contrôle personnalisé avec [method " +"remove_control_from_bottom_panel] et de le libérer avec [method Node." +"queue_free]" #: doc/classes/EditorPlugin.xml msgid "" @@ -25157,6 +26444,15 @@ msgid "" "with [method remove_control_from_container] and free it with [method Node." "queue_free]." msgstr "" +"Ajoute un contrôle personnalisé à un conteneur (voir [enum " +"CustomControlContainer)]. Il existe de nombreux emplacements où des " +"contrôles personnalisés peuvent être ajoutés dans l'interface utilisateur de " +"l'éditeur.\n" +"N'oubliez pas que vous devez gérer la visibilité de vos contrôles " +"personnalisés vous-même (et probablement le cacher après l'avoir ajouté).\n" +"Lorsque votre greffon est désactivé, assurez-vous de supprimer votre " +"contrôle personnalisé avec [method remove_control_from_container] et de le " +"libérer avec [method Node.queue_free]" #: doc/classes/EditorPlugin.xml msgid "" @@ -25167,6 +26463,13 @@ msgid "" "with [method remove_control_from_docks] and free it with [method Node." "queue_free]." msgstr "" +"Ajoute le contrôle à un emplacement spécifique du dock (voir [enum DockSlot] " +"pour les options).\n" +"Si le dock est repositionné et aussi longtemps que le greffon est actif, " +"l'éditeur enregistrera la position du dock pour d'autres sessions.\n" +"Lorsque votre greffon est désactivé, assurez-vous de supprimer votre " +"contrôle personnalisé avec [method remove_control_from_container] et de le " +"libérer avec [method Node.queue_free]" #: doc/classes/EditorPlugin.xml msgid "" @@ -25181,6 +26484,16 @@ msgid "" "During run-time, this will be a simple object with a script so this function " "does not need to be called then." msgstr "" +"Ajoute un type personnalisé qui apparaîtra dans la liste des nÅ“uds ou des " +"ressources. Une icône peut être spécifiée en option.\n" +"Lorsque le nÅ“ud ou la ressource est sélectionné, le type de base sera " +"instancié (c'est-à -dire \"Spatial, \"Control\", \"Resource\"), puis le " +"script sera chargé et défini pour cet objet.\n" +"Vous pouvez utiliser la méthode virtuelle [method handles] pour vérifier si " +"votre objet personnalisé est édité en vérifiant le script ou en utilisant le " +"mot-clé [code]is[/code].\n" +"Pendant l'exécution, ce sera un objet simple avec un script de sorte que " +"cette fonction n'a pas besoin d'être appelée à ce moment." #: doc/classes/EditorPlugin.xml msgid "" @@ -25188,6 +26501,10 @@ msgid "" "tasks when the project is being exported.\n" "See [method add_inspector_plugin] for an example of how to register a plugin." msgstr "" +"Enregistre un nouveau [EditorExportPlugin]. Les greffons d'exportation sont " +"utilisés pour effectuer des tâches lorsque le projet est exporté.\n" +"Voir [method add_inspector_plugin] pour un exemple sur comment enregistrer " +"un greffon." #: doc/classes/EditorPlugin.xml msgid "" @@ -25197,6 +26514,13 @@ msgid "" "add_scene_import_plugin] instead.\n" "See [method add_inspector_plugin] for an example of how to register a plugin." msgstr "" +"Enregistre un nouveau [EditorImportPlugin]. Les greffons d'importation sont " +"utilisés pour importer des éléments personnalisés et non reconnus comme un " +"type personnalisé [Resource].\n" +"[b]Note :[/b] Si vous voulez importer des formats d'éléments 3D " +"personnalisés, utilisez plutôt [method add_scene_import_plugin].\n" +"Voir [method add_inspector_plugin] pour un exemple sur comment enregistrer " +"un greffon." #: doc/classes/EditorPlugin.xml msgid "" @@ -25218,6 +26542,24 @@ msgid "" " remove_inspector_plugin(inspector_plugin)\n" "[/codeblock]" msgstr "" +"Enregistre un nouveau [EditorInspectorPlugin]. Les greffons de l'inspecteur " +"sont utilisés pour étendre [EditorInspector] et fournir des outils de " +"configuration personnalisés pour les propriétés de votre objet.\n" +"[b]Note :[/b] Utilisez toujours [method remove_inspector_plugin] pour " +"supprimer l'enregistrement de votre [EditorInspectorPlugin] lorsque votre " +"[EditorPlugin] est désactivé pour empêcher les fuites de mémoire et un " +"comportement inattendu.\n" +"[codeblock]\n" +"const MyInspectorPlugin = preload(\"res://addons/votre_greffon/le/chemin/" +"vers/votre/script.gd\")\n" +"var inspector_plugin = MyInspectorPlugin.new()\n" +"\n" +"func _enter_tree():\n" +" add_inspector_plugin(inspector_plugin)\n" +"\n" +"func _exit_tree():\n" +" remove_inspector_plugin(inspector_plugin)\n" +"[/codeblock]" #: doc/classes/EditorPlugin.xml msgid "" @@ -25544,13 +26886,24 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" -"Retourne l'état de votre greffon de l'éditeur. Ceci est utilisé pour sauver " -"la scène (ainsi l'état est maintenu lors de l'ouverture à nouveau) et pour " -"les onglets (pour que l'état puisse être restauré lorsque l'onglet retourne)." #: doc/classes/EditorPlugin.xml msgid "" @@ -25563,13 +26916,19 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" -"Retourne la mise en page de l'interface du greffon. Ceci permet " -"d'enregistrer la mise en page de l'éditeur du projet lorsqu'il s'agit d'un " -"fichier d'éditeur (par exemple en changeant la position d'un dock)." #: doc/classes/EditorPlugin.xml msgid "" @@ -25593,6 +26952,9 @@ msgid "" "the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and " "[b]AssetLib[/b])." msgstr "" +"Retourne [code]true[/code] si c'est ce greffon de l'éditeur concerne l'écran " +"principal (qui va dans le sélecteur d'espace de travail à côté de [b]2D[/b], " +"[b]3D[/b], [b]Script[/b] et [b]AssetLib[/b)]." #: doc/classes/EditorPlugin.xml msgid "Minimizes the bottom panel." @@ -25698,11 +27060,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." -msgstr "Restaurer l’état enregistré par [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" +msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -25998,6 +27379,17 @@ msgid "" "[code]receiver_func[/code] will still be called, but the preview will be " "null." msgstr "" +"Met la [code]resource[/code] modifiée en attente pour être prévisualisée. " +"Une fois la prévisualisation prête, la méthode [code]receiver_func[/code] du " +"[code]receiver[/code] sera appelée. Le [code]receiver_func[/code] doit " +"prendre les quatre arguments suivants : le chemin (\"path\") [String], la " +"[Texture] de l'aperçu (\"preview\"), la [Texture] de la vignette " +"(\"thumbnail_preview\") et les données personnées (\"userdata\") sous forme " +"de [Variant]. [code]userdata[/code] peut continir n'importe quel type de " +"données, et sera retourné quand [code]receiver_func[/code] sera appelé.\n" +"[b]Note :[/b] S'il n'était pas possible de créer la prévisualisation, " +"[code]receiver_func[/code] sera toujours appelé, mais la prévisualisation " +"sera \"null\"." #: doc/classes/EditorResourcePreview.xml msgid "" @@ -26011,6 +27403,18 @@ msgid "" "[code]receiver_func[/code] will still be called, but the preview will be " "null." msgstr "" +"Met le fichier de ressource situé à [code]path[/code] en attente pour être " +"prévisualisé. Une fois la prévisualisation prête, la méthode " +"[code]receiver_func[/code] du [code]receiver[/code] sera appelée. Le " +"[code]receiver_func[/code] doit prendre les quatre arguments suivants : le " +"chemin (\"path\") [String], la [Texture] de l'aperçu (\"preview\"), la " +"[Texture] de la vignette (\"thumbnail_preview\") et les données personnées " +"(\"userdata\") sous forme de [Variant]. [code]userdata[/code] peut continir " +"n'importe quel type de données, et sera retourné quand [code]receiver_func[/" +"code] sera appelé.\n" +"[b]Note :[/b] S'il n'était pas possible de créer la prévisualisation, " +"[code]receiver_func[/code] sera toujours appelé, mais la prévisualisation " +"sera \"null\"." #: doc/classes/EditorResourcePreview.xml msgid "Removes a custom preview generator." @@ -26286,10 +27690,19 @@ msgid "" "[b]Note:[/b] You must set the [member script_owner] for the custom context " "menu items to work." msgstr "" +"Similaire à [EditorResourcePicker], ce nÅ“ud [Control] est utilisé dans le " +"dock d'inspecteur de l'éditeur, mais seulement pour modifier la propriété " +"[code]script[/code] d'un [Node]. Les options par défaut pour créer de " +"nouvelles ressources de tous les sous-types possibles sont remplacées par " +"des boutons dédiés qui ouvrent le dialogue \"Attaché un Script\". Peut être " +"utilisé avec [EditorInspectorPlugin] pour recréer le même comportement.\n" +"[b]Note :[/b] Vous devez définir le [member script_owner] pour les éléments " +"de menu contextuel personnalisés fonctionnent." #: doc/classes/EditorScriptPicker.xml msgid "The owner [Node] of the script property that holds the edited resource." msgstr "" +"Le [Node] propriétaire de la propriété Script qui a la ressource modifiée." #: doc/classes/EditorSelection.xml msgid "Manages the SceneTree selection in the editor." @@ -26360,6 +27773,28 @@ msgid "" "[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access " "the singleton using [method EditorInterface.get_editor_settings]." msgstr "" +"L'objet qui détient les paramètres de l'éditeur indépendant du projet. Ces " +"paramètres sont généralement visibles dans le menu [b]Éditeur > Paramètres " +"de l'éditeur[/b].\n" +"Les noms de propriété utilisent des délimiteurs avec des barres obliques (\"/" +"\") pour distinguer les sections. Les valeurs de réglage peuvent être de " +"tout type [Variant]. Il est recommandé d'utiliser la casse [code]snake_case[/" +"code] pour que les paramètres de l'éditeur soient compatibles avec l'éditeur " +"Godot lui-même.\n" +"L'accès aux paramètres peut être fait en utilisant les méthodes suivantes :\n" +"[codeblock]\n" +"# `settings.set(\"une/propriete\", value)` fonctionne aussi puisque cette " +"classe surcharge `_set()` en interne.\n" +"settings.set_setting(\"une/propriete\",value)\n" +"\n" +"# `settings.get(\"une/propriete\", value)` fonctionne aussi puisque cette " +"classe surcharge `_get()` en interne.\n" +"settings.get_setting(\"une/propriete\")\n" +"\n" +"var list_of_settings = settings.get_property_list()\n" +"[/codeblock]\n" +"[b]Note :[/b] Cette classe ne devrait être pas instanciée. Accédez plutôt au " +"singleton [method EditorInterface.get_editor_settings]" #: doc/classes/EditorSettings.xml msgid "" @@ -26382,10 +27817,29 @@ msgid "" "editor_settings.add_property_info(property_info)\n" "[/codeblock]" msgstr "" +"Ajoute une info de propriété personnalisée à une propriété. Le dictionnaire " +"doit contenir :\n" +"- [code]name[/code]: [String] (le nom de la propriété)\n" +"- [code]type[/code]: [int] (voir [enum Variant.Type])\n" +"- en option [code]hint[/code]: [int] (voir [enum PropertyHint]) et " +"[code]hint_string[/code]: [String]\n" +"[b]Exemple :[/b]\n" +"[codeblock]\n" +"editor_settings.set(\"category/property_name\", 0)\n" +"\n" +"var property_info = {\n" +" \"name\": \"category/property_name\",\n" +" \"type\": TYPE_INT,\n" +" \"hint\": PROPERTY_HINT_ENUM,\n" +" \"hint_string\": \"un,deux,trois\"\n" +"}\n" +"\n" +"editor_settings.add_property_info(property_info)\n" +"[/codeblock]" #: doc/classes/EditorSettings.xml msgid "Erases the setting whose name is specified by [code]property[/code]." -msgstr "" +msgstr "Efface le réglage nommé [code]property[/code]." #: doc/classes/EditorSettings.xml msgid "Returns the list of favorite files and directories for this project." @@ -26404,12 +27858,17 @@ msgid "" "subdirectory inside the settings path where project-specific settings are " "saved." msgstr "" +"Retourne le chemin des paramètres spécifiques à ce projet. Les projets ont " +"tous un sous-dossier unique où les paramètres spécifiques au projet sont " +"sauvegardés." #: doc/classes/EditorSettings.xml msgid "" "Returns the list of recently visited folders in the file dialog for this " "project." msgstr "" +"Retourne la liste des dossiers récemment visités dans le dialogue des " +"fichiers de ce projet." #: doc/classes/EditorSettings.xml msgid "" @@ -26424,6 +27883,11 @@ msgid "" "[code]settings/tmp[/code] - Used for temporary storage of files\n" "[code]settings/templates[/code] - Where export templates are located" msgstr "" +"Retourne le chemin des réglages généraux du moteur. Dans ce chemin, vous " +"pouvez trouver des chemins standards tels que :\n" +"[code]settings/tmp[/code] - L'emplacement où sont stockés les fichiers " +"temporaires\n" +"[code]settings/templates[/code] - L'emplacement où sont stockés les modèles" #: doc/classes/EditorSettings.xml msgid "" @@ -26793,6 +28257,14 @@ msgid "" "plug-n-play experience. A custom VCS plugin is supposed to inherit from " "[EditorVCSInterface] and override these virtual functions." msgstr "" +"Définit l'API que l'éditeur utilise pour extraire des informations du VCS " +"utilisé. La mise en Å“uvre de cette API est incluse dans les greffons VCS, " +"qui sont des scripts qui héritent de [EditorVCSInterface] et sont liés (à la " +"demande) à au singleton de [EditorVCSInterface]. Plutôt qu'accomplir la " +"tâche elle-même, toutes les fonctions virtuelles énumérées ci-dessous " +"appellent les fonctions surchargées internes dans les greffons VCS pour " +"fournir un fonctionnement automatique. Un greffon VCS personnalisé devrait " +"hériter de [EditorVCSInterface] et surcharger ces fonctions virtuelles." #: doc/classes/EditorVCSInterface.xml #, fuzzy @@ -26967,6 +28439,16 @@ msgid "" "created. [code]offset_minutes[/code] is the timezone offset in minutes, " "recorded from the system timezone where the commit was created." msgstr "" +"Une fonction d'aide pour créer un [Dictionnaire] des données d'un commit. " +"[code]msg[/code] est le message de commit. [code]author[/code] est une " +"simple chaîne intelligible contenant tous les détails de l'auteur, par " +"exemple son e-mail et le nom comme configurés dans le VCS. [code]id[/code] " +"est le code de hachage du commit, dans lequel votre VCS peut fournir un " +"identifiant unique pour chaque commit. [code]unix_timestamp[/code] est " +"l'horodatage Unix basé sur UTC de la date de création de la commit. " +"[code]offset_minutes[/code] is le décalage horaire par rapport à UTC, in " +"minutes, enregistré depuis la zone horaire du système lors de la création du " +"commit." #: doc/classes/EditorVCSInterface.xml msgid "" @@ -27081,6 +28563,15 @@ msgid "" "[code]project_managers[/code] - Array of Strings, project manager names\n" "[code]developers[/code] - Array of Strings, developer names" msgstr "" +"Retourne les informations des auteurs du moteur dans un dictionnaire.\n" +"[code]lead_developers[/code] - Un tableau de String, avec le nom de " +"développeurs principaux\n" +"[code]fondateurs[/code] - Un tableau de String, le nom des " +"fondateurs\n" +"[code]project_managers[/code] - Un tableau de String, le nom des chefs de " +"projet\n" +"[code]developers[/code] - Un tableau de String, le nom de " +"développeurs" #: doc/classes/Engine.xml msgid "" @@ -27090,6 +28581,11 @@ msgid "" "[code]copyright[/code], [code]license[/code]} describing subsections of the " "component" msgstr "" +"Retourne un Array d'information sur le copyright dans un dictionnaire.\n" +"[code]name[/code] - String, le nom du composant\n" +"[code]parts[/code] - Un table de Dictionary {[code]files[/code], " +"[code]copyright[/code], [code]license[/code]} décrivant chaque paragraphe de " +"la licence du composant" #: doc/classes/Engine.xml msgid "" @@ -27099,6 +28595,11 @@ msgid "" "[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/" "code], [code]bronze_donors[/code]}" msgstr "" +"Retourne un Dictionnaire des Arrays de noms des donateurs.\n" +"{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], " +"[code]silver_sponsors[/code], [code]bronze_sponsors[/code], " +"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/" +"code], [code]bronze_donors[/code]}" #: doc/classes/Engine.xml msgid "" @@ -30810,7 +32311,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -30835,7 +32337,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -31691,6 +33194,15 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"Si [code]true[/code], met à jour les animations en réponse aux notifications " +"liées au processus." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" "Si [code]true[/code], les éléments de la grille sont centrés sur l'axe X." @@ -31746,6 +33258,10 @@ msgid "The assigned [MeshLibrary]." msgstr "La [MeshLibrary] assignée." #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -34536,7 +36052,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -34693,11 +36209,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" -"Retourne le mode de la souris. Voir les constantes pour plus d'informations." - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -34893,25 +36404,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" -"Définit le mode de la souris. Voir les constantes pour plus d'informations." - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -34947,6 +36439,26 @@ msgid "" msgstr "" #: doc/classes/Input.xml +#, fuzzy +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" +"Définit le mode de la souris. Voir les constantes pour plus d'informations." + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "Émis quand un contrôleur a été connecté ou déconnecté." @@ -35299,8 +36811,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -35584,9 +37096,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -40464,9 +41976,10 @@ msgstr "Un nÅ“ud utilisé pour afficher des [Mesh] en 2D." #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -41310,6 +42823,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Retourne le [RID] de la énième forme d'une zone." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -41332,10 +42850,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -41370,6 +42900,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml #, fuzzy msgid "Server interface for low-level 2D navigation access." @@ -41388,8 +42924,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -41438,7 +42978,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Renvoie [code]true[/code] si le chemin donné est filtré." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -41505,6 +43055,13 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" +"Retourne l'actuelle ligne du fichier interprété (actuellement non " +"implémenté)." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "Retourne la taille des cellules de la carte." @@ -41530,9 +43087,11 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -#, fuzzy -msgid "Returns the navigation path to reach the destination from the origin." -msgstr "Renvoie le traqueur de position à l'identification donnée." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." +msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" @@ -41549,6 +43108,13 @@ msgstr "Retourne [code]true[/code] si l'[AABB] est vide." msgid "Sets the map active." msgstr "Définit la carte comme active." +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "Définit le polygone de navigation de la tuile." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Set the map cell size used to weld the navigation mesh polygons." @@ -41565,15 +43131,63 @@ msgstr "Crée une nouvelle région." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Retourne [code]true[/code] si le [code]signal[/code] donné existe." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Retourne le maillage de navigation de l'élément." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Retourne [code]true[/code] si le [code]signal[/code] donné existe." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" +"Définit la [code]position[/code] du point avec l'identifiant [code]id[/code] " +"spécifié." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Retourne la hauteur du contenu." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -41584,6 +43198,13 @@ msgstr "Définit le polygone de navigation de la tuile." msgid "Sets the global transformation for the region." msgstr "Retourne la matrice de transformation globale de cet élément." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" +"Définit la [code]position[/code] du point avec l'identifiant [code]id[/code] " +"spécifié." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "Un agent 3D utilisé dans les navigations pour esquiver les collisions." @@ -41593,9 +43214,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -41613,9 +43241,16 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -#, fuzzy -msgid "Returns the path from start to finish in global coordinates." -msgstr "Le point de collision, dans les coordonnées globales." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" #: doc/classes/NavigationAgent.xml msgid "" @@ -41629,11 +43264,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -41679,6 +43327,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -41691,7 +43345,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -41720,6 +43380,13 @@ msgstr "La valeur de luminance maximale pour l'exposition automatique." msgid "The maximum speed that an agent can move." msgstr "Rotation maximale à travers la charnière." +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml #, fuzzy msgid "The distance to search for other agents." @@ -41784,9 +43451,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -41802,13 +43476,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Retourne le [RID] de la énième forme d'une zone." @@ -41829,6 +43496,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -41861,8 +43535,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml #, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "Retourne si la [code]class[/code] spécifiée est disponible ou non." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -41887,12 +43561,17 @@ msgstr "" "créé." #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" +"Si [code]value[/code] est [code]true[/code]], définit le [code]bit[/code] " +"spécifié dans le masque [nom collision_mask].\n" +"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] " +"spécifié dans le masque [nom collision_mask]." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -41905,14 +43584,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -41925,7 +43604,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -41953,13 +43632,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -41970,13 +43643,22 @@ msgstr "Si [code]true[/code], les titres des colonnes sont visibles." #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +#, fuzzy +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" +"Si [code]true[/code], les particules sera émise une seule fois puis " +"arrêtées. Équivalent à [member Particles.one_shot]." #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -41995,7 +43677,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -42060,7 +43742,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -42083,13 +43765,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -42139,8 +43821,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -42158,8 +43840,21 @@ msgstr "Une instance de [NavigationMesh]." #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -42188,10 +43883,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "Détermine si le [NavigationMeshInstance] est actif ou non." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "La ressource [NavigationMesh] à utiliser." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "Avertit quand une animation commence à jouer." @@ -42209,7 +43928,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -42249,7 +43970,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -42329,6 +44052,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -42365,6 +44096,31 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "A region of the 2D navigation map." +msgstr "Prépare le maillage de navigation." + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -42372,6 +44128,24 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "Détermine si le [NavigationMeshInstance] est actif ou non." + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "La ressource [NavigationMesh] à utiliser." + #: doc/classes/NavigationServer.xml #, fuzzy msgid "Server interface for low-level 3D navigation access." @@ -42474,6 +44248,12 @@ msgid "Bakes the navigation mesh." msgstr "Prépare le maillage de navigation." #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "Contrôle l'activation de ce serveur." @@ -44361,10 +46141,14 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "La rotation en degrés, relative au parent de ce nÅ“ud." #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" -"La mise à l'échelle du nÅ“ud. La valeur sans mise à l'échelle est [code](1, 1)" -"[/code]." #: doc/classes/Node2D.xml msgid "Local [Transform2D]." @@ -46807,8 +48591,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -51430,7 +53221,6 @@ msgid "A pooled array of bytes." msgstr "Un tableau compacté d'octets." #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "" "An array specifically designed to hold bytes. Optimized for memory usage, " "does not fragment the memory.\n" @@ -51462,7 +53252,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolByteArray()]\n" "array[0].push_back(123) # Accède à une copie du PoolByteArray\n" -"print(array) # [[]] (Un PoolByteArray vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolByteArray vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolByteArray] en entier doit être [i]réassigné[/i] avec " "[code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51480,6 +53270,8 @@ msgid "" "Constructs a new [PoolByteArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolByteArray]. En option, vous pouvez passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolByteArray.xml msgid "Appends a [PoolByteArray] at the end of this array." @@ -51611,7 +53403,6 @@ msgid "A pooled array of [Color]s." msgstr "Un tableau compacté de [Color]." #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [Color]. Optimized for memory usage, " "does not fragment the memory.\n" @@ -51645,7 +53436,7 @@ msgstr "" "var array = [PoolColorArray()]\n" "array[0].push_back(Color(0.1, 0.2, 0.3, 0.4)) # Accède à une copie du " "PoolColorArray\n" -"print(array) # [[]] (Un PoolColorArray vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolColorArray vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolColorArray] en entier doit être [i]réassigné[/i] avec " "[code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51664,6 +53455,8 @@ msgid "" "Constructs a new [PoolColorArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" +"Construit un nouvel [PoolColorArray]. En option, vous pouvez passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolColorArray.xml msgid "Appends a [PoolColorArray] at the end of this array." @@ -51690,7 +53483,6 @@ msgid "A pooled array of integers ([int])." msgstr "Un tableau compacté d'entiers ([int])." #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "" "An array specifically designed to hold integer values ([int]). Optimized for " "memory usage, does not fragment the memory.\n" @@ -51727,7 +53519,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolIntArray()]\n" "array[0].push_back(1234) # Accède à une copie du PoolIntArray\n" -"print(array) # [[]] (Un PoolIntArray vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolIntArray vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolIntArray] en entier doit être [i]réassigné[/i] avec " "[code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51750,8 +53542,8 @@ msgid "" "Constructs a new [PoolIntArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"Construit un nouvel [PoolIntArray]. En option, il est possible de passer un " -"[Array] générique qui sera converti." +"Construit un nouvel [PoolIntArray]. En option, vous pouvez passer un [Array] " +"générique qui sera converti." #: doc/classes/PoolIntArray.xml msgid "Appends a [PoolIntArray] at the end of this array." @@ -51776,7 +53568,6 @@ msgid "A pooled array of real numbers ([float])." msgstr "Un tableau compacté de flottants ([float])." #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "" "An array specifically designed to hold floating-point values. Optimized for " "memory usage, does not fragment the memory.\n" @@ -51815,7 +53606,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolRealArray()]\n" "array[0].push_back(12.34) # Accède à une copie du PoolRealArray\n" -"print(array) # [[]] (Un PoolRealArray vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolRealArray vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolRealArray] en entier doit être [i]réassigné[/i] avec " "[code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51841,7 +53632,7 @@ msgid "" "Constructs a new [PoolRealArray]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"Construit un nouvel [PoolRealArray]. En option, il est possible de passer un " +"Construit un nouvel [PoolRealArray]. En option, vous pouvez passer un " "[Array] générique qui sera converti." #: doc/classes/PoolRealArray.xml @@ -51858,7 +53649,6 @@ msgid "A pooled array of [String]s." msgstr "Un tableau compacté de [String]." #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [String]s. Optimized for memory " "usage, does not fragment the memory.\n" @@ -51890,7 +53680,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolStringArray()]\n" "array[0].push_back(\"hello\") # Accède à une copie du PoolStringArray\n" -"print(array) # [[]] (Un PoolStringArray vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolStringArray vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolStringArray] en entier doit être [i]réassigné[/i] " "avec [code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51938,7 +53728,6 @@ msgid "A pooled array of [Vector2]s." msgstr "Un tableau compacté de [Vector2]." #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "" "An array specifically designed to hold [Vector2]. Optimized for memory " "usage, does not fragment the memory.\n" @@ -51972,7 +53761,7 @@ msgstr "" "var array = [PoolVector2Array()]\n" "array[0].push_back(Vector2(12, 34)) # Accède à une copie du " "PoolVector2Array\n" -"print(array) # [[]] (Un PoolVector2Array vide dans un Array vide)\n" +"print(array) # [[]] (Un PoolVector2Array vide dans un Array)\n" "[/codeblock]\n" "Au lieu de ça, le [PoolVector2Array] en entier doit être [i]réassigné[/i] " "avec [code]=[/code] pour que sa modification soit prise en compte :\n" @@ -51996,8 +53785,8 @@ msgid "" "Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"Construit un nouvel [PoolVector2Array]. En option, il est possible de passer " -"un [Array] générique qui sera converti." +"Construit un nouvel [PoolVector2Array]. En option, vous pouvez passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolVector2Array.xml msgid "Appends a [PoolVector2Array] at the end of this array." @@ -52069,8 +53858,8 @@ msgid "" "Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic " "[Array] that will be converted." msgstr "" -"Construit un nouvel [PoolVector3Array]. En option, il est possible de passer " -"un [Array] générique qui sera converti." +"Construit un nouvel [PoolVector3Array]. En option, vous pouvez passer un " +"[Array] générique qui sera converti." #: doc/classes/PoolVector3Array.xml msgid "Appends a [PoolVector3Array] at the end of this array." @@ -53846,8 +55635,17 @@ msgstr "" "résultat d'une fonction qui retourne [code]void[/code] à une variable." #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." -msgstr "Le message à afficher avant les détails de crash du moteur." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." +msgstr "" #: doc/classes/ProjectSettings.xml msgid "" @@ -54099,6 +55897,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -54375,6 +56185,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "Le nom facultatif pour le claque 1 de physique 2D." @@ -54583,6 +56585,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "Le nom facultatif pour le claque 9 de rendu 2D." #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "Le nom facultatif pour le claque 1 de physique 3D." @@ -54857,6 +57051,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -56398,7 +58635,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -58779,6 +61015,26 @@ msgid "Makes text fill width." msgstr "Rempli le texte en largeur." #: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns top of the inline image to the top of the text." +msgstr "La hauteur de la boite mesuré depuis son centre." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns center of the inline image to the center of the text." +msgstr "Aligne les enfants avec le centre du conteneur." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "La hauteur de la boite mesuré depuis son centre." + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "Aligne les enfants avec le centre du conteneur." + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "Chaque élément de la liste à un chiffre comme marqueur." @@ -60605,8 +62861,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" "Un minuteur à un coup géré par l'arborescence, qui émet le signal [signal " "timeout] quand il se termine. Voir aussi [method SceneTree.create_timer].\n" @@ -62576,7 +64832,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -64939,20 +67200,15 @@ msgstr "" #: doc/classes/String.xml msgid "Constructs a new String from the given [bool]." -msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [bool] (booléen) " -"donné." +msgstr "Construit une nouvelle chaîne de caractères à partir du [bool] donné." #: doc/classes/String.xml msgid "Constructs a new String from the given [int]." -msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [int] (entier) donné." +msgstr "Construit une nouvelle chaîne de caractères à partir du [int] donné." #: doc/classes/String.xml msgid "Constructs a new String from the given [float]." -msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [float] (flottant) " -"donné." +msgstr "Construit une nouvelle chaîne de caractères à partir du [float] donné." #: doc/classes/String.xml msgid "Constructs a new String from the given [Vector2]." @@ -64971,7 +67227,8 @@ msgstr "" #: doc/classes/String.xml msgid "Constructs a new String from the given [Transform2D]." msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [Transform2D] donné." +"Construit une nouvelle chaîne de caractères à partir de la [Transform2D] " +"donnée." #: doc/classes/String.xml msgid "Constructs a new String from the given [Plane]." @@ -64987,7 +67244,8 @@ msgstr "Construit une nouvelle chaîne de caractères à partir du [AABB] donné #: doc/classes/String.xml msgid "Constructs a new String from the given [Basis]." -msgstr "Construit une nouvelle chaîne de caractères à partir du [Basis] donné." +msgstr "" +"Construit une nouvelle chaîne de caractères à partir de la [Basis] donnée." #: doc/classes/String.xml msgid "Constructs a new String from the given [Transform]." @@ -64998,14 +67256,12 @@ msgstr "" #: doc/classes/String.xml msgid "Constructs a new String from the given [Color]." msgstr "" -"Construit une nouvelle chaîne de caractères à partir de la [Color] (couleur) " -"donnée." +"Construit une nouvelle chaîne de caractères à partir de la [Color] donnée." #: doc/classes/String.xml msgid "Constructs a new String from the given [NodePath]." msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [NodePath] (chemin " -"du nÅ“ud) donné." +"Construit une nouvelle chaîne de caractères à partir du [NodePath] donné." #: doc/classes/String.xml msgid "Constructs a new String from the given [RID]." @@ -65014,8 +67270,7 @@ msgstr "Construit une nouvelle chaîne de caractères à partir du [RID] donné. #: doc/classes/String.xml msgid "Constructs a new String from the given [Dictionary]." msgstr "" -"Construit une nouvelle chaîne de caractères à partir du [Dictionary]" -"(dictionaire) donné." +"Construit une nouvelle chaîne de caractères à partir du [Dictionary] donné." #: doc/classes/String.xml msgid "Constructs a new String from the given [Array]." @@ -69447,6 +71702,11 @@ msgstr "" #: doc/classes/TileMap.xml #, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Si [code]true[/code], l'animation nommée existe." + +#: doc/classes/TileMap.xml +#, fuzzy msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "Si [code]true[/code], les UV de la cellule seront limités." @@ -69562,6 +71822,10 @@ msgstr "" "possibles." #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -70779,10 +73043,13 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" -"Retourne une copie de la transformation mise à jour l'échelle par le facteur " -"[code]scale[/code] spécifié, en utilisant la multiplication matricielle." #: doc/classes/Transform2D.xml msgid "" @@ -73205,10 +75472,11 @@ msgid "3Blue1Brown Essence of Linear Algebra" msgstr "3Blue1Brown Essence of Linear Algebra" #: doc/classes/Vector2.xml -#, fuzzy msgid "" "Constructs a new Vector2 from the given [code]x[/code] and [code]y[/code]." -msgstr "Construit une nouvelle chaîne de caractères à partir du [Plane] donné." +msgstr "" +"Construit un nouvel Vector2 à partir des [code]x[/code] et [code]y[/code] " +"donnés." #: doc/classes/Vector2.xml doc/classes/Vector3.xml msgid "" @@ -74866,11 +77134,14 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "Cet activateur arrêtera les nÅ“uds [Particles2D]." #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +#, fuzzy +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "Cet activateur arrêtera la fonction _process du parent." #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +#, fuzzy +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "Cet activateur arrêtera la fonction _physics_process du parent." #: doc/classes/VisibilityEnabler2D.xml @@ -74915,6 +77186,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "Le rectangle du VisibilityNotifier." #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml #, fuzzy msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -80177,6 +82458,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "Le nombre de shaders reconnectés dans cette trame." #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "Le nombre de changements de surface dans la trame." @@ -83724,8 +86015,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -83740,11 +86031,17 @@ msgstr "L'[Environment] du World." #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Retourne le [RID] de la énième forme d'une zone." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "Le scénario visuel du World." @@ -83759,8 +86056,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -83777,6 +86074,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Retourne le [RID] de la énième forme d'une zone." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/gl.po b/doc/translations/gl.po index 15aec4b4e1..92ad8f3f22 100644 --- a/doc/translations/gl.po +++ b/doc/translations/gl.po @@ -348,7 +348,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3380,6 +3380,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3392,6 +3398,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8367,7 +8379,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8566,7 +8578,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8583,10 +8598,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8771,7 +8782,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13614,7 +13627,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19089,11 +19102,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21317,9 +21340,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21330,9 +21367,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21445,11 +21491,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26084,7 +26149,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26106,7 +26172,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26912,6 +26979,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26962,6 +27035,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29352,7 +29429,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29501,10 +29578,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29698,24 +29771,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29751,6 +29806,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30058,8 +30131,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30322,9 +30395,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34630,9 +34703,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35430,6 +35504,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35452,10 +35530,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35490,6 +35580,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35506,8 +35602,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35535,7 +35635,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35599,6 +35709,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35622,7 +35736,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35639,6 +35756,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35654,14 +35777,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35670,6 +35835,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35679,9 +35848,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35699,7 +35875,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35714,11 +35898,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35759,6 +35956,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35771,7 +35974,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35798,6 +36007,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35860,9 +36076,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35878,13 +36101,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35904,6 +36120,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35934,8 +36157,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35957,9 +36180,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35973,14 +36196,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35992,7 +36215,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36020,29 +36243,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36061,7 +36284,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36124,7 +36347,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36145,13 +36368,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36201,8 +36424,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36219,8 +36442,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36249,10 +36485,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36269,7 +36529,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36309,7 +36571,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36389,6 +36653,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36425,6 +36697,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36432,6 +36728,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36507,6 +36819,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38270,7 +38588,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40363,8 +40687,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46710,7 +47041,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46955,6 +47295,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47180,6 +47532,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47388,6 +47932,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47655,6 +48391,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49157,7 +49936,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51304,6 +52082,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53041,8 +53835,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54763,7 +55557,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60864,6 +61663,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60970,6 +61773,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62101,7 +62908,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65772,11 +66584,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65816,6 +66629,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70561,6 +71384,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73757,8 +74590,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73773,8 +74606,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73792,8 +74630,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73811,6 +74649,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/hi.po b/doc/translations/hi.po index 021e1463f6..147b3b4099 100644 --- a/doc/translations/hi.po +++ b/doc/translations/hi.po @@ -347,7 +347,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3379,6 +3379,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3391,6 +3397,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8366,7 +8378,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8565,7 +8577,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8582,10 +8597,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8770,7 +8781,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13613,7 +13626,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19088,11 +19101,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19378,6 +19394,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21316,9 +21339,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21329,9 +21366,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21444,11 +21490,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26083,7 +26148,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26105,7 +26171,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26911,6 +26978,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26961,6 +27034,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29351,7 +29428,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29500,10 +29577,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29697,24 +29770,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29750,6 +29805,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30057,8 +30130,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30321,9 +30394,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34629,9 +34702,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35429,6 +35503,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35451,10 +35529,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35489,6 +35579,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35505,8 +35601,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35534,7 +35634,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35598,6 +35708,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35621,7 +35735,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35638,6 +35755,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35653,14 +35776,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35669,6 +35834,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35678,9 +35847,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35698,7 +35874,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35713,11 +35897,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35758,6 +35955,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35770,7 +35973,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35797,6 +36006,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35859,9 +36075,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35877,13 +36100,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35903,6 +36119,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35933,8 +36156,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35956,9 +36179,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35972,14 +36195,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35991,7 +36214,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36019,29 +36242,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36060,7 +36283,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36123,7 +36346,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36144,13 +36367,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36200,8 +36423,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36218,8 +36441,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36248,10 +36484,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36268,7 +36528,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36308,7 +36570,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36388,6 +36652,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36424,6 +36696,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36431,6 +36727,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36506,6 +36818,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38269,7 +38587,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40362,8 +40686,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46709,7 +47040,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46954,6 +47294,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47179,6 +47531,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47387,6 +47931,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47654,6 +48390,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49156,7 +49935,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51303,6 +52081,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53040,8 +53834,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54762,7 +55556,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60863,6 +61662,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60969,6 +61772,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62100,7 +62907,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65771,11 +66583,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65815,6 +66628,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70560,6 +71383,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73756,8 +74589,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73772,8 +74605,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73791,8 +74629,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73810,6 +74648,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/hu.po b/doc/translations/hu.po index 7ff6d66bf1..cda670b22d 100644 --- a/doc/translations/hu.po +++ b/doc/translations/hu.po @@ -10,12 +10,13 @@ # balintmaci <balintmaci@gmail.com>, 2021. # Balázs Püspök-Kiss <pkblazsak@gmail.com>, 2021. # Szevin <kevingeiger25@gmail.com>, 2022. +# 6Leoo6 <leo.takacs@yahoo.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-01-26 23:53+0000\n" -"Last-Translator: Szevin <kevingeiger25@gmail.com>\n" +"PO-Revision-Date: 2022-06-19 11:54+0000\n" +"Last-Translator: 6Leoo6 <leo.takacs@yahoo.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/hu/>\n" "Language: hu\n" @@ -23,7 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -47,7 +48,7 @@ msgstr "Téma Tulajdonságai" #: doc/tools/make_rst.py msgid "Signals" -msgstr "Jelzések" +msgstr "jelek" #: doc/tools/make_rst.py msgid "Enumerations" @@ -365,7 +366,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3397,6 +3398,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3409,6 +3416,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8384,7 +8397,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8583,7 +8596,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8600,10 +8616,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8788,7 +8800,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13631,7 +13645,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19106,11 +19120,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19396,6 +19413,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21334,9 +21358,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21347,9 +21385,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21462,11 +21509,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26101,7 +26167,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26123,7 +26190,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26929,6 +26997,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26979,6 +27053,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29369,7 +29447,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29518,10 +29596,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29715,24 +29789,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29768,6 +29824,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30075,8 +30149,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30339,9 +30413,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34647,9 +34721,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35447,6 +35522,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35469,10 +35548,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35507,6 +35598,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35523,8 +35620,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35552,7 +35653,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35616,6 +35727,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35639,7 +35754,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35656,6 +35774,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35671,14 +35795,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35687,6 +35853,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35696,9 +35866,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35716,7 +35893,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35731,11 +35916,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35776,6 +35974,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35788,7 +35992,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35815,6 +36025,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35877,9 +36094,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35895,13 +36119,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35921,6 +36138,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35951,8 +36175,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35974,9 +36198,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35990,14 +36214,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36009,7 +36233,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36037,29 +36261,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36078,7 +36302,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36141,7 +36365,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36162,13 +36386,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36218,8 +36442,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36236,8 +36460,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36266,10 +36503,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36286,7 +36547,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36326,7 +36589,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36406,6 +36671,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36442,6 +36715,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36449,6 +36746,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36524,6 +36837,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38287,7 +38606,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40380,8 +40705,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46727,7 +47059,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46972,6 +47313,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47197,6 +47550,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47405,6 +47950,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47672,6 +48409,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49174,7 +49954,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51321,6 +52100,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53058,8 +53853,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54780,7 +55575,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60881,6 +61681,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60987,6 +61791,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62118,7 +62926,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65789,11 +66602,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65833,6 +66647,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70578,6 +71402,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73774,8 +74608,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73790,8 +74624,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73809,8 +74648,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73828,6 +74667,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/id.po b/doc/translations/id.po index 6e3e57b9e1..da727b40e7 100644 --- a/doc/translations/id.po +++ b/doc/translations/id.po @@ -502,7 +502,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3790,6 +3790,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3802,6 +3808,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8778,7 +8790,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8977,7 +8989,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8994,10 +9009,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9182,7 +9193,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14026,7 +14039,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19501,11 +19514,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19791,6 +19808,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21729,9 +21753,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21742,9 +21780,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21857,11 +21904,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26506,7 +26572,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26528,7 +26595,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27335,6 +27403,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27385,6 +27459,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29775,7 +29853,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29924,10 +30002,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30121,24 +30195,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30174,6 +30230,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30481,8 +30555,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30745,9 +30819,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35053,9 +35127,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35859,6 +35934,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35881,10 +35961,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35919,6 +36011,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35935,8 +36033,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35964,7 +36066,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36031,6 +36143,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36055,7 +36171,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36072,6 +36191,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36087,15 +36212,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36105,6 +36276,11 @@ msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36114,9 +36290,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36134,7 +36317,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36149,11 +36340,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36195,6 +36399,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36207,7 +36417,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36234,6 +36450,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36296,9 +36519,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36314,13 +36544,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." @@ -36341,6 +36564,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36371,8 +36601,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36394,9 +36624,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36410,14 +36640,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36429,7 +36659,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36457,29 +36687,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36498,7 +36728,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36561,7 +36791,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36582,13 +36812,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36638,8 +36868,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36656,8 +36886,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36686,10 +36929,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36706,7 +36973,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36746,7 +37015,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36826,6 +37097,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36862,6 +37141,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36869,6 +37172,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36946,6 +37265,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38709,7 +39034,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40805,8 +41136,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47169,7 +47507,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47414,6 +47761,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47639,6 +47998,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47847,6 +48398,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48114,6 +48857,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49616,7 +50402,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51764,6 +52549,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53501,8 +54302,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55223,7 +56024,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61330,6 +62136,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61436,6 +62246,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62567,7 +63381,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66239,11 +67058,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66283,6 +67103,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71033,6 +71863,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74230,8 +75070,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74246,11 +75086,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74265,8 +75111,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74283,6 +75129,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Mengembalikan nilai hiperbolik tangen dari parameter." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/is.po b/doc/translations/is.po index 34704b5dd4..ec65de5cfb 100644 --- a/doc/translations/is.po +++ b/doc/translations/is.po @@ -347,7 +347,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3379,6 +3379,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3391,6 +3397,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8366,7 +8378,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8565,7 +8577,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8582,10 +8597,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8770,7 +8781,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13613,7 +13626,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19088,11 +19101,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19378,6 +19394,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21316,9 +21339,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21329,9 +21366,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21444,11 +21490,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26083,7 +26148,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26105,7 +26171,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26911,6 +26978,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26961,6 +27034,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29351,7 +29428,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29500,10 +29577,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29697,24 +29770,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29750,6 +29805,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30057,8 +30130,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30321,9 +30394,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34629,9 +34702,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35429,6 +35503,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35451,10 +35529,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35489,6 +35579,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35505,8 +35601,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35534,7 +35634,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35598,6 +35708,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35621,7 +35735,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35638,6 +35755,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35653,14 +35776,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35669,6 +35834,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35678,9 +35847,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35698,7 +35874,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35713,11 +35897,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35758,6 +35955,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35770,7 +35973,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35797,6 +36006,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35859,9 +36075,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35877,13 +36100,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35903,6 +36119,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35933,8 +36156,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35956,9 +36179,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35972,14 +36195,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35991,7 +36214,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36019,29 +36242,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36060,7 +36283,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36123,7 +36346,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36144,13 +36367,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36200,8 +36423,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36218,8 +36441,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36248,10 +36484,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36268,7 +36528,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36308,7 +36570,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36388,6 +36652,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36424,6 +36696,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36431,6 +36727,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36506,6 +36818,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38269,7 +38587,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40362,8 +40686,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46709,7 +47040,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46954,6 +47294,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47179,6 +47531,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47387,6 +47931,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47654,6 +48390,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49156,7 +49935,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51303,6 +52081,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53040,8 +53834,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54762,7 +55556,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60863,6 +61662,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60969,6 +61772,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62100,7 +62907,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65771,11 +66583,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65815,6 +66628,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70560,6 +71383,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73756,8 +74589,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73772,8 +74605,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73791,8 +74629,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73810,6 +74648,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/it.po b/doc/translations/it.po index 55dae12030..f1a35b0de3 100644 --- a/doc/translations/it.po +++ b/doc/translations/it.po @@ -515,9 +515,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4372,6 +4373,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -4384,6 +4391,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -9384,7 +9397,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9583,7 +9596,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9600,10 +9616,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9788,7 +9800,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14652,7 +14666,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -20223,11 +20237,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Restituisce il seno del parametro." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -20514,6 +20532,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Restituisce il resto dei due vettori." @@ -22456,9 +22481,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22469,9 +22508,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22584,11 +22632,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -27251,7 +27318,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -27273,7 +27341,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -28092,6 +28161,13 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -28142,6 +28218,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -30537,7 +30617,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30686,10 +30766,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30884,24 +30960,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30937,6 +30995,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -31244,8 +31320,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -31509,9 +31585,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35841,9 +35917,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36649,6 +36726,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36671,10 +36753,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36709,6 +36803,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36725,8 +36825,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36755,7 +36859,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Ritorna [code]true[/code] se [Rect2i] contiene un punto." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36825,6 +36939,11 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "Prende la linea corrente nel file analizzato (non ancora implementato)" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36849,7 +36968,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36868,6 +36990,12 @@ msgstr "Ritorna [code]true[/code] se [Rect2i] è piano o vuoto." msgid "Sets the map active." msgstr "Restituisce l'arco-seno del parametro." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36883,15 +37011,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Restituisce il seno del parametro." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36902,6 +37076,11 @@ msgstr "Restituisce il valore opposto del parametro." msgid "Sets the global transformation for the region." msgstr "Calcola il prodotto vettoriale di questo vettore e [code]b[/code]." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36911,9 +37090,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36931,7 +37117,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36947,11 +37141,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36996,6 +37203,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -37008,7 +37221,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37035,6 +37254,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -37097,9 +37323,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -37116,13 +37349,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Restituisce il seno del parametro." @@ -37143,6 +37369,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -37172,10 +37405,13 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" +"Ritorna [code]true[/code] se l'impostazione specificata da [code]name[/code] " +"esiste, [code]false[/code] altrimenti." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -37197,9 +37433,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -37213,14 +37449,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37232,7 +37468,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37260,13 +37496,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37279,13 +37509,19 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -37304,7 +37540,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -37367,7 +37603,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37389,13 +37625,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37445,8 +37681,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -37464,8 +37700,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37494,11 +37743,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "Il singleton [EditorNavigationMeshGenerator]." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -37515,7 +37788,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -37556,7 +37831,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37637,6 +37914,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37673,6 +37958,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37680,6 +37989,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "Il singleton [EditorNavigationMeshGenerator]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37759,6 +38085,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -39526,7 +39858,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41638,8 +41976,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -48021,7 +48366,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -48266,6 +48620,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -48491,6 +48857,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -48699,6 +49257,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48966,6 +49716,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -50468,7 +51261,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -52624,6 +53416,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -54363,8 +55171,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -56087,7 +56895,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -62241,6 +63054,13 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" +"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento " +"è disabilitato." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -62347,6 +63167,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -63482,7 +64306,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -67197,11 +68026,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -67241,6 +68071,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -72025,6 +72865,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -75231,8 +76081,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -75247,11 +76097,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -75266,8 +76122,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -75284,6 +76140,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Restituisce il seno del parametro." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/ja.po b/doc/translations/ja.po index 2be2d3b27e..8bb3d16322 100644 --- a/doc/translations/ja.po +++ b/doc/translations/ja.po @@ -486,9 +486,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4324,6 +4325,15 @@ msgstr "" "クã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。" #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"整数プãƒãƒ‘ティãŒã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れ㟠2D レンダー レイヤーを使用ã—ãŸãƒ“ット" +"マスクã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。" + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4340,6 +4350,15 @@ msgstr "" "クã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。" #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"整数プãƒãƒ‘ティãŒã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れ㟠2D レンダー レイヤーを使用ã—ãŸãƒ“ット" +"マスクã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。" + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -10657,7 +10676,7 @@ msgstr "" "astar.connect_points(1, 2, false)\n" "[/codeblock]" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -10942,8 +10961,15 @@ msgstr "" "ケールãŒä¸Žãˆã‚‰ã‚ŒãŸå€¤ã«æ›´æ–°ã•れã¾ã™ã€‚" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." -msgstr "指定ã—ãŸ2点ã®é–“ã«æŽ¥ç¶š / セグメントãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚" +#, fuzzy +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." +msgstr "" +"与ãˆã‚‰ã‚ŒãŸ2点ãŒã‚»ã‚°ãƒ¡ãƒ³ãƒˆã§ç›´æŽ¥æŽ¥ç¶šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚" +"[code]bidirectional[/code]ãŒ[code]false[/code]ã®å ´åˆã€[code]id[/code]ã‹ã‚‰" +"[code]to_id[/code]ã¾ã§ã“ã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚’通ã£ã¦ç§»å‹•ã§ãã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/AStar2D.xml msgid "" @@ -10968,10 +10994,6 @@ msgstr "" "[/codeblock]" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "指定ã•れãŸ2点ã®é–“ã«ã‚るセグメントを削除ã—ã¾ã™ã€‚" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -11223,7 +11245,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -16616,7 +16640,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -22211,11 +22235,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "円柱ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«ä½¿ã†ãƒžãƒ†ãƒªã‚¢ãƒ«ã€‚" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -22502,6 +22530,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "é…列ã®è¦ç´ æ•°ã‚’è¿”ã—ã¾ã™ã€‚" @@ -24452,9 +24487,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -24465,9 +24514,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -24580,11 +24638,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -29278,7 +29355,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -29300,7 +29378,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -30132,6 +30211,15 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"[code]true[/code] ã®å ´åˆã€ãƒ—ãƒã‚»ã‚¹é–¢é€£ã®é€šçŸ¥ã«å¿œã˜ã¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¾" +"ã™ã€‚" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -30182,6 +30270,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -32582,7 +32674,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -32731,10 +32823,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -32931,24 +33019,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -32984,6 +33054,27 @@ msgid "" msgstr "" #: doc/classes/Input.xml +#, fuzzy +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" +"テクスãƒãƒ£ç”¨ã®ãƒ•ィルタフラグ。オプション㯠[enum TextureFilter] ã‚’å‚ç…§ã—ã¦ã" +"ã ã•ã„。" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -33291,8 +33382,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -33555,9 +33646,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -37942,9 +38033,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -38757,6 +38849,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -38780,10 +38877,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -38819,6 +38928,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "メソッド呼ã³å‡ºã—トラックã§ä½¿ã†ã€å‘¼ã³å‡ºã—モード。" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml #, fuzzy msgid "Server interface for low-level 2D navigation access." @@ -38836,8 +38951,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -38870,7 +38989,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "与ãˆã‚‰ã‚ŒãŸãƒŽãƒ¼ãƒ‰ã‚’å«ã‚€ã‚°ãƒ©ãƒ•ã®å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -38941,6 +39070,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -38968,7 +39101,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -38987,6 +39123,12 @@ msgstr "é…列ãŒç©ºã®å ´åˆã¯[code]true[/code]ã‚’è¿”ã—ã¾ã™ã€‚" msgid "Sets the map active." msgstr "ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’åœæ¢ã—ã¾ã™ã€‚" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -39002,15 +39144,64 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "点 [code]point[/code] ã‹ã‚‰å¹³é¢ä¸Šã®ç‚¹ã¸ã®ç›´äº¤æŠ•影を返ã—ã¾ã™ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" +"é…列㫠[code]value[/code] ãŒå«ã¾ã‚Œã¦ã„れ㰠[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "ã‚°ãƒ©ãƒ•å†…ã®æŽ¥ç¶šæ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "è«–ç†OR演算å ([code]or[/code] ã¾ãŸã¯ [code]||[/code])。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" +"与ãˆã‚‰ã‚ŒãŸ[code]id[/code]ã‚’æŒã¤ç‚¹ã®ä½ç½®[code]position[/code]ã‚’è¨å®šã—ã¾ã™ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "行列ã®é€†è¡Œåˆ—ã‚’è¿”ã—ã¾ã™ã€‚" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -39021,6 +39212,12 @@ msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚ msgid "Sets the global transformation for the region." msgstr "行列ã®è»¢ç½®ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¿”ã—ã¾ã™ã€‚" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" +"与ãˆã‚‰ã‚ŒãŸ[code]id[/code]ã‚’æŒã¤ç‚¹ã®ä½ç½®[code]position[/code]ã‚’è¨å®šã—ã¾ã™ã€‚" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -39030,9 +39227,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -39050,7 +39254,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -39067,11 +39279,24 @@ msgid "" "system." msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -39118,6 +39343,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -39130,7 +39361,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -39157,6 +39394,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -39221,9 +39465,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -39241,13 +39492,6 @@ msgid "" msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" @@ -39268,6 +39512,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -39297,10 +39548,11 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." -msgstr "" +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." +msgstr "録画ä¸ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -39322,9 +39574,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -39338,14 +39590,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -39357,7 +39609,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -39386,13 +39638,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -39403,13 +39649,22 @@ msgstr "[code]true[/code]ã®å ´åˆã€æ³•ç·šãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." +msgstr "" +"[code]true[/code]ã®å ´åˆã€ãƒœãƒ‡ã‚£ã®é€æ˜Žåº¦ã‚’有効ã«ã—ã¾ã™ã€‚[member blend_mode] ã‚‚" +"å‚ç…§ã—ã¦ãã ã•ã„。" + +#: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -39428,7 +39683,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -39492,7 +39747,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -39514,13 +39769,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -39571,8 +39826,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -39590,8 +39845,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -39620,11 +39888,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "[NavigationMeshGenerator] シングルトン。" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "アニメーションã®å†ç”ŸãŒé–‹å§‹ã—ãŸã¨ãã«é€šçŸ¥ã—ã¾ã™ã€‚" @@ -39643,7 +39935,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -39685,7 +39979,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -39766,6 +40062,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -39802,6 +40106,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -39809,6 +40137,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "[NavigationMeshGenerator] シングルトン。" + #: doc/classes/NavigationServer.xml #, fuzzy msgid "Server interface for low-level 3D navigation access." @@ -39890,6 +40235,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -41656,7 +42007,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -43784,8 +44141,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -50212,7 +50576,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -50457,6 +50830,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -50682,6 +51067,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -50890,6 +51467,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -51157,6 +51926,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -52661,7 +53473,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -54837,6 +55648,26 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns top of the inline image to the top of the text." +msgstr "ボックスã®ä¸å¿ƒã‹ã‚‰æ¸¬ã£ãŸãƒœãƒƒã‚¯ã‚¹ã®é«˜ã•。" + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns center of the inline image to the center of the text." +msgstr "åをコンテナã®ä¸å¤®ã«æ•´åˆ—ã•ã›ã¾ã™ã€‚" + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "ボックスã®ä¸å¿ƒã‹ã‚‰æ¸¬ã£ãŸãƒœãƒƒã‚¯ã‚¹ã®é«˜ã•。" + +#: doc/classes/RichTextLabel.xml +#, fuzzy +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "åã‚’ã‚³ãƒ³ãƒ†ãƒŠã®æœ€å¾Œã«æ•´åˆ—ã•ã›ã¾ã™ã€‚" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -56590,8 +57421,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -58322,7 +59153,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -64801,6 +65637,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "ã‚‚ã— [code]true[/code] ã§ã‚れã°ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã¯æœ‰åйã«ãªã‚Šã¾ã™ã€‚" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -64910,6 +65751,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -66050,7 +66895,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -69781,12 +70631,16 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +#, fuzzy +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" +"アニメーションã¯ç‰©ç†ãƒ•レームä¸ã«é€²è¡Œã—ã¾ã™ (ã™ãªã‚ã¡ [method Node." +"_physics_process])。" #: doc/classes/VisibilityEnabler2D.xml msgid "This enabler will stop [AnimatedSprite] nodes animations." @@ -69825,6 +70679,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -74669,6 +75533,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -77880,8 +78754,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -77896,11 +78770,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -77915,8 +78795,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -77933,6 +78813,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚" + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/ko.po b/doc/translations/ko.po index 5c301f3f22..e3dd797c36 100644 --- a/doc/translations/ko.po +++ b/doc/translations/ko.po @@ -14,12 +14,13 @@ # ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021. # whatthesamuel <alex01763@gmail.com>, 2021. # 한수현 <shh1473@ajou.ac.kr>, 2022. +# vrSono <global.sonogong@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-05-31 22:35+0000\n" -"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" +"PO-Revision-Date: 2022-06-13 03:39+0000\n" +"Last-Translator: vrSono <global.sonogong@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/ko/>\n" "Language: ko\n" @@ -70,21 +71,20 @@ msgid "Method Descriptions" msgstr "메서드 설명" #: doc/tools/make_rst.py -#, fuzzy msgid "Theme Property Descriptions" -msgstr "ì†ì„± 설명" +msgstr "테마 ì†ì„± 설명" #: doc/tools/make_rst.py msgid "Inherits:" -msgstr "" +msgstr "ìƒì†:" #: doc/tools/make_rst.py msgid "Inherited By:" -msgstr "" +msgstr "파ìƒ:" #: doc/tools/make_rst.py msgid "(overrides %s)" -msgstr "" +msgstr "(%s를 ë®ì–´ì”€)" #: doc/tools/make_rst.py msgid "Default" @@ -105,34 +105,38 @@ msgstr "Getter" #: doc/tools/make_rst.py msgid "" "This method should typically be overridden by the user to have any effect." -msgstr "" +msgstr "ì´ ë©”ì„œë“œëŠ” ì¼ë°˜ì 으로 사용ìžê°€ ìž¬ì •ì˜í•´ì•¼ ì˜í–¥ì„ 미칩니다." #: doc/tools/make_rst.py msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." -msgstr "" +msgstr "ì´ ë©”ì„œë“œëŠ” ì¸ìŠ¤í„´ìŠ¤ì˜ ë©¤ë²„ë³€ìˆ˜ë¥¼ ìˆ˜ì •í•˜ì§€ 않습니다." #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" +"ì´ ë©”ì„œë“œëŠ” 여기 ì„¤ëª…ëœ ì¸ìˆ˜ ë’¤ì— ì–¼ë§ˆë“ ì§€ ë§Žì€ ì¸ìˆ˜ë¥¼ ë°›ì„ ìˆ˜ 있습니다." #: doc/tools/make_rst.py msgid "This method is used to construct a type." -msgstr "" +msgstr "ì´ ë©”ì„œë“œëŠ” íƒ€ìž…ì„ ë§Œë“œëŠ” ë° ì‚¬ìš©ë©ë‹ˆë‹¤." #: doc/tools/make_rst.py msgid "" "This method doesn't need an instance to be called, so it can be called " "directly using the class name." msgstr "" +"ì´ ë©”ì„œë“œì˜ í˜¸ì¶œì—는 ì¸ìŠ¤í„´ìŠ¤ê°€ í•„ìš” 없기 ë•Œë¬¸ì— í´ëž˜ìФ ì´ë¦„ì„ í†µí•´ ì§ì ‘ 호출" +"ë 수 있습니다." #: doc/tools/make_rst.py msgid "" "This method describes a valid operator to use with this type as left-hand " "operand." msgstr "" +"ì´ ë©”ì„œë“œëŠ” ì´ íƒ€ìž…ì„ ì™¼ìª½ 피연산ìžë¡œ 사용하는 ìœ íš¨í•œ ì—°ì‚°ìžë¥¼ ì•Œë ¤ì¤ë‹ˆë‹¤." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Built-in GDScript functions." @@ -187,7 +191,6 @@ msgstr "" "ì§€ì›í•˜ëŠ” 색 ì´ë¦„ì€ [Color]ì—서 ì •ì˜í•œ ìƒìˆ˜ì™€ 같다." #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the absolute value of parameter [code]s[/code] (i.e. positive " "value).\n" @@ -195,13 +198,12 @@ msgid "" "a = abs(-1) # a is 1\n" "[/codeblock]" msgstr "" -"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n" +"매개변수 [code]s[/code]ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n" "[codeblock]\n" "a = abs(-1) # a 는 1\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of " "cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -212,15 +214,16 @@ msgid "" "c = acos(0.866025)\n" "[/codeblock]" msgstr "" -"[code]s[/code]ì˜ arc cosine ê°’ì„ ëž˜ë””ì–¸ìœ¼ë¡œ 리턴한다. [code]s[/code]ì˜ ì½”ì‚¬" -"ì¸ ê°ë„를 ì–»ê³ ì‹¶ìœ¼ë©´ 다ìŒê³¼ ê°™ì´ ì‚¬ìš©í•œë‹¤.\n" +"[code]s[/code]ì˜ arc cosine ê°’ì„ ë¼ë””안으로 반환한다. 코사ì¸[code]s[/code]ì˜ " +"ê°ë„를 얻기 위해 사용한다. [code]s[/code]는 [code]-1.0[/code] ì´ìƒ " +"[code]1.0[/code] ì´í•˜ì´ì–´ì•¼ 한다. ê·¸ë ‡ì§€ 않으면 [method acos]는 [constance " +"NAN]ì„ ë°˜í™˜í•œë‹¤.\n" "[codeblock]\n" "# c 는 0.523599 ë˜ëŠ” rad2deg(s) ì„ ì‚¬ìš©í•˜ì—¬ 변환하면 30 ë„\n" "c = acos(0.866025)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the arc sine of [code]s[/code] in radians. Use to get the angle of " "sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and " @@ -231,15 +234,16 @@ msgid "" "s = asin(0.5)\n" "[/codeblock]" msgstr "" -"[code]s[/code]ì˜ arc sine ê°’ì„ ëž˜ë””ì–¸ìœ¼ë¡œ 리턴한다. [code]s[/code]ì˜ ì½”ì‚¬ì¸ " -"ê°ë„를 ì–»ê³ ì‹¶ìœ¼ë©´ 다ìŒê³¼ ê°™ì´ ì‚¬ìš©í•œë‹¤.\n" +"[code]s[/code]ì˜ arc sine ê°’ì„ ë¼ë””안으로 반환한다. 사ì¸[code]s[/code]ì˜ ê°ë„" +"를 얻기 위해 사용한다. [code]s[/code]는 [code]-1.0[/code]ì´ìƒ [code]1.0[/" +"code]ì´í•˜ ì´ì–´ì•¼ 한다. ê·¸ë ‡ì§€ 않으면 [method asin]ì€ [constant NAN]ì„ ë°˜í™˜í•œ" +"다.\n" "[codeblock]\n" "# s 는 0.523599 ë˜ëŠ” rad2deg(s) ì„ ì‚¬ìš©í•˜ì—¬ 변환하면 30 ë„\n" "a = acos(0.5)\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Asserts that the [code]condition[/code] is [code]true[/code]. If the " "[code]condition[/code] is [code]false[/code], an error is generated. When " @@ -266,13 +270,17 @@ msgid "" "[/codeblock]" msgstr "" "[code]condition[/code] ì´ [code]true[/code] ì¸ì§€ 확ì¸í•œë‹¤. [code]condition[/" -"code] ì´ [code]false[/code] ì´ë©´, 오류가 ë°œìƒí•˜ê³ 사용ìžê°€ 다시 ì‹œìž‘í• ë•Œê¹Œ" -"ì§€ í”„ë¡œê·¸ëž¨ì´ ì •ì§€ëœë‹¤. 디버그 빌드나 ì—디터ì—서 ê²Œìž„ì´ ì‹¤í–‰ë 때만 실행ëœ" -"다. 디버깅 목ì 으로만 ì‚¬ìš©í•˜ê³ , 개발 ì¤‘ì— ìƒíƒœê°€ [code]true[/code] ì¸ì§€ 확ì¸" -"í• ìˆ˜ 있게 한다.\n" -"옵션으로 [code]message[/code] ì¸ìˆ˜ë¥¼ 넣으면 \"Assertion failed\" 메시지를 ë³´" -"여준다. assertionì´ ì‹¤íŒ¨í•œ ì›ì¸ì— 대한 추가ì ì¸ ìƒì„¸ ì •ë³´ë¥¼ ì œê³µí•˜ë ¤ë©´ ì´ê²ƒ" -"ì„ ì‚¬ìš©í•˜ë©´ ëœë‹¤.\n" +"code] ì´ [code]false[/code] ì´ë©´ 오류가 ë°œìƒí•œë‹¤. ì—디터ì—서 실행한 경우, 실" +"í–‰ ì¤‘ì¸ í”„ë¡œì 트는 사용ìžê°€ ìž¬ê°œí• ë•Œê¹Œì§€ ì •ì§€ëœë‹¤. ì´ê²ƒì€ 프로ì 트 개발ìžë‚˜ " +"ì• ë“œì˜¨ 사용ìžì—게 [method push_error]보다 ë” ê°•í•œ ë°©ì‹ìœ¼ë¡œ 오류를 알리는 ë° " +"사용ë 수 있다. \n" +"[b]주ì˜:[/b] ì„±ëŠ¥ì„ ìœ„í•´, [method assert]ì˜ ì½”ë“œëŠ” 디버그 빌드나 프로ì 트를 " +"ì—디터ì—서 실행한 경우ì—ë§Œ 수행ëœë‹¤. [method assert] í˜¸ì¶œì— ë”°ë¼ ìž‘ì—… ë‚´ìš©ì´ " +"달ë¼ì§€ëŠ” 코드를 작성해서는 안 ëœë‹¤. ê·¸ë ‡ì§€ 않으면, 릴리즈 모드로 내보낸 프로" +"ì 트가 다르게 ìž‘ë™í• 것ì´ë‹¤.\n" +"옵션으로 [code]message[/code] ì¸ìˆ˜ë¥¼ 넣으면, 기본 \"Assertion failed\" 메시지" +"ì— ì¶”ê°€ë¡œ 표시ëœë‹¤. assertionì´ ì‹¤íŒ¨í•œ ì›ì¸ì— 대한 추가ì ì¸ ìƒì„¸ ì •ë³´ë¥¼ ì œê³µ" +"í•˜ë ¤ë©´ ì´ê²ƒì„ 사용하면 ëœë‹¤.\n" "[codeblock]\n" "# í•ìƒ ì†ë„ê°€ 0ì—서 20 사ì´ì´ê¸¸ ì›í•œë‹¤ë©´\n" "speed = -10\n" @@ -355,6 +363,13 @@ msgid "" "[/codeblock]\n" "See also [method floor], [method round], [method stepify], and [int]." msgstr "" +"[code]s[/code]를 올림하여, [code]s[/code]보다 작지 ì•Šì€ ê°€ìž¥ ìž‘ì€ ì •ìˆ˜ë¥¼ ë°˜" +"환.\n" +"[codeblock]\n" +"a = ceil(1.45) # a 는 2.0\n" +"a = ceil(1.001) # a 는 2.0\n" +"[/codeblock]\n" +"ê´€ë ¨ ì •ë³´ [method floor], [method round], [method stepify], [int]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -367,6 +382,13 @@ msgid "" "[/codeblock]\n" "This is the inverse of [method ord]." msgstr "" +"ìœ ë‹ˆì½”ë“œ ê°’(ASCII코드와 호환ë¨)ì— í•´ë‹¹í•˜ëŠ” 문ìžë¥¼ String으로 반환.\n" +"[codeblock]\n" +"a = char(65) # a 는 \"A\"\n" +"a = char(65 + 32) # a 는 \"a\"\n" +"a = char(8364) # a 는 \"€\"\n" +"[/codeblock]\n" +"[method ord]와 ë°˜ëŒ€ì˜ ê¸°ëŠ¥ì„ í•˜ëŠ” 함수ì´ë‹¤." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -378,6 +400,13 @@ msgid "" "a = clamp(15, 1, 20) # a is 15\n" "[/codeblock]" msgstr "" +"[code]value[/code]ì˜ ë²”ìœ„ë¥¼ ì œí•œí•˜ì—¬ [code]min[/code]보다 작지 ì•Šê³ , " +"[code]max[/code]보다 í¬ì§€ ì•Šì€ ê°’ì„ ë°˜í™˜.\n" +"[codeblock]\n" +"a = clamp(1000, 1, 20) # a 는 20\n" +"a = clamp(-10, 1, 20) # a 는 1\n" +"a = clamp(15, 1, 20) # a 는 15\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -392,9 +421,18 @@ msgid "" "print(a.length())\n" "[/codeblock]" msgstr "" +"íƒ€ìž…ì„ ë³€í™˜í•˜ëŠ” 함수. [code]type[/code] 매개변수는 [enum Variant.Type] ì˜ ê°’" +"ì„ ë°›ìŒ.\n" +"[codeblock]\n" +"a = Vector2(1, 0)\n" +"# 1ì´ ì¶œë ¥ë¨\n" +"print(a.length())\n" +"a = convert(a, TYPE_STRING)\n" +"# \"(1, 0)\"문ìžì—´ì˜ 길ì´ê°€ 6ì´ê¸° ë•Œë¬¸ì— 6ì´ ì¶œë ¥ë¨\n" +"print(a.length())\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the cosine of angle [code]s[/code] in radians.\n" "[codeblock]\n" @@ -402,34 +440,31 @@ msgid "" "a = cos(PI) # a is -1.0\n" "[/codeblock]" msgstr "" -"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n" +"ë¼ë””안 ê°ë„ [code]s[/code] ì˜ ì½”ì‚¬ì¸ì„ 반환.\n" "[codeblock]\n" -"# a 는 1\n" -"a = abs(-1)\n" +"a = cos(TAU) # a 는 1.0\n" +"a = cos(PI) # a 는 -1.0\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the hyperbolic cosine of [code]s[/code] in radians.\n" "[codeblock]\n" "print(cosh(1)) # Prints 1.543081\n" "[/codeblock]" msgstr "" -"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n" +"ë¼ë””안 ê°ë„ [code]s[/code]ì˜ ìŒê³¡ì½”사ì¸(hyperbolic cosine)ì„ ë°˜í™˜.\n" "[codeblock]\n" -"# a 는 1\n" -"a = abs(-1)\n" +"print(cosh(1)) # 1.543081ì´ ì¶œë ¥ë¨\n" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "Converts from decibels to linear energy (audio)." msgstr "ë°ì‹œë²¨ì—서 ì„ í˜• ì—너지(오디오)로 변환합니다." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Deprecated alias for [method step_decimals]." -msgstr "" +msgstr "[method step_decimals]ì˜ ë” ì´ìƒ 사용ë˜ì§€ 않는 별ì¹." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -441,11 +476,19 @@ msgid "" "a = dectime(60, 10, 0.1)) # a is 59.0\n" "[/codeblock]" msgstr "" +"[b]주ì˜:[/b] [code]dectime[/code] 는 ë” ì´ìƒ 사용ë˜ì§€ 않으며 Godot 4.0ì—서 ì‚" +"ì œë 것 입니다. ëŒ€ì‹ , [method move_toward]를 사용하세요.\n" +"\n" +"[code]value[/code]ì—서 [code]step[/code] * [code]amount[/code]를 뺀 ê°’ì„ ë°˜" +"환.\n" +"[codeblock]\n" +"a = dectime(60, 10, 0.1)) # a 는 59.0\n" +"[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3507,6 +3550,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3519,6 +3568,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8497,7 +8552,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8696,7 +8751,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8713,10 +8771,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8901,7 +8955,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13751,7 +13807,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19269,11 +19325,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19559,6 +19619,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다." @@ -21560,9 +21627,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21573,9 +21654,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21688,11 +21778,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26339,7 +26448,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26361,7 +26471,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27169,6 +27280,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27219,6 +27336,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29617,7 +29738,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29766,10 +29887,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29963,24 +30080,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30016,6 +30115,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30323,8 +30440,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30587,9 +30704,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34901,9 +35018,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35708,6 +35826,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35730,10 +35853,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35768,6 +35903,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35784,8 +35925,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35813,7 +35958,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35883,6 +36038,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35907,7 +36066,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35926,6 +36088,12 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." msgid "Sets the map active." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35941,15 +36109,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35959,6 +36173,11 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë°˜ëŒ€ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35968,9 +36187,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35988,7 +36214,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36004,11 +36238,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36050,6 +36297,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36062,7 +36315,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36089,6 +36348,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36151,9 +36417,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36170,13 +36443,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." @@ -36197,6 +36463,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36227,8 +36500,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36251,9 +36524,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36267,14 +36540,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36286,7 +36559,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36314,29 +36587,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36355,7 +36628,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36418,7 +36691,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36440,13 +36713,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36496,8 +36769,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36515,8 +36788,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36545,10 +36831,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36565,7 +36875,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36606,7 +36918,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36687,6 +37001,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36723,6 +37045,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36730,6 +37076,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36809,6 +37171,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38697,7 +39065,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40799,8 +41173,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47167,7 +47548,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47412,6 +47802,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47637,6 +48039,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47845,6 +48439,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48112,6 +48898,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49614,7 +50443,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51763,6 +52591,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53500,8 +54344,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55222,7 +56066,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61334,6 +62183,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61440,6 +62294,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62571,7 +63429,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66266,11 +67129,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66310,6 +67174,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71072,6 +71946,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74272,8 +75156,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74288,11 +75172,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74307,8 +75197,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74325,6 +75215,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." @@ -74537,4 +75433,4 @@ msgstr "" #: doc/classes/YSort.xml msgid "" "If [code]true[/code], child nodes are sorted, otherwise sorting is disabled." -msgstr "" +msgstr "[code]" diff --git a/doc/translations/lt.po b/doc/translations/lt.po index 751cdb6809..fc686e4bb2 100644 --- a/doc/translations/lt.po +++ b/doc/translations/lt.po @@ -357,7 +357,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3389,6 +3389,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3401,6 +3407,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8376,7 +8388,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8575,7 +8587,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8592,10 +8607,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8780,7 +8791,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13623,7 +13636,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19098,11 +19111,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19388,6 +19404,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21326,9 +21349,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21339,9 +21376,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21454,11 +21500,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26093,7 +26158,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26115,7 +26181,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26921,6 +26988,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26971,6 +27044,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29361,7 +29438,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29510,10 +29587,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29707,24 +29780,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29760,6 +29815,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30067,8 +30140,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30331,9 +30404,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34639,9 +34712,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35439,6 +35513,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35461,10 +35539,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35499,6 +35589,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35515,8 +35611,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35544,7 +35644,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35608,6 +35718,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35631,7 +35745,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35648,6 +35765,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35663,14 +35786,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35679,6 +35844,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35688,9 +35857,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35708,7 +35884,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35723,11 +35907,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35768,6 +35965,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35780,7 +35983,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35807,6 +36016,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35869,9 +36085,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35887,13 +36110,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35913,6 +36129,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35943,8 +36166,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35966,9 +36189,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35982,14 +36205,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36001,7 +36224,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36029,29 +36252,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36070,7 +36293,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36133,7 +36356,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36154,13 +36377,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36210,8 +36433,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36228,8 +36451,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36258,10 +36494,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36278,7 +36538,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36318,7 +36580,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36398,6 +36662,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36434,6 +36706,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36441,6 +36737,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36516,6 +36828,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38279,7 +38597,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40372,8 +40696,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46719,7 +47050,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46964,6 +47304,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47189,6 +47541,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47397,6 +47941,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47664,6 +48400,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49166,7 +49945,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51313,6 +52091,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53050,8 +53844,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54772,7 +55566,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60873,6 +61672,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60979,6 +61782,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62110,7 +62917,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65781,11 +66593,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65825,6 +66638,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70570,6 +71393,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73766,8 +74599,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73782,8 +74615,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73801,8 +74639,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73820,6 +74658,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/lv.po b/doc/translations/lv.po index 4d637de366..27ebbed1af 100644 --- a/doc/translations/lv.po +++ b/doc/translations/lv.po @@ -362,7 +362,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3394,6 +3394,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3406,6 +3412,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8381,7 +8393,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8580,7 +8592,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8597,10 +8612,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8785,7 +8796,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13628,7 +13641,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19103,11 +19116,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19393,6 +19409,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21331,9 +21354,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21344,9 +21381,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21459,11 +21505,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26101,7 +26166,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26123,7 +26189,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26929,6 +26996,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26979,6 +27052,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29369,7 +29446,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29518,10 +29595,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29715,24 +29788,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29768,6 +29823,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30075,8 +30148,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30339,9 +30412,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34647,9 +34720,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35447,6 +35521,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35469,10 +35547,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35507,6 +35597,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35523,8 +35619,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35552,7 +35652,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35616,6 +35726,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35639,7 +35753,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35656,6 +35773,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35671,14 +35794,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35687,6 +35852,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35696,9 +35865,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35716,7 +35892,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35731,11 +35915,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35776,6 +35973,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35788,7 +35991,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35815,6 +36024,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35877,9 +36093,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35895,13 +36118,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35921,6 +36137,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35951,8 +36174,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35974,9 +36197,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35990,14 +36213,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36009,7 +36232,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36037,29 +36260,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36078,7 +36301,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36141,7 +36364,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36162,13 +36385,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36218,8 +36441,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36236,8 +36459,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36266,10 +36502,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36286,7 +36546,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36326,7 +36588,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36406,6 +36670,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36442,6 +36714,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36449,6 +36745,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36524,6 +36836,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38287,7 +38605,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40380,8 +40704,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46727,7 +47058,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46972,6 +47312,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47197,6 +47549,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47405,6 +47949,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47672,6 +48408,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49174,7 +49953,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51321,6 +52099,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53058,8 +53852,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54780,7 +55574,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60881,6 +61680,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60987,6 +61790,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62118,7 +62925,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65789,11 +66601,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65833,6 +66646,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70578,6 +71401,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73774,8 +74607,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73790,8 +74623,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73809,8 +74647,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73828,6 +74666,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/mr.po b/doc/translations/mr.po index 2583c332b6..caaec0b107 100644 --- a/doc/translations/mr.po +++ b/doc/translations/mr.po @@ -345,7 +345,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3377,6 +3377,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3389,6 +3395,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8364,7 +8376,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8563,7 +8575,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8580,10 +8595,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8768,7 +8779,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13611,7 +13624,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19086,11 +19099,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19376,6 +19392,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21314,9 +21337,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21327,9 +21364,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21442,11 +21488,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26081,7 +26146,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26103,7 +26169,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26909,6 +26976,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26959,6 +27032,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29349,7 +29426,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29498,10 +29575,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29695,24 +29768,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29748,6 +29803,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30055,8 +30128,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30319,9 +30392,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34627,9 +34700,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35427,6 +35501,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35449,10 +35527,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35487,6 +35577,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35503,8 +35599,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35532,7 +35632,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35596,6 +35706,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35619,7 +35733,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35636,6 +35753,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35651,14 +35774,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35667,6 +35832,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35676,9 +35845,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35696,7 +35872,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35711,11 +35895,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35756,6 +35953,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35768,7 +35971,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35795,6 +36004,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35857,9 +36073,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35875,13 +36098,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35901,6 +36117,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35931,8 +36154,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35954,9 +36177,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35970,14 +36193,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35989,7 +36212,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36017,29 +36240,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36058,7 +36281,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36121,7 +36344,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36142,13 +36365,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36198,8 +36421,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36216,8 +36439,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36246,10 +36482,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36266,7 +36526,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36306,7 +36568,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36386,6 +36650,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36422,6 +36694,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36429,6 +36725,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36504,6 +36816,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38267,7 +38585,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40360,8 +40684,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46707,7 +47038,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46952,6 +47292,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47177,6 +47529,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47385,6 +47929,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47652,6 +48388,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49154,7 +49933,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51301,6 +52079,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53038,8 +53832,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54760,7 +55554,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60861,6 +61660,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60967,6 +61770,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62098,7 +62905,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65769,11 +66581,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65813,6 +66626,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70558,6 +71381,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73754,8 +74587,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73770,8 +74603,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73789,8 +74627,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73808,6 +74646,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/nb.po b/doc/translations/nb.po index 8adbf00ffc..6bdd8e4b1e 100644 --- a/doc/translations/nb.po +++ b/doc/translations/nb.po @@ -357,7 +357,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3389,6 +3389,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3401,6 +3407,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8376,7 +8388,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8575,7 +8587,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8592,10 +8607,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8780,7 +8791,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13623,7 +13636,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19098,11 +19111,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19388,6 +19404,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21326,9 +21349,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21339,9 +21376,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21454,11 +21500,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26093,7 +26158,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26115,7 +26181,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26921,6 +26988,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26971,6 +27044,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29361,7 +29438,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29510,10 +29587,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29707,24 +29780,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29760,6 +29815,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30067,8 +30140,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30331,9 +30404,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34639,9 +34712,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35439,6 +35513,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35461,10 +35539,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35499,6 +35589,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35515,8 +35611,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35544,7 +35644,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35608,6 +35718,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35631,7 +35745,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35648,6 +35765,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35663,14 +35786,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35679,6 +35844,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35688,9 +35857,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35708,7 +35884,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35723,11 +35907,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35768,6 +35965,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35780,7 +35983,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35807,6 +36016,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35869,9 +36085,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35887,13 +36110,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35913,6 +36129,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35943,8 +36166,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35966,9 +36189,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35982,14 +36205,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36001,7 +36224,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36029,29 +36252,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36070,7 +36293,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36133,7 +36356,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36154,13 +36377,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36210,8 +36433,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36228,8 +36451,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36258,10 +36494,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36278,7 +36538,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36318,7 +36580,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36398,6 +36662,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36434,6 +36706,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36441,6 +36737,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36516,6 +36828,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38279,7 +38597,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40372,8 +40696,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46719,7 +47050,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46964,6 +47304,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47189,6 +47541,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47397,6 +47941,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47664,6 +48400,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49166,7 +49945,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51313,6 +52091,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53050,8 +53844,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54772,7 +55566,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60873,6 +61672,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60979,6 +61782,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62110,7 +62917,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65781,11 +66593,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65825,6 +66638,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70570,6 +71393,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73766,8 +74599,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73782,8 +74615,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73801,8 +74639,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73820,6 +74658,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/ne.po b/doc/translations/ne.po index cb95b78393..d7f2a9f0cb 100644 --- a/doc/translations/ne.po +++ b/doc/translations/ne.po @@ -345,7 +345,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3377,6 +3377,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3389,6 +3395,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8364,7 +8376,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8563,7 +8575,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8580,10 +8595,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8768,7 +8779,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13611,7 +13624,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19086,11 +19099,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19376,6 +19392,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21314,9 +21337,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21327,9 +21364,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21442,11 +21488,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26081,7 +26146,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26103,7 +26169,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26909,6 +26976,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26959,6 +27032,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29349,7 +29426,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29498,10 +29575,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29695,24 +29768,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29748,6 +29803,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30055,8 +30128,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30319,9 +30392,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34627,9 +34700,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35427,6 +35501,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35449,10 +35527,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35487,6 +35577,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35503,8 +35599,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35532,7 +35632,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35596,6 +35706,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35619,7 +35733,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35636,6 +35753,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35651,14 +35774,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35667,6 +35832,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35676,9 +35845,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35696,7 +35872,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35711,11 +35895,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35756,6 +35953,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35768,7 +35971,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35795,6 +36004,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35857,9 +36073,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35875,13 +36098,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35901,6 +36117,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35931,8 +36154,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35954,9 +36177,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35970,14 +36193,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35989,7 +36212,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36017,29 +36240,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36058,7 +36281,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36121,7 +36344,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36142,13 +36365,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36198,8 +36421,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36216,8 +36439,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36246,10 +36482,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36266,7 +36526,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36306,7 +36568,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36386,6 +36650,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36422,6 +36694,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36429,6 +36725,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36504,6 +36816,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38267,7 +38585,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40360,8 +40684,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46707,7 +47038,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46952,6 +47292,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47177,6 +47529,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47385,6 +47929,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47652,6 +48388,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49154,7 +49933,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51301,6 +52079,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53038,8 +53832,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54760,7 +55554,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60861,6 +61660,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60967,6 +61770,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62098,7 +62905,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65769,11 +66581,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65813,6 +66626,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70558,6 +71381,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73754,8 +74587,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73770,8 +74603,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73789,8 +74627,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73808,6 +74646,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/nl.po b/doc/translations/nl.po index 2e334d337a..71605513cd 100644 --- a/doc/translations/nl.po +++ b/doc/translations/nl.po @@ -406,7 +406,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3446,6 +3446,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3458,6 +3464,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8433,7 +8445,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8632,7 +8644,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8649,10 +8664,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8837,7 +8848,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13680,7 +13693,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19155,11 +19168,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19445,6 +19461,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21383,9 +21406,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21396,9 +21433,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21511,11 +21557,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26153,7 +26218,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26175,7 +26241,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26981,6 +27048,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27031,6 +27104,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29421,7 +29498,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29570,10 +29647,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29767,24 +29840,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29820,6 +29875,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30127,8 +30200,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30391,9 +30464,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34699,9 +34772,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35499,6 +35573,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35521,10 +35599,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35559,6 +35649,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35575,8 +35671,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35604,7 +35704,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35668,6 +35778,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35691,7 +35805,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35708,6 +35825,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35723,14 +35846,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35739,6 +35904,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35748,9 +35917,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35768,7 +35944,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35783,11 +35967,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35828,6 +36025,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35840,7 +36043,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35867,6 +36076,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35929,9 +36145,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35947,13 +36170,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35973,6 +36189,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36003,8 +36226,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36026,9 +36249,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36042,14 +36265,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36061,7 +36284,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36089,29 +36312,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36130,7 +36353,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36193,7 +36416,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36214,13 +36437,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36270,8 +36493,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36288,8 +36511,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36318,10 +36554,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36338,7 +36598,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36378,7 +36640,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36458,6 +36722,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36494,6 +36766,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36501,6 +36797,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36576,6 +36888,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38339,7 +38657,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40432,8 +40756,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46779,7 +47110,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47024,6 +47364,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47249,6 +47601,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47457,6 +48001,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47724,6 +48460,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49226,7 +50005,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51374,6 +52152,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53111,8 +53905,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54833,7 +55627,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60934,6 +61733,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61040,6 +61843,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62171,7 +62978,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65842,11 +66654,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65886,6 +66699,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70631,6 +71454,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73827,8 +74660,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73843,8 +74676,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73862,8 +74700,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73881,6 +74719,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/pl.po b/doc/translations/pl.po index 0610d7bdaa..6e5324af99 100644 --- a/doc/translations/pl.po +++ b/doc/translations/pl.po @@ -500,9 +500,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3873,6 +3874,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3885,6 +3892,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8870,7 +8883,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9069,7 +9082,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9086,10 +9102,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9274,7 +9286,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14132,7 +14146,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19621,11 +19635,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Zwraca sinus parametru." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19914,6 +19932,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Zwraca resztÄ™ z dwóch wektorów." @@ -21856,9 +21881,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21869,9 +21908,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21984,11 +22032,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26643,7 +26710,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26665,7 +26733,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27482,6 +27551,15 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"JeÅ›li [code]true[/code], potomne wÄ™zÅ‚y sÄ… sortowane. W innym przypadku jest " +"wyłączone." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27532,6 +27610,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29925,7 +30007,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30074,10 +30156,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30271,24 +30349,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30324,6 +30384,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30631,8 +30709,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30895,9 +30973,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35234,9 +35312,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36042,6 +36121,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Zwraca sinus parametru." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36064,10 +36148,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36102,6 +36198,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36118,8 +36220,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36150,7 +36256,17 @@ msgstr "" "skrypcie ,podczas wywoÅ‚ania [method move_and_slide]." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36220,6 +36336,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36244,7 +36364,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36265,6 +36388,12 @@ msgstr "" msgid "Sets the map active." msgstr "Zwraca arcus sinus parametru." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36280,15 +36409,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Zwraca sinus parametru." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Zwraca sinus parametru." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36299,6 +36474,11 @@ msgstr "Singleton [NavigationMeshGenerator]." msgid "Sets the global transformation for the region." msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]b[/code]." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36308,9 +36488,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36328,7 +36515,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36344,11 +36539,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36396,6 +36604,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36408,7 +36622,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36435,6 +36655,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36497,9 +36724,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36516,13 +36750,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Zwraca sinus parametru." @@ -36543,6 +36770,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36573,8 +36807,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36597,9 +36831,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36613,14 +36847,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36632,7 +36866,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36660,13 +36894,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36679,13 +36907,19 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36704,7 +36938,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36767,7 +37001,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36789,13 +37023,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36845,8 +37079,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36864,8 +37098,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36894,11 +37141,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "Singleton [NavigationMeshGenerator]." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36915,7 +37186,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36956,7 +37229,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37037,6 +37312,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37073,6 +37356,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37080,6 +37387,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "Singleton [NavigationMeshGenerator]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37159,6 +37483,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38922,7 +39252,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41034,8 +41370,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47413,7 +47756,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47658,6 +48010,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47883,6 +48247,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -48091,6 +48647,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48358,6 +49106,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49860,7 +50651,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -52017,6 +52807,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53757,8 +54563,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55480,7 +56286,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61606,6 +62417,13 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" +"JeÅ›li [code]true[/code], potomne wÄ™zÅ‚y sÄ… sortowane. W innym przypadku jest " +"wyłączone." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61712,6 +62530,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62843,7 +63665,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66538,11 +67365,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66582,6 +67410,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71357,6 +72195,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74559,8 +75407,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74575,11 +75423,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Zwraca sinus parametru." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74594,8 +75448,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74612,6 +75466,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Zwraca sinus parametru." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/pt.po b/doc/translations/pt.po index b4505ad2b5..6b214ae81a 100644 --- a/doc/translations/pt.po +++ b/doc/translations/pt.po @@ -8,12 +8,13 @@ # Felipe SiFa <felipe@logus.digital>, 2022. # Renu <ifpilucas@gmail.com>, 2022. # Diogo Gomes <dgomes@graphnode.com>, 2022. +# El_ExpertPlayer <xpertnathan37@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-29 02:54+0000\n" -"Last-Translator: Diogo Gomes <dgomes@graphnode.com>\n" +"PO-Revision-Date: 2022-06-13 03:39+0000\n" +"Last-Translator: El_ExpertPlayer <xpertnathan37@gmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/pt/>\n" "Language: pt\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -64,9 +65,8 @@ msgid "Method Descriptions" msgstr "Descrições de Métodos" #: doc/tools/make_rst.py -#, fuzzy msgid "Theme Property Descriptions" -msgstr "Descrições de propriedades" +msgstr "Descrições de Propriedades do Tema" #: doc/tools/make_rst.py msgid "Inherits:" @@ -82,35 +82,40 @@ msgstr "" #: doc/tools/make_rst.py msgid "Default" -msgstr "" +msgstr "Padrão" #: doc/tools/make_rst.py msgid "Setter" -msgstr "" +msgstr "Definidor" #: doc/tools/make_rst.py msgid "value" -msgstr "" +msgstr "valor" #: doc/tools/make_rst.py msgid "Getter" -msgstr "" +msgstr "Buscador" #: doc/tools/make_rst.py msgid "" "This method should typically be overridden by the user to have any effect." msgstr "" +"Este método normalmente deve ser substituÃdo pelo usuário para ter algum " +"efeito." #: doc/tools/make_rst.py msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." msgstr "" +"Este método não tem efeito colateral. Não modifica nenhuma variável membro " +"da instancia." #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" +"Este método aceita qualquer número de argumentos após os descritos aqui." #: doc/tools/make_rst.py msgid "This method is used to construct a type." @@ -129,6 +134,8 @@ msgid "" "This method describes a valid operator to use with this type as left-hand " "operand." msgstr "" +"Este método descreve um operador válido para usar com este tipo como " +"operando à esquerda." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Built-in GDScript functions." @@ -488,7 +495,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -813,6 +820,22 @@ msgid "" "[/codeblock]\n" "See also [method lerp] which performs the reverse of this operation." msgstr "" +"Returna um fator de interpolação ou extrapolação considerando o alcance " +"especifico em [code]from[/code] e [code]to[/code], e o valor interpolado " +"especificado em [code]weight[/code]. O valor retornado será entre [code]0.0[/" +"code] e [code]1.0[/code] se [code]weight[/code] é entre [code]from[/code] e " +"[code]to[/code] (inclusivo). Se [code]weight[/code] é localizado fora desse " +"alcance, então um fator de extrapolação será retornado (retorna valor menor " +"que [code]0.0[/code] ou maior que [code]1.0[/code]).\n" +"[codeblock]\n" +"# O raio de interpolação na chamada de `lerp()` abaixo é 0.75.\n" +"var centro = lerp(20, 30, 0.75)\n" +"# `centro` agora é 27.5.\n" +"# Agora, pretendemos ter esquecido o raio original e queremos de volta.\n" +"var raio = inverse_lerp(20, 30, 27.5)\n" +"# `raio` agora é 0.75.\n" +"[/codeblock]\n" +"Veja também [method lerp] que realiza o inverso desta operação." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -4147,6 +4170,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -4159,6 +4188,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -9155,7 +9190,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9354,7 +9389,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9371,10 +9409,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9559,7 +9593,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14433,7 +14469,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "Retorna o [RID] do objeto." @@ -19931,12 +19967,16 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "A largura de uma textura." #: doc/classes/CurveTexture.xml -msgid "The width of the texture." -msgstr "A largura de uma textura." +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 " +"the cost of increased generation time and memory usage." +msgstr "" #: doc/classes/CylinderMesh.xml msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -20221,6 +20261,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -22160,9 +22207,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22173,9 +22234,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22288,11 +22358,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26942,7 +27031,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26964,7 +27054,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27771,6 +27862,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27821,6 +27918,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -30211,7 +30312,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30360,10 +30461,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30557,24 +30654,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30610,6 +30689,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30917,8 +31014,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -31181,9 +31278,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35507,9 +35604,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36307,6 +36405,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Retorna o RID do ecrã usada por essa camada." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36329,10 +36432,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36367,6 +36482,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36383,8 +36504,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36414,7 +36539,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36484,6 +36619,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36508,7 +36647,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36527,6 +36669,12 @@ msgstr "Retorna [code]true[/code] se o script pode ser instanciado." msgid "Sets the map active." msgstr "Retorna a câmara 3D ativa." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36542,15 +36690,62 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Retorna o produto cruzado deste vetor e [code]b[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Retorna a rotação (em radianos)." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Retorna o produto cruzado deste vetor e [code]b[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" +"Limpa o Ãcone em [code]name[/code] se o tema tiver [code]node_type[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Define a cor da borda." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -36560,6 +36755,12 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "Retorna a posição global do mouse." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" +"Limpa o Ãcone em [code]name[/code] se o tema tiver [code]node_type[/code]." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36569,9 +36770,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36589,9 +36797,16 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -#, fuzzy -msgid "Returns the path from start to finish in global coordinates." -msgstr "Retorna a rotação (em radianos)." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" #: doc/classes/NavigationAgent.xml msgid "" @@ -36605,11 +36820,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36652,6 +36880,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36664,7 +36898,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36691,6 +36931,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36755,9 +37002,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36773,13 +37027,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Retorna o RID do ecrã usada por essa camada." @@ -36800,6 +37047,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36830,8 +37084,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36853,9 +37107,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36869,14 +37123,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36888,7 +37142,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36916,29 +37170,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36957,7 +37211,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -37020,7 +37274,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37041,13 +37295,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37097,8 +37351,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -37116,8 +37370,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37146,10 +37413,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "Notifica quando uma animação começa a reproduzir." @@ -37168,7 +37459,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -37209,7 +37502,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37290,6 +37585,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37326,6 +37629,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37333,6 +37660,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "O singleton [TranslationServer]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37411,6 +37755,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -39174,7 +39524,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41272,8 +41628,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47622,7 +47985,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47867,6 +48239,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -48092,6 +48476,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "Nome opcional para a camada 1 da fÃsica 2D." @@ -48300,6 +48876,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "Nome opcional para a camada 9 da renderização 2D." #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48568,6 +49336,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -50070,7 +50881,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -52218,6 +53028,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53957,8 +54783,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55681,7 +56507,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61812,6 +62643,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Se [code]true[/code], o objeto é desenhado por trás do pai dele." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61918,6 +62754,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -63049,7 +63889,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66733,11 +67578,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66777,6 +67623,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71525,6 +72381,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74726,8 +75592,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74742,11 +75608,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Retorna o RID do ecrã usada por essa camada." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74761,8 +75633,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74779,6 +75651,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Retorna o RID do ecrã usada por essa camada." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po index 6ce8037a77..16779b76ff 100644 --- a/doc/translations/pt_BR.po +++ b/doc/translations/pt_BR.po @@ -40,12 +40,13 @@ # Douglas S. Elias <douglassantoselias@gmail.com>, 2022. # Fabio Moura de Oliveira <ccmaismais@yahoo.com>, 2022. # Daniel Abrante <danielabrante@protonmail.com>, 2022. +# lucas rossy brasil coelho <lucasrossy270@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-29 02:54+0000\n" -"Last-Translator: Daniel Abrante <danielabrante@protonmail.com>\n" +"PO-Revision-Date: 2022-06-16 18:58+0000\n" +"Last-Translator: lucas rossy brasil coelho <lucasrossy270@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot-class-reference/pt_BR/>\n" "Language: pt_BR\n" @@ -53,7 +54,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -101,7 +102,7 @@ msgstr "Descrições da Propriedade do Tema" #: doc/tools/make_rst.py msgid "Inherits:" -msgstr "Herda de:" +msgstr "Herda:" #: doc/tools/make_rst.py msgid "Inherited By:" @@ -117,7 +118,7 @@ msgstr "Padrão" #: doc/tools/make_rst.py msgid "Setter" -msgstr "setter" +msgstr "setters" #: doc/tools/make_rst.py msgid "value" @@ -165,8 +166,8 @@ msgid "" "This method describes a valid operator to use with this type as left-hand " "operand." msgstr "" -"Este método descreve um operador válido pra utilizar com este tipo como " -"operando do lado esquerdo." +"Este método descreve um operador válido para usar com este tipo como " +"operando à esquerda." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Built-in GDScript functions." @@ -503,7 +504,7 @@ msgstr "Converte de decibéis para energia linear (áudio)." #: modules/gdscript/doc_classes/@GDScript.xml msgid "Deprecated alias for [method step_decimals]." -msgstr "Apelido descontinuado para [method step_decimals]." +msgstr "Apelido em desuso para [method step_decimals]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -524,9 +525,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -547,17 +549,17 @@ msgstr "" "`Array` ou `Dicionário` até o seu nÃvel mais profundo.\n" "Isso se compara a [code]==[/code] de várias maneiras:\n" "- Para [code]null[/code], [code]int[/code], [code]float[/code], " -"[code]String[/code], [code]Objeto[/code] e [code]RID[/code] tanto " +"[code]String[/code], [code]Object[/code] e [code]RID[/code] tanto " "[code]deep_equal[/code] quanto [code]==[/code] funcionam da mesma maneira.\n" -"- Para [code]Dicionário[/code], [code]==[code] considera igualdade se, e " -"somente se, ambas as variáveis apontarem para o mesmo [code]Dicionário[/" +"- Para [code]Dictionary[/code], [code]==[code] considera igualdade se, e " +"somente se, ambas as variáveis apontarem para o mesmo [code]Dictionary[/" "code], sem nenhuma recorrência ou consciência do conteúdo.\n" "- Para [code]Array[/code], [code]==[/code] considera igualdade se, e somente " "se, cada item no primeiro [code]Array[/code] for igual a sua contraparte no " "segundo [code]Array[/code], como diz o próprio [code]==[/code]. Isso implica " -"que [code]==[/code] recursa para [code]Array[/code], mas não para " -"[code]Dicionário[/code].\n" -"Em resumo, sempre que um [code]Dicionário[/code] estiver potencialmente " +"que [code]==[/code] recursiva para [code]Array[/code], mas não para " +"[code]Dictionary[/code].\n" +"Em resumo, sempre que um [code]Dictionary[/code] estiver potencialmente " "envolvido, se você quiser uma verdadeira comparação consciente do conteúdo, " "você tem que usar [code]deep_equal[/code]." @@ -869,6 +871,8 @@ msgid "" "[/codeblock]\n" "See also [method lerp] which performs the reverse of this operation." msgstr "" +"Retornar a interpolação ou extrapolação do fator considerando o ranger " +"especÃfico [code ]para[/code]" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -939,7 +943,6 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Linearly interpolates between two values by the factor defined in " "[code]weight[/code]. To perform interpolation, [code]weight[/code] should be " @@ -959,17 +962,23 @@ msgid "" "To perform eased interpolation with [method lerp], combine it with [method " "ease] or [method smoothstep]." msgstr "" -"Interpola linearmente entre dois valores através de um valor normalizado. " -"Este método é o oposto do método [method inverse_lerp].\n" +"Interpola linearmente entre dois valores pelo fator definido em " +"[code]weight[/code]. Para realizar a interpolação, [code]weight[/code] deve " +"estar entre [code]0.0[/code] e [code]1.0[/code] (inclusive). No entanto, " +"valores fora desse intervalo são permitidos e podem ser usados para realizar " +"[i]extrapolação[/i].\n" "Se os argumentos [code]from[/code] e [code]to[/code] forem do tipo [int] ou " -"[float], o retorno é um valor do tipo [float].\n" -"Se ambos são vetores de mesmo tipo ([Vector2], [Vector3] ou [Color]), o " -"valor retornado será do mesmo tipo ([code]lerp[/code] então chamará o método " -"[code]lerp[/code] do tipo de vetor em questão).\n" +"[float], o valor de retorno será um [float].\n" +"Se ambos forem do mesmo tipo de vetor ([Vector2], [Vector3] ou [Color]), o " +"valor de retorno será do mesmo tipo([code]lerp[/code] então chama o método " +"[code]linear_interpolate[/code] do tipo de vetor).\n" "[codeblock]\n" -"lerp(0, 4, 0.75) # Retorna 3.0\n" -"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Retorna Vector2(2, 3.5)\n" -"[/codeblock]" +"lerp(0, 4, 0,75) # Retorna 3,0\n" +"lerp(Vetor2(1, 5), Vetor2(3, 2), 0.5) # Retorna Vetor2(2, 3.5)\n" +"[/codeblock]\n" +"Veja também [method inverse_lerp] que realiza o inverso desta operação. Para " +"realizar a interpolação facilitada com [method lerp], combine-o com [method " +"ease] ou [method smoothstep]." #: modules/gdscript/doc_classes/@GDScript.xml #, fuzzy @@ -1757,7 +1766,6 @@ msgstr "" "smoothstep() e ease(x, -1.6521)[/url]" #: modules/gdscript/doc_classes/@GDScript.xml -#, fuzzy msgid "" "Returns the square root of [code]s[/code], where [code]s[/code] is a non-" "negative number.\n" @@ -1773,8 +1781,7 @@ msgstr "" "sqrt(9) # Retorna 3\n" "[/codeblock]\n" "[b]Nota:[/b] Valores negativos de [code]s[/code] retornam NaN. Se você " -"precisar de valores de entrada negativos, use [code]System.Numerics.Complex[/" -"code] no C#." +"precisa de valores negativos, use [code]System.Numerics.Complex[/code] em C#." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -1788,8 +1795,8 @@ msgid "" "[/codeblock]" msgstr "" "Retorna a posição do primeiro dÃgito não zero, após o ponto decimal. Note " -"que o valor máximo de retorno é 10, o que foi uma decisão de design feita " -"durante a implementação.\n" +"que o valor máximo de retorno é 10, o que é uma decisão de design na " +"implementação.\n" "[codeblock]\n" "n = step_decimals(5) # n é 0\n" "n = step_decimals(1.0005) # n é 4\n" @@ -2198,8 +2205,8 @@ msgid "" "Constant that represents how many times the diameter of a circle fits around " "its perimeter. This is equivalent to [code]TAU / 2[/code]." msgstr "" -"Constante que representa quantas vezes o diâmetro de um cÃrculo se encaixa " -"em torno de seu perÃmetro. Isto equivale a [code]TAU / 2[/code]." +"Constante que representa quantas vezes o diâmetro de um cÃrculo cabe em seu " +"perÃmetro. É equivalente a [code]TAU / 2[/code]." #: modules/gdscript/doc_classes/@GDScript.xml msgid "" @@ -4046,19 +4053,19 @@ msgid "" " print(\"Still failing!\")\n" "[/codeblock]" msgstr "" -"Métodos que retornam [enum Error] returnam [constant OK] quando não ocorreu " -"nenhum erro. Note que muitas funções não retornam um código de erro, mas " -"imprimem mensagens de erro para a saÃda padrão.\n" -"Já que [constant OK] tem valor 0 e todos os outros códigos de falha são " -"valores inteiros positivos, ele também pode ser usado em verificações " -"booleanas, por exemplo.:\n" +"Método que retorna [enum Error] return [constant OK] quando nenhum erro " +"ocorre. Note que muitas funções não retornan um código de erro mas irá " +"imprimir uma mensagem de erro para a saÃda padrão.\n" +"Já que [constant OK] tem o valor 0, e todas os outros códigos de falha são " +"positivos inteiros, isso pode ser usado para verificação com booleanos, por " +"exemplo:\n" "[codeblock]\n" -"var err = método_que_retorna_erro()\n" +"var err = method_that_returns_error()\n" "if err != OK:\n" -" print(\"Falha!\")\n" +" print(\"Erro!\")\n" "# Ou, equivalente:\n" "if err:\n" -" print(\"Ainda falhando!\")\n" +" print(\"Continua falhando!\")\n" "[/codeblock]" #: doc/classes/@GlobalScope.xml @@ -4107,7 +4114,7 @@ msgstr "Arquivo: Erro arquivo já em uso." #: doc/classes/@GlobalScope.xml msgid "File: Can't open error." -msgstr "Arquivo: não se pode abrir erro." +msgstr "Arquivo: erro não é possÃvel abrir." #: doc/classes/@GlobalScope.xml msgid "File: Can't write error." @@ -4350,6 +4357,15 @@ msgstr "" "2D opcionalmente nomeadas." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"Indica que uma propriedade integer é uma bitmask usando as camadas de " +"renderização 2D nomeadas opcionalmente." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4366,6 +4382,15 @@ msgstr "" "3D opcionalmente nomeadas." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"Indica que uma propriedade integer é uma bitmask usando as camadas de " +"renderização 2D nomeadas opcionalmente." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -4481,11 +4506,11 @@ msgstr "Usado para agrupar propriedade no editor." #: doc/classes/@GlobalScope.xml msgid "Used to categorize properties together in the editor." -msgstr "" +msgstr "Utilizado para categorizar propriedades juntas ao editor." #: doc/classes/@GlobalScope.xml msgid "The property does not save its state in [PackedScene]." -msgstr "" +msgstr "A propriedade não salva seu estado em [PackedScene]." #: doc/classes/@GlobalScope.xml msgid "Editing the property prompts the user for restarting the editor." @@ -9409,7 +9434,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9608,7 +9633,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9625,10 +9653,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9813,7 +9837,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14697,7 +14723,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "Retorna o [RID] do objeto." @@ -20238,12 +20264,16 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "A largura de uma textura." #: doc/classes/CurveTexture.xml -msgid "The width of the texture." -msgstr "A largura de uma textura." +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 " +"the cost of increased generation time and memory usage." +msgstr "" #: doc/classes/CylinderMesh.xml msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -20529,6 +20559,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Retorna o número de nós nesta [SceneTree]." @@ -22469,9 +22506,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22482,9 +22533,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22597,11 +22657,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -27264,7 +27343,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -27286,7 +27366,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -28113,6 +28194,13 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "Retorna [code]true[/code] se o script pode ser instanciado." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -28163,6 +28251,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -30557,7 +30649,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30706,10 +30798,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30904,24 +30992,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30957,6 +31027,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -31264,8 +31352,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -31528,9 +31616,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35867,9 +35955,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36675,6 +36764,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36697,10 +36791,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36735,6 +36841,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36751,8 +36863,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36782,7 +36898,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Retorna [code]true[/code] se o script pode ser instanciado." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36853,6 +36979,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36877,7 +37007,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36896,6 +37029,12 @@ msgstr "Retorna [code]true[/code] se o script pode ser instanciado." msgid "Sets the map active." msgstr "Retorna a câmera 3D ativa." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36911,15 +37050,64 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" +"Retorna a [Cor] em [code]name[/code] se o tema tiver [code]node_type[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" +"Retorna a [Cor] em [code]name[/code] se o tema tiver [code]node_type[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" +"Limpa o Ãcone em [code]name[/code] se o tema tiver [code]node_type[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Define a cor da borda." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36930,6 +37118,11 @@ msgstr "O singleton [NavigationMeshGenerator]." msgid "Sets the global transformation for the region." msgstr "Retorna a posição global do mouse." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Retorna o tipo do nó em at [code]idx[/code]." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36939,9 +37132,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36959,9 +37159,16 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -#, fuzzy -msgid "Returns the path from start to finish in global coordinates." -msgstr "Retorna a rotação (em radianos)." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" #: doc/classes/NavigationAgent.xml #, fuzzy @@ -36976,11 +37183,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37024,6 +37244,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -37036,7 +37262,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37063,6 +37295,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -37127,9 +37366,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -37146,13 +37392,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Retorna o número de nós nesta [SceneTree]." @@ -37173,6 +37412,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -37202,10 +37448,11 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." -msgstr "" +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." +msgstr "Retorna [code]true[/code] se o script pode ser instanciado." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -37227,9 +37474,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -37243,14 +37490,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37262,7 +37509,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37290,13 +37537,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37309,13 +37550,19 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -37334,7 +37581,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -37397,7 +37644,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37419,13 +37666,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37475,8 +37722,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -37494,8 +37741,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37524,11 +37784,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "O singleton [NavigationMeshGenerator]." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "Notifies when the navigation mesh bake operation is completed." msgstr "Notifica quando uma animação começa a reproduzir." @@ -37547,7 +37831,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -37588,7 +37874,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37669,6 +37957,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37705,6 +38001,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37712,6 +38032,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "O singleton [NavigationMeshGenerator]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37791,6 +38128,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -39554,7 +39897,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41662,8 +42011,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -48050,7 +48406,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -48295,6 +48660,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -48520,6 +48897,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "Nome opcional para a camada 1 da fÃsica 2D." @@ -48728,6 +49297,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "Nome opcional para a camada 9 da renderização 2D." #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48996,6 +49757,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -50498,7 +51302,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -52654,6 +53457,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -54394,8 +55213,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -56121,7 +56940,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -62278,6 +63102,13 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" +"Se [code]true[/code], os nós filhos são organizados, do contrário, a " +"organização é desabilitada." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -62384,6 +63215,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -63515,7 +64350,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -67216,11 +68056,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -67260,6 +68101,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -72038,6 +72889,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -75242,8 +76103,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -75258,11 +76119,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -75277,8 +76144,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -75295,6 +76162,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Retorna o número de nós nesta [SceneTree]." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/ro.po b/doc/translations/ro.po index af828f619b..dbc5017a08 100644 --- a/doc/translations/ro.po +++ b/doc/translations/ro.po @@ -373,7 +373,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3409,6 +3409,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3421,6 +3427,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8396,7 +8408,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8595,7 +8607,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8612,10 +8627,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8800,7 +8811,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13643,7 +13656,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19118,11 +19131,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19408,6 +19424,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21346,9 +21369,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21359,9 +21396,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21474,11 +21520,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26116,7 +26181,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26138,7 +26204,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26944,6 +27011,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26994,6 +27067,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29384,7 +29461,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29533,10 +29610,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29730,24 +29803,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29783,6 +29838,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30090,8 +30163,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30354,9 +30427,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34662,9 +34735,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35462,6 +35536,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35484,10 +35562,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35522,6 +35612,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35538,8 +35634,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35567,7 +35667,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35631,6 +35741,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35654,7 +35768,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35671,6 +35788,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35686,14 +35809,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35702,6 +35867,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35711,9 +35880,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35731,7 +35907,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35746,11 +35930,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35791,6 +35988,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35803,7 +36006,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35830,6 +36039,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35892,9 +36108,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35910,13 +36133,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35936,6 +36152,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35966,8 +36189,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35989,9 +36212,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36005,14 +36228,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36024,7 +36247,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36052,29 +36275,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36093,7 +36316,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36156,7 +36379,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36177,13 +36400,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36233,8 +36456,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36251,8 +36474,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36281,10 +36517,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36301,7 +36561,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36341,7 +36603,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36421,6 +36685,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36457,6 +36729,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36464,6 +36760,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "Singletonul [AudioServer]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36539,6 +36852,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38302,7 +38621,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40395,8 +40720,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46742,7 +47074,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46987,6 +47328,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47212,6 +47565,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47420,6 +47965,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47687,6 +48424,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49189,7 +49969,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51336,6 +52115,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53073,8 +53868,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54795,7 +55590,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60896,6 +61696,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61002,6 +61806,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62133,7 +62941,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65804,11 +66617,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65848,6 +66662,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70593,6 +71417,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73789,8 +74623,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73805,8 +74639,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73824,8 +74663,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73843,6 +74682,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/ru.po b/doc/translations/ru.po index afb3693b6a..ec2940636f 100644 --- a/doc/translations/ru.po +++ b/doc/translations/ru.po @@ -533,9 +533,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4461,6 +4462,15 @@ msgstr "" "иÑпользованием (опционально) именованных 2D-Ñлоев физики." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" +"Указывает, что целочиÑленное ÑвойÑтво ÑвлÑетÑÑ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¹ маÑкой Ñ " +"иÑпользованием (опционально) именованных 2D-Ñлоев рендеринга." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." @@ -4477,6 +4487,15 @@ msgstr "" "иÑпользованием (опционально) именованных 3D-Ñлоев физики." #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" +"Указывает, что целочиÑленное ÑвойÑтво ÑвлÑетÑÑ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¹ маÑкой Ñ " +"иÑпользованием (опционально) именованных 2D-Ñлоев рендеринга." + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -9989,7 +10008,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -10188,7 +10207,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -10205,10 +10227,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -10393,7 +10411,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -15288,7 +15308,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -20880,11 +20900,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Цвет Ñффекта отражениÑ." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -21175,6 +21199,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Возвращает чиÑло Ñлементов в маÑÑиве." @@ -23121,9 +23152,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -23134,9 +23179,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -23249,11 +23303,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -27919,7 +27992,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -27941,7 +28015,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -28758,6 +28833,15 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный " +"момент." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -28808,6 +28892,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -31204,7 +31292,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -31353,10 +31441,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -31550,24 +31634,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -31603,6 +31669,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -31910,8 +31994,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -32174,9 +32258,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -36528,9 +36612,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -37336,6 +37421,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Возвращает количеÑтво дорожек в анимации." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -37358,10 +37448,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -37396,6 +37498,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml #, fuzzy msgid "Server interface for low-level 2D navigation access." @@ -37413,8 +37521,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -37443,7 +37555,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтой." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -37513,6 +37635,13 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +#, fuzzy +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" +"Получает текущую Ñтроку в проанализированном файле (в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ " +"реализовано)." + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -37540,7 +37669,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -37559,6 +37691,12 @@ msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтоРmsgid "Sets the map active." msgstr "Возвращает значение задержки данного кадра." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -37574,15 +37712,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Возвращает [code]true[/code] еÑли маÑÑив Ñодержит [code]value[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Возвращает чиÑло Ñлементов в маÑÑиве." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -37593,6 +37777,11 @@ msgstr "ОÑтанавливает текущую анимацию (не ÑбрРmsgid "Sets the global transformation for the region." msgstr "Возвращает раÑÑтоÑние до [code]b[/code]." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -37602,9 +37791,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -37622,7 +37818,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37638,11 +37842,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37687,6 +37904,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -37699,7 +37922,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -37726,6 +37955,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -37789,9 +38025,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -37808,13 +38051,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Возвращает количеÑтво дорожек в анимации." @@ -37835,6 +38071,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -37864,10 +38107,13 @@ msgid "" msgstr "" #: doc/classes/NavigationMesh.xml +#, fuzzy msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" +"Возвращает [code]true[/code] еÑли [code]a[/code] и [code]b[/code] " +"приблизительно равны друг другу." #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -37889,9 +38135,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -37905,14 +38151,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37924,7 +38170,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37952,13 +38198,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37969,13 +38209,19 @@ msgstr "ЕÑли [code]true[/code], текÑтура отражена по Ð³Ð¾Ñ #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -37994,7 +38240,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -38058,7 +38304,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38080,13 +38326,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -38137,8 +38383,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -38156,8 +38402,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -38186,11 +38445,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "Синглтон [NavigationMeshGenerator]." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -38207,7 +38490,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -38248,7 +38533,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -38329,6 +38616,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -38365,6 +38660,31 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "A region of the 2D navigation map." +msgstr "Выпекает навигационную Ñетку." + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -38372,6 +38692,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "Синглтон [NavigationMeshGenerator]." + #: doc/classes/NavigationServer.xml #, fuzzy msgid "Server interface for low-level 3D navigation access." @@ -38463,6 +38800,12 @@ msgid "Bakes the navigation mesh." msgstr "Выпекает навигационную Ñетку." #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml #, fuzzy msgid "Control activation of this server." msgstr "Управление активацией данного Ñервера." @@ -40299,7 +40642,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -42417,8 +42766,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -48843,7 +49199,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -49088,6 +49453,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -49313,6 +49690,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -49521,6 +50090,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -49788,6 +50549,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -51290,7 +52094,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -53496,6 +54299,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -55234,8 +56053,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -56963,7 +57782,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -63150,6 +63974,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "ЕÑли [code]true[/code], текÑтура отражена по вертикали." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -63256,6 +64085,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -64396,7 +65229,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -68226,11 +69064,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -68270,6 +69109,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -73061,6 +73910,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -76270,8 +77129,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -76286,11 +77145,17 @@ msgstr "[Environment] мира." #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Возвращает количеÑтво дорожек в анимации." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -76305,8 +77170,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -76323,6 +77188,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Возвращает количеÑтво дорожек в анимации." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/sk.po b/doc/translations/sk.po index 8229fd93a9..20caeea6c2 100644 --- a/doc/translations/sk.po +++ b/doc/translations/sk.po @@ -348,7 +348,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3380,6 +3380,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3392,6 +3398,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8367,7 +8379,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8566,7 +8578,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8583,10 +8598,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8771,7 +8782,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13614,7 +13627,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19089,11 +19102,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21317,9 +21340,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21330,9 +21367,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21445,11 +21491,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26087,7 +26152,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26109,7 +26175,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26915,6 +26982,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26965,6 +27038,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29355,7 +29432,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29504,10 +29581,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29701,24 +29774,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29754,6 +29809,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30061,8 +30134,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30325,9 +30398,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34633,9 +34706,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35433,6 +35507,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35455,10 +35533,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35493,6 +35583,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35509,8 +35605,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35538,7 +35638,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35602,6 +35712,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35625,7 +35739,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35642,6 +35759,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35657,14 +35780,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35673,6 +35838,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35682,9 +35851,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35702,7 +35878,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35717,11 +35901,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35762,6 +35959,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35774,7 +35977,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35801,6 +36010,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35863,9 +36079,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35881,13 +36104,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35907,6 +36123,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35937,8 +36160,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35960,9 +36183,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35976,14 +36199,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35995,7 +36218,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36023,29 +36246,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36064,7 +36287,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36127,7 +36350,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36148,13 +36371,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36204,8 +36427,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36222,8 +36445,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36252,10 +36488,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36272,7 +36532,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36312,7 +36574,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36392,6 +36656,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36428,6 +36700,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36435,6 +36731,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36510,6 +36822,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38273,7 +38591,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40366,8 +40690,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46713,7 +47044,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46958,6 +47298,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47183,6 +47535,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47391,6 +47935,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47658,6 +48394,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49160,7 +49939,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51307,6 +52085,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53044,8 +53838,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54766,7 +55560,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60867,6 +61666,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60973,6 +61776,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62104,7 +62911,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65775,11 +66587,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65819,6 +66632,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70564,6 +71387,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73760,8 +74593,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73776,8 +74609,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73795,8 +74633,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73814,6 +74652,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po index 1dd374ba2b..4d48a80e07 100644 --- a/doc/translations/sr_Cyrl.po +++ b/doc/translations/sr_Cyrl.po @@ -359,7 +359,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3391,6 +3391,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3403,6 +3409,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8378,7 +8390,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8577,7 +8589,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8594,10 +8609,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8782,7 +8793,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13625,7 +13638,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19100,11 +19113,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19390,6 +19406,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21328,9 +21351,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21341,9 +21378,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21456,11 +21502,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26098,7 +26163,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26120,7 +26186,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26926,6 +26993,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26976,6 +27049,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29366,7 +29443,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29515,10 +29592,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29712,24 +29785,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29765,6 +29820,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30072,8 +30145,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30336,9 +30409,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34644,9 +34717,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35444,6 +35518,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35466,10 +35544,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35504,6 +35594,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35520,8 +35616,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35549,7 +35649,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35613,6 +35723,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35636,7 +35750,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35653,6 +35770,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35668,14 +35791,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35684,6 +35849,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35693,9 +35862,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35713,7 +35889,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35728,11 +35912,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35773,6 +35970,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35785,7 +35988,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35812,6 +36021,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35874,9 +36090,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35892,13 +36115,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35918,6 +36134,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35948,8 +36171,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35971,9 +36194,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35987,14 +36210,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36006,7 +36229,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36034,29 +36257,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36075,7 +36298,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36138,7 +36361,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36159,13 +36382,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36215,8 +36438,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36233,8 +36456,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36263,10 +36499,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36283,7 +36543,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36323,7 +36585,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36403,6 +36667,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36439,6 +36711,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36446,6 +36742,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36521,6 +36833,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38284,7 +38602,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40377,8 +40701,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46724,7 +47055,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46969,6 +47309,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47194,6 +47546,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47402,6 +47946,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47669,6 +48405,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49171,7 +49950,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51318,6 +52096,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53055,8 +53849,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54777,7 +55571,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60878,6 +61677,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60984,6 +61787,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62115,7 +62922,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65786,11 +66598,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65830,6 +66643,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70575,6 +71398,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73771,8 +74604,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73787,8 +74620,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73806,8 +74644,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73825,6 +74663,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/sv.po b/doc/translations/sv.po index afe8cf34ae..4836ca862f 100644 --- a/doc/translations/sv.po +++ b/doc/translations/sv.po @@ -348,7 +348,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3380,6 +3380,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3392,6 +3398,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8367,7 +8379,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8566,7 +8578,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8583,10 +8598,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8771,7 +8782,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13614,7 +13627,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19089,11 +19102,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21317,9 +21340,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21330,9 +21367,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21445,11 +21491,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26084,7 +26149,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26106,7 +26172,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -26912,6 +26979,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -26962,6 +27035,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29352,7 +29429,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29501,10 +29578,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29698,24 +29771,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29751,6 +29806,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30058,8 +30131,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30322,9 +30395,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34630,9 +34703,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35430,6 +35504,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35452,10 +35530,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35490,6 +35580,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35506,8 +35602,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35535,7 +35635,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35599,6 +35709,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35622,7 +35736,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35639,6 +35756,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35654,14 +35777,56 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35670,6 +35835,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35679,9 +35848,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35699,7 +35875,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35714,11 +35898,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35759,6 +35956,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35771,7 +35974,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35798,6 +36007,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35860,9 +36076,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35878,13 +36101,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -35904,6 +36120,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -35934,8 +36157,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35957,9 +36180,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -35973,14 +36196,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -35992,7 +36215,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36020,29 +36243,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36061,7 +36284,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36124,7 +36347,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36145,13 +36368,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36201,8 +36424,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36219,8 +36442,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36249,10 +36485,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36269,7 +36529,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36309,7 +36571,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36389,6 +36653,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36425,6 +36697,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36432,6 +36728,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36507,6 +36819,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38270,7 +38588,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40363,8 +40687,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46710,7 +47041,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -46955,6 +47295,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47180,6 +47532,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47388,6 +47932,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47655,6 +48391,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49157,7 +49936,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51304,6 +52082,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53041,8 +53835,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54763,7 +55557,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60864,6 +61663,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -60970,6 +61773,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62101,7 +62908,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65772,11 +66584,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65816,6 +66629,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70561,6 +71384,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73757,8 +74590,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73773,8 +74606,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73792,8 +74630,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73811,6 +74649,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/th.po b/doc/translations/th.po index 919ed35041..0bdffafffa 100644 --- a/doc/translations/th.po +++ b/doc/translations/th.po @@ -426,7 +426,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3474,6 +3474,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3486,6 +3492,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8472,7 +8484,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8671,7 +8683,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8688,10 +8703,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8876,7 +8887,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13722,7 +13735,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19198,11 +19211,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "คืนค่า arc tanh ขà¸à¸‡à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19488,6 +19505,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21426,9 +21450,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21439,9 +21477,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21554,11 +21601,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26201,7 +26267,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26223,7 +26290,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27030,6 +27098,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27080,6 +27154,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29472,7 +29550,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29629,10 +29707,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29838,24 +29912,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29891,6 +29947,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30214,8 +30288,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30478,9 +30552,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34802,9 +34876,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35602,6 +35677,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สà¸à¸‡à¸‚à¸à¸‡à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35624,10 +35704,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35662,6 +35754,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35678,8 +35776,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35707,7 +35809,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35774,6 +35886,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35798,7 +35914,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35816,6 +35935,12 @@ msgstr "" msgid "Sets the map active." msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35831,15 +35956,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35849,6 +36020,11 @@ msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สà¸à¸‡à¸‚à¸à¸‡à¸žà¸²à¸£à¸² msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าขà¸à¸‡à¸¥à¸³à¹‚พง" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35858,9 +36034,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35878,7 +36061,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35893,11 +36084,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35939,6 +36143,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35951,7 +36161,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35978,6 +36194,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36040,9 +36263,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36058,13 +36288,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สà¸à¸‡à¸‚à¸à¸‡à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ" @@ -36085,6 +36308,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36115,8 +36345,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36138,9 +36368,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36154,14 +36384,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36173,7 +36403,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36201,29 +36431,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36242,7 +36472,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36305,7 +36535,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36326,13 +36556,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36382,8 +36612,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36400,8 +36630,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36430,10 +36673,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36450,7 +36717,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36490,7 +36759,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36570,6 +36841,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36606,6 +36885,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36613,6 +36916,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36691,6 +37010,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38504,7 +38829,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40601,8 +40932,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46955,7 +47293,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47200,6 +47547,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47430,6 +47789,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47638,6 +48189,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47905,6 +48648,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49408,7 +50194,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51557,6 +52342,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53294,8 +54095,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55016,7 +55817,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61124,6 +61930,10 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61230,6 +62040,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62361,7 +63175,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66045,11 +66864,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66089,6 +66909,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70838,6 +71668,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74037,8 +74877,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74053,11 +74893,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สà¸à¸‡à¸‚à¸à¸‡à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ" + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74072,8 +74918,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74090,6 +74936,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สà¸à¸‡à¸‚à¸à¸‡à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ" + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/tl.po b/doc/translations/tl.po index 7a862413b9..5ced19938d 100644 --- a/doc/translations/tl.po +++ b/doc/translations/tl.po @@ -387,7 +387,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3456,6 +3456,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3468,6 +3474,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8443,7 +8455,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8642,7 +8654,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8659,10 +8674,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8847,7 +8858,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13697,7 +13710,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19172,11 +19185,14 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." +msgid "The [Curve] that is rendered onto the texture." msgstr "" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19462,6 +19478,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "" @@ -21403,9 +21426,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21416,9 +21453,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21531,11 +21577,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26173,7 +26238,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26195,7 +26261,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27001,6 +27068,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27051,6 +27124,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29441,7 +29518,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29590,10 +29667,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29787,24 +29860,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29840,6 +29895,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30147,8 +30220,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30411,9 +30484,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34731,9 +34804,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35531,6 +35605,10 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35553,10 +35631,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35591,6 +35681,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35607,8 +35703,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35639,7 +35739,17 @@ msgstr "" "so-sort ay hindi pinapagana." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35703,6 +35813,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "" @@ -35726,7 +35840,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35746,6 +35863,12 @@ msgstr "" msgid "Sets the map active." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35761,14 +35884,62 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "" @@ -35777,6 +35948,10 @@ msgstr "" msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35786,9 +35961,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35806,7 +35988,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35821,11 +36011,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35866,6 +36069,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35878,7 +36087,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35905,6 +36120,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -35967,9 +36189,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -35985,13 +36214,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "" @@ -36011,6 +36233,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36041,8 +36270,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36064,9 +36293,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36080,14 +36309,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36099,7 +36328,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36127,29 +36356,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36168,7 +36397,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36231,7 +36460,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36252,13 +36481,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36308,8 +36537,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36326,8 +36555,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36356,10 +36598,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36376,7 +36642,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36416,7 +36684,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36496,6 +36766,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36532,6 +36810,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36539,6 +36841,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36614,6 +36932,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38377,7 +38701,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40473,8 +40803,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46820,7 +47157,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47065,6 +47411,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47290,6 +47648,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47498,6 +48048,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47765,6 +48507,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49267,7 +50052,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51414,6 +52198,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53151,8 +53951,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54873,7 +55673,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -60977,6 +61782,13 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" +"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-" +"so-sort ay hindi pinapagana." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61083,6 +61895,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62214,7 +63030,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -65888,11 +66709,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -65932,6 +66754,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70677,6 +71509,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -73873,8 +74715,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -73889,8 +74731,13 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." +msgstr "" + +#: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." msgstr "" #: doc/classes/World.xml @@ -73908,8 +74755,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -73927,6 +74774,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/tr.po b/doc/translations/tr.po index 47aadf8b43..d7cc5bd8df 100644 --- a/doc/translations/tr.po +++ b/doc/translations/tr.po @@ -17,12 +17,13 @@ # ali aydın <alimxaydin@gmail.com>, 2021. # yigithan <yigithanermet38@gmail.com>, 2021. # Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021, 2022. +# Ramazan Aslan <legendraslan@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-04-03 08:10+0000\n" -"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n" +"PO-Revision-Date: 2022-06-13 03:39+0000\n" +"Last-Translator: Ramazan Aslan <legendraslan@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/tr/>\n" "Language: tr\n" @@ -30,7 +31,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.12-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -73,13 +74,12 @@ msgid "Method Descriptions" msgstr "Yöntem Açıklamaları" #: doc/tools/make_rst.py -#, fuzzy msgid "Theme Property Descriptions" -msgstr "Özellik Açıklamaları" +msgstr "Tema Özellik Açıklamaları" #: doc/tools/make_rst.py msgid "Inherits:" -msgstr "" +msgstr "Miras:" #: doc/tools/make_rst.py msgid "Inherited By:" @@ -99,7 +99,7 @@ msgstr "" #: doc/tools/make_rst.py msgid "value" -msgstr "" +msgstr "deÄŸer" #: doc/tools/make_rst.py msgid "Getter" @@ -109,17 +109,23 @@ msgstr "" msgid "" "This method should typically be overridden by the user to have any effect." msgstr "" +"Bu yöntemin herhangi bir etkiye sahip olması için genellikle kullanıcı " +"tarafından geçersiz kılınması gerekir." #: doc/tools/make_rst.py msgid "" "This method has no side effects. It doesn't modify any of the instance's " "member variables." msgstr "" +"Bu yöntemin hiçbir yan etkisi yoktur. ÖrneÄŸin üye deÄŸiÅŸkenlerinden hiçbirini " +"deÄŸiÅŸtirmez." #: doc/tools/make_rst.py msgid "" "This method accepts any number of arguments after the ones described here." msgstr "" +"Bu yöntem, burada açıklananlardan sonra herhangi bir sayıda argüman kabul " +"edebilir." #: doc/tools/make_rst.py msgid "This method is used to construct a type." @@ -492,7 +498,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4152,6 +4158,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -4164,6 +4176,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -9141,7 +9159,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9340,7 +9358,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9357,10 +9378,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9545,7 +9562,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14402,7 +14421,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19888,11 +19907,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Verilen deÄŸerin sinüsünü döndürür." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -20178,6 +20201,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "İki vektörün kalanını döndürür." @@ -22119,9 +22149,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22132,9 +22176,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -22247,11 +22300,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26906,7 +26978,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26928,7 +27001,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27738,6 +27812,14 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27788,6 +27870,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -30180,7 +30266,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -30329,10 +30415,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30526,24 +30608,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30579,6 +30643,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30886,8 +30968,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -31150,9 +31232,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35474,9 +35556,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -36281,6 +36364,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -36303,10 +36391,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36341,6 +36441,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36357,8 +36463,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36388,7 +36498,17 @@ msgstr "" "EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36458,6 +36578,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36482,7 +36606,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36502,6 +36629,12 @@ msgstr "" msgid "Sets the map active." msgstr "Verilen bir deÄŸerin ark-sinüsünü döndürür." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36517,15 +36650,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "İki vektörün kalanını döndürür." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Verilen deÄŸerin sinüsünü döndürür." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36535,6 +36714,11 @@ msgstr "[NavigationMeshGenerator] tekil nesnesi." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36544,9 +36728,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36564,7 +36755,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36580,11 +36779,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36626,6 +36838,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36638,7 +36856,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36665,6 +36889,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36727,9 +36958,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36746,13 +36984,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Verilen deÄŸerin sinüsünü döndürür." @@ -36773,6 +37004,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36803,8 +37041,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36827,9 +37065,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36843,14 +37081,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36862,7 +37100,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36890,13 +37128,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36908,13 +37140,19 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36933,7 +37171,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36996,7 +37234,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37018,13 +37256,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -37074,8 +37312,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -37093,8 +37331,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -37123,11 +37374,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "[NavigationMeshGenerator] tekil nesnesi." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -37144,7 +37419,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -37185,7 +37462,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -37266,6 +37545,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -37302,6 +37589,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -37309,6 +37620,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "[NavigationMeshGenerator] tekil nesnesi." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37388,6 +37716,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -39151,7 +39485,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -41253,8 +41593,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47631,7 +47978,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47876,6 +48232,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -48101,6 +48469,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -48309,6 +48869,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48576,6 +49328,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -50078,7 +50873,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -52234,6 +53028,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53971,8 +54781,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55693,7 +56503,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61809,6 +62624,12 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "" +"EÄŸer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61915,6 +62736,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -63046,7 +63871,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66734,11 +67564,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66778,6 +67609,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71546,6 +72387,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74747,8 +75598,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74763,11 +75614,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74782,8 +75639,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74800,6 +75657,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Verilen deÄŸerin sinüsünü döndürür." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/uk.po b/doc/translations/uk.po index fff6590fd7..22271dc2ea 100644 --- a/doc/translations/uk.po +++ b/doc/translations/uk.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-05 10:12+0000\n" +"PO-Revision-Date: 2022-06-14 15:48+0000\n" "Last-Translator: МироÑлав <hlopukmyroslav@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot-class-reference/uk/>\n" @@ -477,7 +477,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3530,6 +3530,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3542,6 +3548,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8525,7 +8537,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8724,7 +8736,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8741,10 +8756,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8929,7 +8940,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13781,7 +13794,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19266,11 +19279,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19556,6 +19573,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Повертає лишок за двома векторами." @@ -21496,9 +21520,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21509,9 +21547,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21624,11 +21671,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26272,7 +26338,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26294,7 +26361,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27108,6 +27176,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27158,6 +27232,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29550,7 +29628,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29699,10 +29777,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29896,24 +29970,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29949,6 +30005,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30256,8 +30330,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30520,9 +30594,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34834,9 +34908,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35642,6 +35717,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35664,10 +35744,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35702,6 +35794,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35718,8 +35816,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35747,7 +35849,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35817,6 +35929,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35841,7 +35957,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35860,6 +35979,12 @@ msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." msgid "Sets the map active." msgstr "Повертає аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35875,15 +36000,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35894,6 +36065,11 @@ msgstr "Повертає значеннÑ, Ñке Ñ” протилежним до msgid "Sets the global transformation for the region." msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]." +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35903,9 +36079,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35923,7 +36106,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35939,11 +36130,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35985,6 +36189,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35997,7 +36207,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36024,6 +36240,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36086,9 +36309,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36105,13 +36335,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." @@ -36132,6 +36355,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36162,8 +36392,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36186,9 +36416,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36202,14 +36432,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36221,7 +36451,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36249,29 +36479,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36290,7 +36520,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36353,7 +36583,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36375,13 +36605,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36431,8 +36661,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36450,8 +36680,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36480,10 +36723,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36500,7 +36767,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36541,7 +36810,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36622,6 +36893,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36658,6 +36937,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36665,6 +36968,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36744,6 +37063,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -37006,7 +37331,7 @@ msgstr "" #: doc/classes/NetworkedMultiplayerPeer.xml msgid "High-level multiplayer" -msgstr "" +msgstr "Мультиплеєр виÑокого рівнÑ" #: doc/classes/NetworkedMultiplayerPeer.xml msgid "WebRTC Signaling Demo" @@ -38507,7 +38832,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40608,8 +40939,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46978,7 +47316,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47223,6 +47570,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47448,6 +47807,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47656,6 +48207,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47923,6 +48666,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49425,7 +50211,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -49693,7 +50478,7 @@ msgstr "" #: doc/classes/RandomNumberGenerator.xml msgid "Random number generation" -msgstr "" +msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¾Ð²Ð¸Ñ… чиÑел" #: doc/classes/RandomNumberGenerator.xml msgid "" @@ -51574,6 +52359,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53311,8 +54112,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55034,7 +55835,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61150,6 +61956,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61256,6 +62067,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62387,7 +63202,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66071,11 +66891,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66115,6 +66936,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70879,6 +71710,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74082,8 +74923,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74098,11 +74939,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74117,8 +74964,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74135,6 +74982,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/vi.po b/doc/translations/vi.po index 0cda534d16..b813d4a4a5 100644 --- a/doc/translations/vi.po +++ b/doc/translations/vi.po @@ -477,7 +477,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3807,6 +3807,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3819,6 +3825,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8820,7 +8832,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -9019,7 +9031,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -9036,10 +9051,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -9224,7 +9235,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -14078,7 +14091,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19565,11 +19578,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "Trả vá» sin cá»§a tham số." #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19855,6 +19872,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "Trả vá» phần dư cá»§a hai vector." @@ -21795,9 +21819,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21808,9 +21846,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21923,11 +21970,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26573,7 +26639,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26595,7 +26662,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27404,6 +27472,13 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +#, fuzzy +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27454,6 +27529,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29847,7 +29926,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29996,10 +30075,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -30193,24 +30268,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -30246,6 +30303,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30553,8 +30628,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30817,9 +30892,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -35134,9 +35209,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35941,6 +36017,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35963,10 +36044,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -36001,6 +36094,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -36017,8 +36116,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -36047,7 +36150,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm." #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36117,6 +36230,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -36141,7 +36258,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -36160,6 +36280,12 @@ msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm. msgid "Sets the map active." msgstr "Trả vá» [Texture2D] cá»§a khung hình được cho." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -36175,15 +36301,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "Trả vá» phần dư cá»§a hai vector." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "Trả vá» sin cá»§a tham số." +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -36193,6 +36365,11 @@ msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]." msgid "Sets the global transformation for the region." msgstr "" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "Trả vá» sin cá»§a tham số." + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -36202,9 +36379,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -36222,7 +36406,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36238,11 +36430,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36285,6 +36490,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -36297,7 +36508,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -36324,6 +36541,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36386,9 +36610,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36405,13 +36636,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "Trả vá» sin cá»§a tham số." @@ -36432,6 +36656,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36462,8 +36693,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36486,9 +36717,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36502,14 +36733,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36521,7 +36752,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36549,13 +36780,7 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." -msgstr "" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36566,13 +36791,19 @@ msgstr "Nếu [code]true[/code] thì láºt ngang há»a tiết." #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36591,7 +36822,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36654,7 +36885,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36676,13 +36907,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36732,8 +36963,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36751,8 +36982,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36781,11 +37025,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml #, fuzzy msgid "The [NavigationMesh] resource to use." msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]." #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36802,7 +37070,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36843,7 +37113,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36924,6 +37196,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36960,6 +37240,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36967,6 +37271,23 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "The [NavigationPolygon] resource to use." +msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]." + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -37046,6 +37367,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38809,7 +39136,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40910,8 +41243,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -47292,7 +47632,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47537,6 +47886,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47762,6 +48123,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47970,6 +48523,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -48237,6 +48982,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49739,7 +50527,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51893,6 +52680,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53630,8 +54433,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -55354,7 +56157,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61470,6 +62278,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "Nếu [code]true[/code] thì láºt dá»c há»a tiết." + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61576,6 +62389,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62707,7 +63524,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66402,11 +67224,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66446,6 +67269,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -71214,6 +72047,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74421,8 +75264,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74437,11 +75280,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74456,8 +75305,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74474,6 +75323,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "Trả vá» sin cá»§a tham số." + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po index d037281462..aed2ffbe21 100644 --- a/doc/translations/zh_CN.po +++ b/doc/translations/zh_CN.po @@ -38,7 +38,7 @@ # SimonChang <simon_chang@foxmail.com>, 2021. # zeng haochen <m18621006730@163.com>, 2021. # suplife <2634557184@qq.com>, 2021. -# Magian <magian1127@gmail.com>, 2021. +# Magian <magian1127@gmail.com>, 2021, 2022. # ji233 <27987772@qq.com>, 2021. # 沈士超 <shenshichao920@hotmail.com>, 2021. # MisakaRua <1150235785@qq.com>, 2021. @@ -62,7 +62,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine class reference\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" -"PO-Revision-Date: 2022-06-08 06:47+0000\n" +"PO-Revision-Date: 2022-06-19 11:54+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot-class-reference/zh_Hans/>\n" @@ -71,7 +71,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: doc/tools/make_rst.py msgid "Description" @@ -516,9 +516,10 @@ msgstr "" "[/codeblock]" #: modules/gdscript/doc_classes/@GDScript.xml +#, fuzzy msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -4247,6 +4248,12 @@ msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ,使用ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½ #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ,使用ç€å…·å或ä¸å…·åçš„ 2D 导航层。" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ,使用ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„3D渲染层。" @@ -4258,6 +4265,13 @@ msgid "" msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ,使用ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„3D物ç†å±‚。" #: doc/classes/@GlobalScope.xml +#, fuzzy +msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ,使用ç€å…·å或ä¸å…·åçš„ 2D 导航层。" + +#: doc/classes/@GlobalScope.xml msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " @@ -10392,7 +10406,7 @@ msgstr "" "astar.connect_points(1, 2, false)\n" "[/codeblock]" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -10663,8 +10677,14 @@ msgstr "" "如果已ç»å˜åœ¨ä¸€ä¸ªç»™å®š [code]id[/code] 的点,它的ä½ç½®å’Œæƒé‡å°†è¢«æ›´æ–°ä¸ºç»™å®šå€¼ã€‚" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." -msgstr "è¿”å›žç»™å®šç‚¹ä¹‹é—´æ˜¯å¦æœ‰è¿žæŽ¥/分割。" +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." +msgstr "" +"返回两个给定点之间是å¦å˜åœ¨è¿žæŽ¥/线段。如果 [code]bidirectional[/code] 为 " +"[code]false[/code],则返回是å¦å¯ä»¥é€šè¿‡æ¤æ®µä»Ž [code]id[/code] 到 [code]to_id[/" +"code] 进行移动。" #: doc/classes/AStar2D.xml msgid "" @@ -10681,7 +10701,7 @@ msgstr "" "在给定的点之间创建一个分段。如果 [code]bidirectional[/code] 为 [code]false[/" "code],则åªå…许从 [code]id[/code] 到 [code]to_id[/code] 之间的移动,ä¸å…许å" "æ–¹å‘移动。\n" -"(codeblock)\n" +"[codeblock]\n" "var astar = AStar2D.new()\n" "astar.add_point(1, Vector2(1, 1))\n" "astar.add_point(2, Vector2(0, 5))\n" @@ -10689,10 +10709,6 @@ msgstr "" "[/codeblock]" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "åˆ é™¤ç»™å®šç‚¹ä¹‹é—´çš„çº¿æ®µã€‚" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -10944,12 +10960,15 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" -"音频效果æ•获是一ç§éŸ³é¢‘效果,å¯å°†æ‰€é™„音频效果总线的所有音频帧å¤åˆ¶åˆ°å…¶å†…部环缓" -"冲器ä¸ã€‚\n" -"应用程åºä»£ç 应使用 [method get_buffer]ä»Žè¯¥çŽ¯ç¼“å†²å™¨ä¸æ¶ˆè€—è¿™äº›éŸ³é¢‘å¸§ï¼Œå¹¶æ ¹æ®éœ€" -"è¦è¿›è¡Œå¤„ç†ï¼Œä¾‹å¦‚从麦克风æ•获数æ®ã€å®žçŽ°åº”ç”¨ç¨‹åºå®šä¹‰çš„æ•ˆæžœæˆ–é€šè¿‡ç½‘ç»œä¼ è¾“éŸ³é¢‘ã€‚" +"AudioEffectCapture æ˜¯ä¸€ç§ AudioEffect,å¯å°†æ‰€é™„音频效果总线的所有音频帧å¤åˆ¶åˆ°" +"其内部的环形缓冲器ä¸ã€‚\n" +"应用程åºä»£ç 应使用 [method get_buffer] ä»Žè¯¥çŽ¯å½¢ç¼“å†²å™¨ä¸æ¶ˆè€—è¿™äº›éŸ³é¢‘å¸§ï¼Œå¹¶æ ¹æ®" +"需è¦è¿›è¡Œå¤„ç†ï¼Œä¾‹å¦‚从麦克风æ•获数æ®ã€å®žçŽ°åº”ç”¨ç¨‹åºå®šä¹‰çš„æ•ˆæžœæˆ–é€šè¿‡ç½‘ç»œä¼ è¾“éŸ³" +"频。从麦克风æ•èŽ·éŸ³é¢‘æ•°æ®æ—¶ï¼Œæ ·æœ¬çš„æ ¼å¼ä¸ºç«‹ä½“声 32 使µ®ç‚¹æ•° PCM。" #: doc/classes/AudioEffectCapture.xml msgid "" @@ -15269,7 +15288,6 @@ msgstr "" "与å¯é€‰çš„下一个å—符的å—å¶è·ã€‚" #: doc/classes/CanvasItem.xml -#, fuzzy msgid "" "Draws a colored, filled circle. See also [method draw_arc], [method " "draw_polyline] and [method draw_polygon].\n" @@ -15279,7 +15297,7 @@ msgid "" "create an AntialiasedRegularPolygon2D node. That node relies on a texture " "with custom mipmaps to perform antialiasing." msgstr "" -"绘制未填充的彩色圆形。å¦è¯·å‚阅 [method draw_arc]ã€[method draw_polyline]ã€" +"绘制填充的彩色圆形。å¦è¯·å‚阅 [method draw_arc]ã€[method draw_polyline]ã€" "[method draw_polygon]。\n" "[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到æ£ç¡®çš„æ•ˆæžœï¼Œå¹¶" "且å¯èƒ½æ— 法在æŸäº›å¹³å°ä¸Šæ£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/" @@ -16800,7 +16818,7 @@ msgstr "" "返回是å¦è®¾ç½®äº†ç¢°æ’žæŽ©ç [member collision_mask] 的指定ä½[code]bit[/code]。" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "返回对象的 [RID]。" @@ -17379,7 +17397,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Color.xml -#, fuzzy msgid "" "Constructs a color from a 32-bit integer in RGBA format (each byte " "represents a color channel).\n" @@ -17389,7 +17406,7 @@ msgid "" msgstr "" "从 RGBA æ ¼å¼çš„ 32 使•´æ•°æž„é€ é¢œè‰²ï¼Œæ¯ä¸ªå—节代表一个颜色通é“。\n" "[codeblock]\n" -"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n" +"var color = Color(274) # 类似 Color(0.0, 0.0, 0.004, 0.07)\n" "[/codeblock]" #: doc/classes/Color.xml @@ -17439,7 +17456,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Color.xml -#, fuzzy msgid "" "Returns the most contrasting color.\n" "[codeblock]\n" @@ -17450,9 +17466,8 @@ msgid "" msgstr "" "返回对比度最高的颜色。\n" "[codeblock]\n" -"var c = Color(0.3, 0.4, 0.9)\n" -"var contrasted_color = c.contrasted() # Equivalent to RGBA(204, 229, 102, " -"255)\n" +"var color = Color(0.3, 0.4, 0.9)\n" +"var contrasted_color = color.contrasted() # ç‰ä»·äºŽ RGBA(204, 229, 102, 255)\n" "[/codeblock]" #: doc/classes/Color.xml @@ -17471,7 +17486,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Color.xml -#, fuzzy msgid "" "Constructs a color from an HSV profile. [code]h[/code], [code]s[/code], and " "[code]v[/code] are values between 0 and 1.\n" @@ -17480,11 +17494,11 @@ msgid "" "50, 79, 0.8) or Color8(100, 151, 201, 0.8)\n" "[/codeblock]" msgstr "" -"从 HSV é…ç½®æ–‡ä»¶ä¸æž„建一个颜色。[code]h[/code]ã€[code]s[/code]å’Œ[code]v[/code]" -"是0å’Œ1之间的值。\n" +"从 HSV é…ç½®æ–‡ä»¶ä¸æž„建一个颜色。[code]h[/code]ã€[code]s[/code] å’Œ [code]v[/" +"code] 是 0 å’Œ 1 之间的值。\n" "[codeblock]\n" -"var c = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # Equivalent to HSV(210, 50, " -"79, 0.8) or Color8(100, 151, 201, 0.8)\n" +"var color = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # ç‰ä»·äºŽ HSV(210, 50, 79, " +"0.8) 或 Color8(100, 151, 201, 0.8)\n" "[/codeblock]" #: doc/classes/Color.xml @@ -17497,7 +17511,6 @@ msgstr "" "å¯ä»¥ç”¨æ¥ç¡®å®šé¢œè‰²æ˜¯äº®è‰²è¿˜æ˜¯æš—色。一般认为亮度å°äºŽ 0.5 的颜色是暗色。" #: doc/classes/Color.xml -#, fuzzy msgid "" "Returns the color's grayscale representation.\n" "The gray value is calculated as [code](r + g + b) / 3[/code].\n" @@ -17509,8 +17522,8 @@ msgstr "" "返回颜色的ç°åº¦è¡¨ç¤ºã€‚\n" "ç°åº¦å€¼è®¡ç®—为 [code](r + g + b) / 3[/code]。\n" "[codeblock]\n" -"var c = Color(0.2, 0.45, 0.82)\n" -"var gray = c.gray() # A value of 0.466667\n" +"var color = Color(0.2, 0.45, 0.82)\n" +"var gray = color.gray() # 值为 0.466667\n" "[/codeblock]" #: doc/classes/Color.xml @@ -17637,7 +17650,6 @@ msgstr "" "[/codeblock]" #: doc/classes/Color.xml -#, fuzzy msgid "" "Returns the color's HTML hexadecimal color string in ARGB format (ex: " "[code]ff34f822[/code]).\n" @@ -17653,9 +17665,9 @@ msgstr "" "å°† [code]with_alpha[/code] 设置为 [code]false[/code] å°†åå…进制å—符串ä¸çš„ " "Alpha 排除在外。\n" "[codeblock]\n" -"var c = Color(1, 1, 1, 0.5)\n" -"var s1 = c.to_html() # 返回 \"7fffffff\"\n" -"var s2 = c.to_html(false) # 返回 \"ffffff\"\n" +"var color = Color(1, 1, 1, 0.5)\n" +"var s1 = color.to_html() # 返回 \"7fffffff\"\n" +"var s2 = color.to_html(false) # 返回 \"ffffff\"\n" "[/codeblock]" #: doc/classes/Color.xml @@ -23722,12 +23734,17 @@ msgid "" msgstr "渲染æä¾›ç»™å®ƒçš„[Curve]。简化了绘制曲线和/或ä¿å˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "渲染到纹ç†ä¸Šçš„[code]curve[/code]。" +msgid "The [Curve] that is rendered onto the texture." +msgstr "渲染到纹ç†ä¸Šçš„ [Curve]。" #: doc/classes/CurveTexture.xml -msgid "The width of the texture." -msgstr "纹ç†çš„宽度。" +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 " +"the cost of increased generation time and memory usage." +msgstr "" +"纹ç†å®½åº¦ï¼ˆå•ä½ä¸ºåƒç´ )。较大的值能够更好地表示高频数æ®ï¼ˆä¾‹å¦‚æ–¹å‘çš„çªå˜ï¼‰ï¼Œä½†" +"ä¼šå¢žåŠ ç”Ÿæˆæ—¶é—´å’Œå†…å˜å 用。" #: doc/classes/CylinderMesh.xml msgid "Class representing a cylindrical [PrimitiveMesh]." @@ -24146,6 +24163,15 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "返回[Dictionary]ä¸çš„键列表。" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" +"å°† [code]dictionary[/code] ä¸çš„å…ƒç´ æ·»åŠ åˆ°è¿™ä¸ª [Dictionary] ä¸ã€‚默认情况下,ä¸" +"会å¤åˆ¶é‡å¤çš„é”®ï¼Œé™¤éž [code]overwrite[/code] 为 [code]true[/code]。" + +#: doc/classes/Dictionary.xml msgid "Returns the number of keys in the dictionary." msgstr "返回å—å…¸ä¸é”®çš„æ•°é‡ã€‚" @@ -26732,7 +26758,6 @@ msgstr "" "侧。" #: doc/classes/EditorPlugin.xml -#, fuzzy msgid "" "Gets the Editor's dialog used for making scripts.\n" "[b]Note:[/b] Users can configure it before use.\n" @@ -26745,12 +26770,38 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" -"èŽ·å–æ’件编辑器的状æ€ã€‚这用于ä¿å˜åœºæ™¯æ—¶ï¼ˆä»Žè€Œå†æ¬¡æ‰“开时,它的状æ€è¢«ä¿æŒï¼‰å’Œåˆ‡" -"æ¢æ ‡ç¾ï¼ˆä»Žè€Œçжæ€èƒ½å¤Ÿå½“拉片返回æ¢å¤ï¼‰æ—¶ä½¿ç”¨ã€‚" +"覆盖这个方法å¯ç”¨äºŽæä¾›æƒ³è¦ä¿å˜çš„çŠ¶æ€æ•°æ®ï¼Œç±»ä¼¼è§†å›¾ä½ç½®ã€ç½‘æ ¼è®¾ç½®ã€æŠ˜å æƒ…况" +"ç‰ã€‚会在ä¿å˜åœºæ™¯ï¼ˆå†æ¬¡æ‰“开时ä¿ç•™çжæ€ï¼‰å’Œåˆ‡æ¢æ ‡ç¾é¡µï¼ˆåˆ‡å›žæ ‡ç¾é¡µæ—¶æ¢å¤çжæ€ï¼‰æ—¶" +"用到。这些数æ®ä¼šè‡ªåЍä¿å˜åˆ°ç¼–è¾‘å™¨å…ƒæ•°æ®æ–‡ä»¶å¤¹ä¸å„个场景的 [code]editstate[/" +"code] 文件ä¸ã€‚å¦‚æžœä½ æƒ³è¦ä¸ºæ’ä»¶ä¿å˜å…¨å±€ï¼ˆä¸Žåœºæ™¯æ— 关)的编辑器数æ®ï¼Œä½ å¯ä»¥æ¢æˆ " +"[method get_window_layout]。\n" +"请使用 [method set_state] æ¢å¤ä¿å˜çš„状æ€ã€‚\n" +"[b]注æ„:[/b]é‡è¦çš„设置应该和项目一起进行æŒä¹…化,ä¸åº”该用这个方法æ¥ä¿å˜ã€‚\n" +"[b]注æ„:[/b]ä½ åªæœ‰å…ˆå®žçް [method get_plugin_name]ï¼ŒçŠ¶æ€æ‰èƒ½å¤Ÿè¿›è¡Œæ£ç¡®çš„ä¿å˜" +"å’Œæ¢å¤ã€‚\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" #: doc/classes/EditorPlugin.xml msgid "" @@ -26762,12 +26813,30 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" -"èŽ·å–æ’ä»¶çš„GUI布局。当调用[method queue_save_layout]更改了编辑器布局(例如,更" -"改åœé 点的ä½ç½®ï¼‰æ—¶æˆ–ä¿å˜é¡¹ç›®çš„编辑器布局。" +"覆盖这个方法å¯ç”¨äºŽæä¾›è¯¥æ’ä»¶çš„ GUI å¸ƒå±€æˆ–è€…ä»»ä½•å…¶ä»–ä½ æƒ³è¦ä¿å˜çš„æ•°æ®ã€‚会在调" +"用 [method queue_save_layout] ä¿å˜é¡¹ç›®çš„编辑器布局或者编辑器布局å‘生改å˜ï¼ˆä¾‹" +"如修改åœé 颿¿çš„ä½ç½®ï¼‰æ—¶ç”¨åˆ°ã€‚æ•°æ®ä¼šä¿å˜åˆ°ç¼–辑器元数æ®ç›®å½•çš„ " +"[code]editor_layout.cfg[/code] 文件ä¸ã€‚\n" +"请使用 [method set_window_layout] æ¢å¤ä¿å˜çš„布局。\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" #: doc/classes/EditorPlugin.xml msgid "" @@ -26895,12 +26964,50 @@ msgstr "" "用。" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." -msgstr "æ¢å¤[method get_state]ä¿å˜çš„状æ€ã€‚" +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" +msgstr "" +"æ¢å¤ç”¨ [method get_state] ä¿å˜çš„状æ€ã€‚这个方法会在编辑器的当å‰åœºæ™¯æ ‡ç¾é¡µå‘生" +"æ”¹å˜æ—¶è°ƒç”¨ã€‚\n" +"[b]注æ„:[/b]ä½ çš„æ’件必须实现 [method get_plugin_name],å¦åˆ™æ— 法被识别,这个" +"方法也ä¸ä¼šè¢«è°ƒç”¨ã€‚\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." -msgstr "æ¢å¤[method get_window_layout]ä¿å˜çš„æ’ä»¶GUI布局。" +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" +msgstr "" +"æ¢å¤ç”¨ [method get_window_layout] ä¿å˜çš„æ’ä»¶ GUI 布局和数æ®ã€‚编辑器å¯åŠ¨æ—¶ä¼šè°ƒ" +"用æ¯ä¸€ä¸ªæ’件的这个方法。请使用æä¾›çš„ [code]configuration[/code] 文件读å–ä½ ä¿" +"å˜çš„æ•°æ®ã€‚\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" #: doc/classes/EditorPlugin.xml msgid "" @@ -28818,7 +28925,7 @@ msgstr "" "[b]è¦å‘Šï¼š[/b]å¦‚æžœä½ åœ¨é¡¹ç›®çš„ä»»æ„ä½ç½®å°†å…¶è®¾ç½®ä¸º [code]false[/code],é‡è¦çš„错误" "ä¿¡æ¯å¯èƒ½ä¼šè¢«éšè—,å³ä½¿å®ƒä»¬æ˜¯ç”±å…¶ä»–脚本触å‘。如果在 [code]tool[/code] è„šæœ¬ä¸æŠŠ" "这个设置为 [code]false[/code],这也会影å“到编辑器本身。在确ä¿é”™è¯¯ä¿¡æ¯è¢«å¯ç”¨ä¹‹" -"å‰ï¼Œ[i]ä¸[/i]报告错误(默认情况下)。\n" +"å‰ï¼Œ[i]请勿[/i]æŠ¥å‘Šé”™è¯¯ï¼ˆå› ä¸ºé»˜è®¤æƒ…å†µä¸‹æ˜¯ä¼šçš„ï¼‰ã€‚\n" "[b]注æ„:[/b]当从编辑器è¿è¡Œä¸€ä¸ªé¡¹ç›®æ—¶ï¼Œè¿™ä¸ªå±žæ€§ä¸å½±å“编辑器的错误选项å¡ã€‚" #: doc/classes/Engine.xml @@ -29671,14 +29778,12 @@ msgid "Low quality for the screen-space ambient occlusion effect (fastest)." msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€å¿«ï¼‰ã€‚" #: doc/classes/Environment.xml -#, fuzzy msgid "Medium quality for the screen-space ambient occlusion effect." -msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚" +msgstr "ä¸ç‰è´¨é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚" #: doc/classes/Environment.xml -#, fuzzy msgid "High quality for the screen-space ambient occlusion effect (slowest)." -msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚" +msgstr "高质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚" #: doc/classes/Expression.xml msgid "A class that stores an expression you can execute." @@ -31006,13 +31111,14 @@ msgid "" "set_script] extends an existing object, if that object's class matches one " "of the script's base classes." msgstr "" -"用GDScript编程è¯è¨€å®žçŽ°çš„è„šæœ¬ã€‚è¯¥è„šæœ¬æ‰©å±•äº†å®žä¾‹åŒ–è¯¥å¯¹è±¡åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功能。\n" +"用 GDScript 编程è¯è¨€å®žçŽ°çš„è„šæœ¬ã€‚è¯¥è„šæœ¬æ‰©å±•äº†å®žä¾‹åŒ–è¯¥å¯¹è±¡åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功" +"能。\n" "[method new] 创建脚本的新实例。如果一个对象的类与脚本的基类之一匹é…,则 " "[method Object.set_script] 会扩展该对象。" #: modules/gdscript/doc_classes/GDScript.xml msgid "Returns byte code for the script source code." -msgstr "返回脚本æºä»£ç çš„å—节(byte)ç 。" +msgstr "返回脚本æºä»£ç çš„å—节ç 。" #: modules/gdscript/doc_classes/GDScript.xml msgid "" @@ -31058,10 +31164,10 @@ msgid "" "script have survived up to that point." msgstr "" "检查函数调用是å¦å¯ä»¥è¢«æ¢å¤ã€‚如果函数状æ€å·²ç»è¢«æ¢å¤ï¼Œåˆ™ä¸å˜åœ¨è¿™ç§æƒ…况。\n" -"如果[code]extended_check[/code]被å¯ç”¨ï¼Œå®ƒè¿˜ä¼šæ£€æŸ¥ç›¸å…³çš„脚本和对象是å¦ä»ç„¶å˜" -"在。扩展检查是在调试模å¼ä¸‹ä½œä¸º[method GDScriptFunctionState.resume]的一部分进" -"è¡Œçš„ï¼Œä½†æ˜¯å¦‚æžœä½ çŸ¥é“ä½ å¯èƒ½åœ¨ä¸ç¡®å®šå¯¹è±¡å’Œ/或脚本已ç»å˜æ´»åˆ°é‚£ä¸ªç‚¹çš„æƒ…况下å°è¯•æ¢" -"å¤ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™ä¸ªã€‚" +"如果 [code]extended_check[/code] 被å¯ç”¨ï¼Œå®ƒè¿˜ä¼šæ£€æŸ¥ç›¸å…³çš„脚本和对象是å¦ä»ç„¶å˜" +"在。扩展检查是在调试模å¼ä¸‹ä½œä¸º [method GDScriptFunctionState.resume] 的一部分" +"è¿›è¡Œçš„ï¼Œä½†æ˜¯å¦‚æžœä½ çŸ¥é“ä½ å¯èƒ½åœ¨ä¸ç¡®å®šå¯¹è±¡å’Œ/或脚本已ç»å˜æ´»åˆ°é‚£ä¸ªç‚¹çš„æƒ…况下å°è¯•" +"æ¢å¤ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™ä¸ªã€‚" #: modules/gdscript/doc_classes/GDScriptFunctionState.xml msgid "" @@ -31099,7 +31205,7 @@ msgid "" "The lower, the longer an impulse from one side takes to travel to the other " "side." msgstr "" -"X轴上的旋转阻尼é‡ã€‚\n" +"X 轴上的旋转阻尼é‡ã€‚\n" "越低,æ¥è‡ªä¸€ä¾§çš„冲力到达å¦ä¸€ä¾§çš„æ—¶é—´è¶Šé•¿ã€‚" #: doc/classes/Generic6DOFJoint.xml @@ -31117,35 +31223,35 @@ msgstr "" #: doc/classes/Generic6DOFJoint.xml msgid "" "The maximum amount of force that can occur, when rotating around the X axis." -msgstr "绕X轴旋转时所能产生的最大力。" +msgstr "绕 X 轴旋转时所能产生的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in negative direction to break loose and rotate around " "the X axis." -msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•X轴旋转。" +msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• X 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The amount of rotational restitution across the X axis. The lower, the more " "restitution occurs." -msgstr "X轴上的旋转æ¢å¤é‡ã€‚值越低,æ¢å¤é‡è¶Šå¤§ã€‚" +msgstr "X 轴上的旋转æ¢å¤é‡ã€‚值越低,æ¢å¤é‡è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "The speed of all rotations across the X axis." -msgstr "跨越X轴的所有旋转的速度。" +msgstr "跨越 X 轴的所有旋转的速度。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in positive direction to break loose and rotate around " "the X axis." -msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»•X轴旋转。" +msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»• X 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The amount of rotational damping across the Y axis. The lower, the more " "dampening occurs." -msgstr "Y轴上的旋转阻尼é‡ã€‚值越低,旋转的阻尼就越大。" +msgstr "Y 轴上的旋转阻尼é‡ã€‚值越低,旋转的阻尼就越大。" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], rotation across the Y axis is limited." @@ -31156,41 +31262,41 @@ msgid "" "When rotating across the Y axis, this error tolerance factor defines how " "much the correction gets slowed down. The lower, the slower." msgstr "" -"当在Y轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转越" -"慢。" +"当在 Y 轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转" +"越慢。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The maximum amount of force that can occur, when rotating around the Y axis." -msgstr "围绕Y轴旋转时,å¯èƒ½å‘生的最大力。" +msgstr "围绕 Y 轴旋转时,å¯èƒ½å‘生的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in negative direction to break loose and rotate around " "the Y axis." -msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•Y轴旋转。" +msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• Y 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The amount of rotational restitution across the Y axis. The lower, the more " "restitution occurs." -msgstr "跨越Y轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚" +msgstr "跨越 Y 轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "The speed of all rotations across the Y axis." -msgstr "跨越Y轴的所有旋转的速度。" +msgstr "跨越 Y 轴的所有旋转的速度。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in positive direction to break loose and rotate around " "the Y axis." -msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»•Y轴旋转。" +msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»• Y 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The amount of rotational damping across the Z axis. The lower, the more " "dampening occurs." -msgstr "跨越Z轴的旋转阻尼é‡ã€‚值越低,阻尼就越多。" +msgstr "跨越 Z 轴的旋转阻尼é‡ã€‚值越低,阻尼就越多。" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], rotation across the Z axis is limited." @@ -31201,35 +31307,35 @@ msgid "" "When rotating across the Z axis, this error tolerance factor defines how " "much the correction gets slowed down. The lower, the slower." msgstr "" -"当在Z轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转越" -"慢。" +"当在 Z 轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转" +"越慢。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The maximum amount of force that can occur, when rotating around the Z axis." -msgstr "围绕Z轴旋转时,å¯èƒ½å‘生的最角度。" +msgstr "围绕 Z 轴旋转时,å¯èƒ½å‘生的最角度。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in negative direction to break loose and rotate around " "the Z axis." -msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•Z轴旋转。" +msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• Z 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The amount of rotational restitution across the Z axis. The lower, the more " "restitution occurs." -msgstr "跨越Z轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚" +msgstr "跨越 Z 轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "The speed of all rotations across the Z axis." -msgstr "跨越Z轴的所有旋转的速度。" +msgstr "跨越 Z 轴的所有旋转的速度。" #: doc/classes/Generic6DOFJoint.xml msgid "" "The minimum rotation in positive direction to break loose and rotate around " "the Z axis." -msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œå¹¶ç»•Z轴旋转。" +msgstr "æ£æ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œå¹¶ç»• Z 轴旋转。" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], a rotating motor at the X axis is enabled." @@ -31237,11 +31343,11 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ X 轴的旋转马达。" #: doc/classes/Generic6DOFJoint.xml msgid "Maximum acceleration for the motor at the X axis." -msgstr "在Xè½´æ—‹è½¬çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" +msgstr "在 X è½´æ—‹è½¬çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "Target speed for the motor at the X axis." -msgstr "Xè½´ä¸Šç”µæœºçš„ç›®æ ‡é€Ÿåº¦ã€‚" +msgstr "X è½´ä¸Šç”µæœºçš„ç›®æ ‡é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], a rotating motor at the Y axis is enabled." @@ -31249,11 +31355,11 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ Y 轴的旋转马达。" #: doc/classes/Generic6DOFJoint.xml msgid "Maximum acceleration for the motor at the Y axis." -msgstr "电机在Xè½´çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" +msgstr "电机在 X è½´çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "Target speed for the motor at the Y axis." -msgstr "电机在Yè½´çš„ç›®æ ‡é€Ÿåº¦ã€‚" +msgstr "电机在 Y è½´çš„ç›®æ ‡é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], a rotating motor at the Z axis is enabled." @@ -31261,15 +31367,15 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ Z 轴的旋转马达。" #: doc/classes/Generic6DOFJoint.xml msgid "Maximum acceleration for the motor at the Z axis." -msgstr "电机在Zè½´çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" +msgstr "电机在 Z è½´çš„æœ€å¤§åŠ é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "Target speed for the motor at the Z axis." -msgstr "Zè½´ä¸Šç”µæœºçš„ç›®æ ‡é€Ÿåº¦ã€‚" +msgstr "Z è½´ä¸Šç”µæœºçš„ç›®æ ‡é€Ÿåº¦ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "The amount of damping that happens at the X motion." -msgstr "å‘生在Xè¿åŠ¨çš„é˜»å°¼é‡ã€‚" +msgstr "å‘生在 X è¿åŠ¨çš„é˜»å°¼é‡ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], the linear motion across the X axis is limited." @@ -31283,13 +31389,13 @@ msgstr "轴心点的 X 轴之间的最å°å·®å¼‚。" msgid "" "The amount of restitution on the X axis movement. The lower, the more " "momentum gets lost." -msgstr "Xè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" +msgstr "X è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "" "A factor applied to the movement across the X axis. The lower, the slower " "the movement." -msgstr "应用于X轴上移动的一个系数。值越低,移动的就越慢。" +msgstr "应用于 X 轴上移动的一个系数。值越低,移动的就越慢。" #: doc/classes/Generic6DOFJoint.xml msgid "The maximum difference between the pivot points' X axis." @@ -31297,7 +31403,7 @@ msgstr "轴心点的 X 轴之间的最大差异。" #: doc/classes/Generic6DOFJoint.xml msgid "The amount of damping that happens at the Y motion." -msgstr "å‘生在Yè¿åŠ¨çš„é˜»å°¼é‡ã€‚" +msgstr "å‘生在 Y è¿åŠ¨çš„é˜»å°¼é‡ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], the linear motion across the Y axis is limited." @@ -31311,13 +31417,13 @@ msgstr "轴心点的 Y 轴之间的最å°å·®å¼‚。" msgid "" "The amount of restitution on the Y axis movement. The lower, the more " "momentum gets lost." -msgstr "Yè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚å€¼è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" +msgstr "Y è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚å€¼è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "" "A factor applied to the movement across the Y axis. The lower, the slower " "the movement." -msgstr "应用于Y轴上移动的一个系数。值越低,移动的就越慢。" +msgstr "应用于 Y 轴上移动的一个系数。值越低,移动的就越慢。" #: doc/classes/Generic6DOFJoint.xml msgid "The maximum difference between the pivot points' Y axis." @@ -31325,7 +31431,7 @@ msgstr "轴心点的 Y 轴之间的最大差异。" #: doc/classes/Generic6DOFJoint.xml msgid "The amount of damping that happens at the Z motion." -msgstr "å‘生在Zè¿åŠ¨çš„é˜»å°¼é‡ã€‚" +msgstr "å‘生在 Z è¿åŠ¨çš„é˜»å°¼é‡ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "If [code]true[/code], the linear motion across the Z axis is limited." @@ -31339,13 +31445,13 @@ msgstr "轴心点的 Z 轴之间的最å°å·®å¼‚。" msgid "" "The amount of restitution on the Z axis movement. The lower, the more " "momentum gets lost." -msgstr "Yè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" +msgstr "Y è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚" #: doc/classes/Generic6DOFJoint.xml msgid "" "A factor applied to the movement across the Z axis. The lower, the slower " "the movement." -msgstr "适用于跨Z轴移动的一个系数。值越低,移动的就越慢。" +msgstr "适用于跨 Z 轴移动的一个系数。值越低,移动的就越慢。" #: doc/classes/Generic6DOFJoint.xml msgid "The maximum difference between the pivot points' Z axis." @@ -31363,11 +31469,11 @@ msgstr "" msgid "" "The maximum force the linear motor can apply on the X axis while trying to " "reach the target velocity." -msgstr "当å°è¯•è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶ï¼Œçº¿æ€§é©¬è¾¾å¯ä»¥åœ¨X轴上应用的最大力。" +msgstr "当å°è¯•è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶ï¼Œçº¿æ€§é©¬è¾¾å¯ä»¥åœ¨ X 轴上应用的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "The speed that the linear motor will attempt to reach on the X axis." -msgstr "线性马达在X轴上å°è¯•达到的速度。" +msgstr "线性马达在 X 轴上å°è¯•达到的速度。" #: doc/classes/Generic6DOFJoint.xml msgid "" @@ -31381,11 +31487,11 @@ msgstr "" msgid "" "The maximum force the linear motor can apply on the Y axis while trying to " "reach the target velocity." -msgstr "ç›´çº¿ç”µæœºåœ¨è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶å¯æ–½åŠ åœ¨Y轴上的最大力。" +msgstr "ç›´çº¿ç”µæœºåœ¨è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶å¯æ–½åŠ åœ¨ Y 轴上的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "The speed that the linear motor will attempt to reach on the Y axis." -msgstr "线性马达在Y轴上将会达到的速度。" +msgstr "线性马达在 Y 轴上将会达到的速度。" #: doc/classes/Generic6DOFJoint.xml msgid "" @@ -31399,11 +31505,11 @@ msgstr "" msgid "" "The maximum force the linear motor can apply on the Z axis while trying to " "reach the target velocity." -msgstr "å½“è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶ï¼Œçº¿æ€§é©¬è¾¾å¯ä»¥åœ¨X轴上应用的最大力。" +msgstr "å½“è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶ï¼Œçº¿æ€§é©¬è¾¾å¯ä»¥åœ¨ X 轴上应用的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "The speed that the linear motor will attempt to reach on the Z axis." -msgstr "线性马达在Z轴上试图达到的速度。" +msgstr "线性马达在 Z 轴上试图达到的速度。" #: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml msgid "The minimum difference between the pivot points' axes." @@ -31460,7 +31566,7 @@ msgstr "所有跨轴旋转的速度。" msgid "" "The amount of rotational damping across the axes. The lower, the more " "dampening occurs." -msgstr "跨越Z轴的旋转阻尼é‡ã€‚值越低,å‘生的阻尼就越多。" +msgstr "跨越 Z 轴的旋转阻尼é‡ã€‚值越低,å‘生的阻尼就越多。" #: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml msgid "" @@ -31471,7 +31577,7 @@ msgstr "在å„轴上的旋转æ¢å¤é‡ã€‚值越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚ #: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml msgid "" "The maximum amount of force that can occur, when rotating around the axes." -msgstr "围绕Z轴旋转时,å¯èƒ½å‘生的最大力。" +msgstr "围绕 Z 轴旋转时,å¯èƒ½å‘生的最大力。" #: doc/classes/Generic6DOFJoint.xml msgid "" @@ -31507,7 +31613,7 @@ msgstr "如果å¯ç”¨ï¼Œåˆ™å˜åœ¨è·¨è¿™äº›è½´çš„线性马达。" #: doc/classes/Generic6DOFJoint.xml doc/classes/HingeJoint.xml msgid "Represents the size of the [enum Flag] enum." -msgstr "表示[enum Flag]枚举的大å°ã€‚" +msgstr "表示 [enum Flag] 枚举的大å°ã€‚" #: doc/classes/Geometry.xml msgid "Helper node to calculate generic geometry operations." @@ -32768,11 +32874,13 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" -"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³" -"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的æ¥é•¿ä»Žæ¸å˜ä¸èŽ·å¾—çš„æ ·" -"本的æ’值,è§[member width]。" +"GradientTexture 使用 [Gradient] æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸èŽ·å¾—çš„é¢œè‰²ä»Žå·¦" +"到å³å¡«å……。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的æ¥é•¿ä»Žæ¸å˜ä¸èŽ·å¾—" +"çš„æ ·æœ¬çš„æ’å€¼ï¼ˆè§ [member width])。å¦è¯·å‚阅 [GradientTexture2D] å’Œ " +"[CurveTexture]。" #: doc/classes/GradientTexture.xml msgid "The [Gradient] that will be used to fill the texture." @@ -32793,12 +32901,13 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" "该纹ç†ä½¿ç”¨ [Gradient] æ¸å˜æ¥å¡«å…… 2D ç©ºé—´çº¹ç†æ•°æ®ã€‚æ¸å˜ä¼šæ ¹æ® [member fill] " "å’Œ [member repeat] 类型,使用从æ¸å˜ä¸èŽ·å–çš„é¢œè‰²è¿›è¡Œå¡«å……ã€‚è¯¥çº¹ç†æœªå¿…精确表示该" -"æ¸å˜ï¼Œå¯ä»¥æ˜¯ä»Žè¯¥æ¸å˜ä¸ŠæŒ‰ç…§å›ºå®šæ¥é•¿è¿›è¡Œé‡‡æ ·åŽå†è¿›è¡Œæ’值(请å‚阅 [member " -"width] å’Œ [member height])。" +"æ¸å˜ï¼Œå¯ä»¥æ˜¯ä»Žè¯¥æ¸å˜ä¸ŠæŒ‰ç…§å›ºå®šæ¥é•¿è¿›è¡Œé‡‡æ ·åŽå†è¿›è¡Œæ’å€¼ï¼ˆè§ [member width] å’Œ " +"[member height])。å¦è¯·å‚阅 [GradientTexture] å’Œ [CurveTexture]。" #: doc/classes/GradientTexture2D.xml msgid "" @@ -33732,6 +33841,14 @@ msgstr "" "[code]pos[/code] 应该使用 GridMap çš„æœ¬åœ°åæ ‡ç©ºé—´ã€‚" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" +"为 [code]true[/code] 时,这个 GridMap 会使用å•å…ƒæ ¼çš„å¯¼èˆªç½‘æ ¼èµ„æºæ¥åˆ›å»ºå¯¼èˆªåœ°" +"区。" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "如果为 [code]true[/code]ï¼Œåˆ™ç½‘æ ¼é¡¹ä»¥ X 轴为ä¸å¿ƒã€‚" @@ -33793,6 +33910,10 @@ msgid "The assigned [MeshLibrary]." msgstr "指定的 [MeshLibrary]。" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "GridMap 生æˆå¯¼èˆªåœ°åŒºçš„导航层。" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -36917,16 +37038,15 @@ msgstr "åœ¨æ˜ å°„æ•°æ®åº“䏿·»åŠ æ–°çš„æ˜ å°„æ¡ç›®ï¼ˆSDL2 æ ¼å¼ï¼‰ã€‚å¯é€‰æ msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " "want precise control over the timing of event handling." msgstr "" "将当å‰ç¼“冲区内的所有输入事件å‘é€ç»™æ¸¸æˆå¾ªçŽ¯ã€‚è¿™äº›äº‹ä»¶å¯èƒ½æ˜¯ç”±äºŽç´¯ç§¯è¾“å…¥" -"([method set_use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member " -"ProjectSettings.input_devices/buffering/agile_event_flushing])而被缓冲的结" -"果。\n" +"([member use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member ProjectSettings." +"input_devices/buffering/agile_event_flushing])而被缓冲的结果。\n" "引擎已ç»ä¼šåœ¨å…³é”®çš„æ‰§è¡Œç‚¹æ‰§è¡Œæ¤æ“作,至少æ¯å¸§ä¸€æ¬¡ã€‚ç„¶è€Œï¼Œåœ¨ä½ æƒ³è¦ç²¾ç¡®æŽ§åˆ¶äº‹ä»¶" "å¤„ç†æ—¶é—´çš„高级情况下,这å¯èƒ½æ˜¯æœ‰ç”¨çš„。" @@ -37113,10 +37233,6 @@ msgstr "" "起。" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "è¿”å›žé¼ æ ‡æ¨¡å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -37399,30 +37515,6 @@ msgstr "" "[b]注æ„:[/b]在 Android å’Œ iOS 上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ 感器的值所覆盖。" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "è®¾ç½®é¼ æ ‡æ¨¡å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" -"å¯ç”¨æˆ–ç¦ç”¨æ“作系统å‘é€çš„类似输入事件的累积。当å¯ç”¨è¾“入累积时,在一帧ä¸äº§ç”Ÿçš„" -"所有输入事件将被åˆå¹¶ï¼Œå¹¶åœ¨è¯¥å¸§å®Œæˆæ¸²æŸ“æ—¶å‘å‡ºã€‚å› æ¤ï¼Œè¿™é™åˆ¶äº†æ¯ç§’的输入方法调" -"用次数,使之与渲染FPS相一致。\n" -"è¾“å…¥ç´¯åŠ åœ¨é»˜è®¤æƒ…å†µä¸‹æ˜¯å¯ç”¨çš„。它å¯ä»¥è¢«ç¦ç”¨ï¼Œå°†ä»¥å¢žåŠ CPU使用率为代价,获得ç¨å¾®" -"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„应用ä¸ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦" -"ç”¨è¾“å…¥ç´¯åŠ ï¼Œä»¥èŽ·å¾—ç´§è·Ÿå®žé™…è¾“å…¥çš„ç»“æžœã€‚" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -37472,6 +37564,30 @@ msgstr "" "MOUSE_MODE_CONFINED] 时则是é™åˆ¶åœ¨æ¸¸æˆçª—å£å†…。" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "æŽ§åˆ¶é¼ æ ‡æ¨¡å¼ã€‚详情请å‚阅 [enum MouseMode]。" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" +"如果为 [code]true[/code],会对æ“作系统å‘é€çš„类似输入事件进行累积。当å¯ç”¨è¾“å…¥" +"累积时,在一帧ä¸äº§ç”Ÿçš„æ‰€æœ‰è¾“入事件将被åˆå¹¶ï¼Œå¹¶åœ¨è¯¥å¸§å®Œæˆæ¸²æŸ“æ—¶å‘å‡ºã€‚å› æ¤ï¼Œè¿™" +"é™åˆ¶äº†æ¯ç§’的输入方法调用次数,使之与渲染FPS相一致。\n" +"è¾“å…¥ç´¯åŠ åœ¨é»˜è®¤æƒ…å†µä¸‹æ˜¯å¯ç”¨çš„。它å¯ä»¥è¢«ç¦ç”¨ï¼Œå°†ä»¥å¢žåŠ CPU使用率为代价,获得ç¨å¾®" +"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„应用ä¸ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦" +"ç”¨è¾“å…¥ç´¯åŠ ï¼Œä»¥èŽ·å¾—ç´§è·Ÿå®žé™…è¾“å…¥çš„ç»“æžœã€‚" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "连接或æ–å¼€æ¸¸æˆæ‰‹æŸ„设备时触å‘。" @@ -37858,9 +37974,10 @@ msgstr "" "被释放。" #: doc/classes/InputEventJoypadButton.xml +#, fuzzy msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" "如果控制器支æŒï¼Œåˆ™è¡¨ç¤ºç”¨æˆ·ç”¨æ‰‹æŒ‡åœ¨æŒ‰é’®ä¸Šæ–½åŠ çš„åŽ‹åŠ›ã€‚èŒƒå›´ä»Ž [code]0[/code] 到 " "[code]1[/code]。" @@ -38198,9 +38315,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -38208,11 +38325,11 @@ msgstr "" "包å«é¼ æ ‡å’Œç¬”çš„è¿åŠ¨ä¿¡æ¯ã€‚支æŒç›¸å¯¹ã€ç»å¯¹ä½ç½®å’Œé€Ÿåº¦ã€‚请å‚阅 [method Node." "_input]。\n" "[b]注æ„:[/b]默认情况下,这个事件最多åªèƒ½åœ¨æ¯ä¸€å¸§æ¸²æŸ“ä¸å‘å‡ºä¸€æ¬¡ã€‚å¦‚æžœä½ éœ€è¦æ›´" -"精确的输入报告,请用 [code]false[/code] 调用 [method Input." -"set_use_accumulated_input] æ¥ä½¿äº‹ä»¶å°½å¯èƒ½é¢‘ç¹åœ°å‘å°„ã€‚å¦‚æžœä½ ä½¿ç”¨ " -"InputEventMouseMotion æ¥ç”»çº¿ï¼Œè¯·è€ƒè™‘åŒæ—¶å®žçް [url=https://en.wikipedia.org/" -"wiki/Bresenham%27s_line_algorithm]Bresenham 的线æ¡ç®—法[/url],以é¿å…在用户快" -"é€Ÿç§»åŠ¨é¼ æ ‡æ—¶å‡ºçŽ°å¯è§çš„线æ¡ç©ºéš™ã€‚" +"精确的输入报告,请将 [member Input.use_accumulated_input] 设为 [code]false[/" +"code],让事件尽å¯èƒ½é¢‘ç¹åœ°å‘å°„ã€‚å¦‚æžœä½ ä½¿ç”¨ InputEventMouseMotion æ¥ç”»çº¿ï¼Œè¯·è€ƒ" +"è™‘åŒæ—¶å®žçް [url=https://en.wikipedia.org/wiki/" +"Bresenham%27s_line_algorithm]Bresenham 的线æ¡ç®—法[/url],以é¿å…在用户快速移动" +"é¼ æ ‡æ—¶å‡ºçŽ°å¯è§çš„线æ¡ç©ºéš™ã€‚" #: doc/classes/InputEventMouseMotion.xml msgid "Mouse and input coordinates" @@ -43488,13 +43605,14 @@ msgstr "用于在2D䏿˜¾ç¤º[Mesh]的节点。" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" -"用于在2D䏿˜¾ç¤º[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ 上的工具从现有的[Sprite]æž„" -"建。选择 \"Sprite\",然åŽé€‰æ‹© \"转æ¢ä¸ºMesh2D\",在弹出的窗å£ä¸é€‰æ‹©è®¾ç½®å¹¶æŒ‰ä¸‹ " -"\"创建Mesh2D\"。" +"用于在 2D 䏿˜¾ç¤º [Mesh] 的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ 上的工具从现有的 " +"[Sprite] æž„å»ºã€‚é€‰ä¸ [Sprite] 节点,然åŽåœ¨ 2D 编辑器视区顶部选择[b]ç²¾çµ > 转æ¢" +"为 MeshInstance2D[/b]。" #: doc/classes/MeshInstance2D.xml msgid "The [Mesh] that will be drawn by the [MeshInstance2D]." @@ -44492,6 +44610,10 @@ msgstr "" "å¯¼èˆªç½‘æ ¼ä¹‹é—´çš„äº¤ç‚¹ã€‚å¦‚æžœæ‰¾åˆ°å¤šä¸ªäº¤ç‚¹ï¼Œåˆ™è¿”å›žæœ€æŽ¥è¿‘çº¿æ®µèµ·ç‚¹çš„äº¤ç‚¹ã€‚" #: doc/classes/Navigation.xml +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "返回这个导航地图在 [NavigationServer] 上的 [RID]。" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -44517,12 +44639,26 @@ msgstr "该值用于检测相近的边界,连接兼容的地区。" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šåœ¨ä½¿ç”¨ [method Navigation.get_simple_path] 进行路径请求时,导航" +"所能用到的导航地图层。" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" "定义了å‘上的方å‘。默认情况下,这是[code](0,1,0)[/code],这是世界的“å‘ä¸Šâ€æ–¹" "å‘。" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "当导航地图更新时ã€åœ°åŒºç§»åŠ¨æˆ–è¢«ä¿®æ”¹æ—¶å‘出。" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "2D 导航和寻路节点。" @@ -44564,12 +44700,19 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "ç”¨äºŽå—æ®µçš„ XZ å¹³é¢å•元尺寸。" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šåœ¨ä½¿ç”¨ [method Navigation2D.get_simple_path] 进行路径请求时,导" +"航所能用到的导航地图层。" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "访问底层 2D 导航的æœåŠ¡å™¨æŽ¥å£ã€‚" #: doc/classes/Navigation2DServer.xml -#, fuzzy msgid "" "Navigation2DServer is the server responsible for all 2D navigation. It " "handles several objects, namely maps, regions and agents.\n" @@ -44581,8 +44724,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -44597,9 +44744,16 @@ msgstr "" "Navigation2DServer 是负责所有 2D 导航的æœåŠ¡å™¨ï¼Œå¤„ç†çš„对象有地图(map)ã€åœ°åŒº" "(region)ã€ä»£ç†ï¼ˆagent)。\n" "地图是由地区组æˆçš„,地区åˆç”±å¯¼èˆªå¤šè¾¹å½¢ç»„æˆã€‚å®ƒä»¬ä¸€åŒæž„æˆäº† 2D 世界ä¸çš„å¯å¯¼èˆª" -"区域。两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点" -"(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [member Navigation." -"edge_connection_margin],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n" +"区域。\n" +"[b]注æ„:[/b]NavigationServer 的大多数修改都è¦åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§ä¹‹åŽç”Ÿæ•ˆï¼Œä¸æ˜¯ç«‹" +"å³ç”Ÿæ•ˆçš„。SceneTree ä¸å¯¼èˆªç›¸å…³çš„节点对地图ã€åœ°åŒºã€ä»£ç†ä½œå‡ºçš„修改也是如æ¤ï¼Œé€š" +"过脚本作出的修改亦然。\n" +"两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点" +"(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [code]edge_connection_margin[/" +"code],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n" +"ä½ å¯ä»¥é€šè¿‡ [method Navigation2DServer.region_set_navigation_layers] 为地区设" +"置导航层,使用 [method Navigation2DServer.map_get_path] 请求路径时会对导航层" +"è¿›è¡Œæ£€æŸ¥ã€‚è¿™æ ·å°±èƒ½å¤Ÿå¯¹ 2D 对象å¯ç”¨æˆ–ç¦ç”¨æŸäº›åŒºåŸŸã€‚\n" "è¦ä½¿ç”¨é˜²æ’žç³»ç»Ÿï¼Œå¯ä»¥ä½¿ç”¨ä»£ç†ã€‚ä½ å¯ä»¥è®¾ç½®ä»£ç†çš„ç›®æ ‡é€Ÿåº¦ï¼ŒæœåŠ¡å™¨å°±ä¼šä½¿ç”¨ä¿®æ£åŽ" "的速度触å‘回调。\n" "[b]注æ„:[/b]防撞系统会忽略地区。直接使用修æ£åŽçš„速度å¯èƒ½ä¼šå°†ä»£ç†æŽ¨åˆ°å¯å¯¼èˆªåŒº" @@ -44622,8 +44776,24 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "如果地图在上一帧å‘生了改å˜ï¼Œåˆ™è¿”回 [code]true[/code]。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." -msgstr "在 RVO å¤„ç†æœ«å°¾è°ƒç”¨çš„回调。" +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." +msgstr "" +"在 RVO å¤„ç†æœ«å°¾è°ƒç”¨çš„回调。如果手动创建了回调,并且代ç†ä½äºŽå¯¼èˆªåœ°å›¾ä¸Šï¼Œå°±ä¼šä¸º" +"该代ç†è®¡ç®—é¿éšœï¼Œå¹¶å°†è®¡ç®—出的安全速度 [code]safe_velocity[/code] 通过信å·å‘é€" +"ç»™ [code]receiver[/code] 对象上å为 [code]method[/code] 的方法。\n" +"[b]注æ„:[/b]åªè¦ä»£ç†è¿˜åœ¨å¯¼èˆªåœ°å›¾ä¸Šä¸”未被释放,创建的回调就始终会进行处ç†ï¼Œæ— " +"论 SceneTree 的状æ€å¦‚何。è¦ç¦ç”¨æŸä¸ªä»£ç†çš„回调分å‘ï¼Œè¯·å†æ¬¡ä½¿ç”¨ [method " +"agent_set_callback],为 [code]receiver[/code] 设置为 [code]null[/code]。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Puts the agent in the map." @@ -44693,6 +44863,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "返回所有与请求的导航地图 [code]map[/code] å…³è”的导航代ç†çš„ [RID]。" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "返回地图å•å…ƒæ ¼é«˜åº¦ã€‚[b]注æ„:[/b]尚未实现。" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Returns the map cell size." msgstr "返回地图的å•å…ƒæ ¼å¤§å°ã€‚" @@ -44716,8 +44890,13 @@ msgid "" msgstr "返回地图的边界连接边è·ã€‚è¾¹ç•Œè¿žæŽ¥è¾¹è·æ˜¯ç”¨äºŽè¿žæŽ¥ä¸¤ä¸ªåœ°åŒºçš„è·ç¦»ã€‚" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." -msgstr "返回从原点到终点的导航路径。" +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." +msgstr "" +"返回从起点到达终点的导航路径。[code]navigation_layers[/code] 是å…许在路径ä¸å‡º" +"çŽ°çš„æ‰€æœ‰åœ°åŒºå±‚çš„ä½æŽ©ç 。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" @@ -44733,6 +44912,12 @@ msgstr "如果地图处于活动状æ€ï¼Œåˆ™è¿”回 [code]true[/code]。" msgid "Sets the map active." msgstr "设置地图的激活æ€ã€‚" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "è®¾ç½®ç”¨äºŽç„ŠæŽ¥å¯¼èˆªç½‘æ ¼å¤šè¾¹å½¢çš„åœ°å›¾å•å…ƒæ ¼é«˜åº¦ã€‚[b]注æ„:[/b]尚未实现。" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "è®¾ç½®ç”¨äºŽç„ŠæŽ¥å¯¼èˆªç½‘æ ¼å¤šè¾¹å½¢çš„åœ°å›¾å•å…ƒæ ¼å¤§å°ã€‚" @@ -44748,14 +44933,62 @@ msgstr "创建一个新的地区。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" +"返回连接门的终点。[code]connection[/code] 是 0 å’Œ [method " +"region_get_connections_count] 返回值之间的索引å·ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" +"返回连接门的起点。[code]connection[/code] 是 0 å’Œ [method " +"region_get_connections_count] 返回值之间的索引å·ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "返回 [code]region[/code] 地区与其他地区在地图上有多少连接。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "返回 [code]region[/code] 地区的进入消耗 [code]enter_cost[/code]。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "返回请求的导航地区 [code]region[/code] 所关è”的导航地图的 [RID]。" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the region's navigation layers." +msgstr "返回该地区的导航层。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "返回 [code]region[/code] 地区的移动消耗 [code]travel_cost[/code]。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "设置 [code]region[/code] 地区的进入消耗 [code]enter_cost[/code]。" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the map for the region." msgstr "设置该地区的地图。" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" +"设置该地区的导航层。å¯ç”¨äºŽï¼ˆä½¿ç”¨ [method Navigation2DServer.map_get_path])请" +"求路径时对地区进行选择。" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Sets the navigation mesh for the region." msgstr "è®¾ç½®è¯¥åœ°å›¾çš„å¯¼èˆªç½‘æ ¼ã€‚" @@ -44764,6 +44997,10 @@ msgstr "è®¾ç½®è¯¥åœ°å›¾çš„å¯¼èˆªç½‘æ ¼ã€‚" msgid "Sets the global transformation for the region." msgstr "è®¾ç½®è¯¥åœ°åŒºçš„å…¨å±€å˜æ¢ã€‚" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "设置 [code]region[/code] 地区的移动消耗 [code]travel_cost[/code]。" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "在导航ä¸ç”¨äºŽé˜²æ’žçš„ 3D 代ç†ã€‚" @@ -44773,14 +45010,26 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" "导航ä¸ä½¿ç”¨çš„ 3D 代ç†ï¼Œå¯ä»¥åœ¨å‰å¾€æŸä¸ªä½ç½®æ—¶èº²é¿é™æ€å’ŒåЍæ€éšœç¢ç‰©ã€‚躲é¿åЍæ€éšœç¢" "物使用的是 RVO(Reciprocal Velocity Obstacles,相对速度障ç¢ç‰©ï¼‰é˜²æ’žç®—法。代ç†" -"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©ä»£ç†æˆä¸º [Navigation] 节点的å项实现,也" -"å¯ä»¥ä½¿ç”¨ [method set_navigation]。[NavigationAgent] 是物ç†å®‰å…¨çš„。" +"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚默认情况下,这个节点会在默认的 [World] 导航地图ä¸è¿›" +"行注册。如果这个节点是 [Navigation] 节点的å项,那么就会在这个导航节点的导航" +"地图ä¸è¿›è¡Œæ³¨å†Œï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ [method set_navigation] 函数直接设置导航节点。" +"[NavigationAgent] 是物ç†å®‰å…¨çš„。\n" +"[b]注æ„:[/b]使用 [method set_target_location] 之åŽï¼Œå¿…须在æ¯ä¸ªç‰©ç†å¸§ä½¿ç”¨ä¸€" +"次 [method get_next_location] å‡½æ•°æ¥æ›´æ–° NavigationAgent 的内部路径逻辑。这个" +"函数返回的å‘é‡ä½ç½®åº”该用作该代ç†çš„父节点的下一次移动ä½ç½®ã€‚" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" @@ -44801,8 +45050,21 @@ msgstr "" "å¯èƒ½å‘生å˜åŒ–ã€‚å› æ¤ï¼Œæœ€å¥½æ¯ä¸€å¸§éƒ½æ£€æŸ¥ä¸€ä¸‹ã€‚" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." -msgstr "è¿”å›žä»Žèµ·ç‚¹åˆ°ç»ˆç‚¹çš„è·¯å¾„ï¼Œä½¿ç”¨å…¨å±€åæ ‡ã€‚" +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." +msgstr "" +"返回这个代ç†ä»Žèµ·ç‚¹åˆ°ç»ˆç‚¹çš„当å‰è·¯å¾„ï¼Œä½¿ç”¨å…¨å±€åæ ‡ã€‚该路径åªä¼šåœ¨ç›®æ ‡ä½ç½®å‘生å˜" +"化,或者代ç†è¦æ±‚釿–°è®¡ç®—路径时更新。路径数组ä¸åº”ç›´æŽ¥ç”¨ä½œç§»åŠ¨è·¯å¾„ï¼Œä»£ç†æœ‰å…¶å†…" +"部的路径逻辑,手动修改路径数组å¯èƒ½ä¼šé€ æˆç ´å。请在æ¯ä¸€ä¸ªç‰©ç†å¸§ä¸è°ƒç”¨ä¸€æ¬¡ " +"[method get_next_location] 获å–该代ç†çš„下一个路径点,这个函数会更新其内部的路" +"径逻辑。" #: doc/classes/NavigationAgent.xml msgid "" @@ -44816,14 +45078,33 @@ msgid "" "system." msgstr "返回该代ç†çš„导航系统所使用的 [Navigation] 节点。" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" +"返回这个 NavigationAgent 节点的导航地图的 [RID]。这个函数返回的始终是在 " +"NavigationAgent ä¸Šè®¾ç½®çš„åœ°å›¾ï¼Œä¸æ˜¯ NavigationServer ä¸Šçš„æŠ½è±¡ä»£ç†æ‰€ä½¿ç”¨çš„地" +"图。如果通过 NavigationServer API 修改了代ç†çš„地图,该 NavigationAgent 节点是" +"ä¸ä¼šæ„ŸçŸ¥åˆ°åœ°å›¾çš„å˜åŒ–的。请使用 [method set_navigation_map] 修改该 " +"NavigationAgent çš„å¯¼èˆªåœ°å›¾ï¼Œèƒ½å¤ŸåŒæ—¶åœ¨ NavigationServer 上的代ç†ã€‚" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" -"返回å¯ä»¥ç§»åŠ¨è‡³çš„ [Vector3] å…¨å±€åæ ‡ï¼Œç¡®ä¿ä¸é€”æ²¡æœ‰é™æ€ç‰©ä½“é˜»æŒ¡ã€‚å¦‚æžœä»£ç†æ²¡æœ‰å¯¼" -"航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„åŽŸç‚¹ã€‚" +"返回å¯ä»¥ç§»åŠ¨è‡³çš„ä¸‹ä¸€ä¸ªä½ç½®ï¼Œä½¿ç”¨å…¨å±€åæ ‡ï¼Œç¡®ä¿ä¸é€”æ²¡æœ‰é™æ€ç‰©ä½“阻挡。如果代ç†" +"没有导航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„ä½ç½®ã€‚必须在æ¯ä¸ªç‰©ç†å¸§éƒ½è°ƒç”¨ä¸€æ¬¡è¿™ä¸ªå‡½æ•°ï¼Œ" +"æ›´æ–° NavigationAgent 内部的路径逻辑。" #: doc/classes/NavigationAgent.xml msgid "Returns the [RID] of this agent on the [NavigationServer]." @@ -44870,6 +45151,14 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" +"设置这个 NavigationAgent 节点所应使用的导航地图的 [RID]ï¼ŒåŒæ—¶è¿˜ä¼šæ›´æ–° " +"NavigationServer ä¸Šçš„ä»£ç† [code]agent[/code]。" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "设置用户期望的终点ä½ç½®ã€‚会将当å‰å¯¼èˆªè·¯å¾„清空。" @@ -44884,8 +45173,18 @@ msgstr "" "ä¼šè§¦å‘ [signal velocity_computed] ä¿¡å·ã€‚" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." -msgstr "代ç†çš„高度åç§»é‡ï¼Œç”¨äºŽåŒ¹é…å¯¼èˆªç½‘æ ¼çš„é«˜åº¦ã€‚" +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." +msgstr "" +"这个 NavigationAgent 的任何å‘é‡ä½ç½®çš„ Y åæ ‡å€¼éƒ½ä¼šå‡åŽ» NavigationAgent 的高度" +"åç§»é‡ã€‚NavigationAgent 的高度åç§»é‡ä¸ä¼šå‘生改å˜ï¼Œä¹Ÿä¸ä¼šå½±å“å¯¼èˆªç½‘æ ¼å’Œå¯»è·¯ç»“" +"æžœã€‚å¦‚æžœå…¶ä»–å¯¼èˆªåœ°å›¾ä½¿ç”¨äº†å¸¦æœ‰å¯¼èˆªç½‘æ ¼çš„åœ°åŒºï¼Œå¼€å‘者使用åˆé€‚的代ç†åŠå¾„或高度" +"对其进行了烘焙,那么就必须支æŒä¸åŒå¤§å°çš„代ç†ã€‚" #: doc/classes/NavigationAgent.xml msgid "" @@ -44916,6 +45215,15 @@ msgstr "ä»£ç†æ‰€éœ€è€ƒè™‘的最大邻居数。" msgid "The maximum speed that an agent can move." msgstr "ä»£ç†æ‰€èƒ½è¾¾åˆ°çš„æœ€å¤§ç§»åŠ¨é€Ÿåº¦ã€‚" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationAgent] 所属的导航地图层。请求路径时,代ç†ä¼šå¿½ç•¥æ²¡" +"有任何匹é…å±‚çš„å¯¼èˆªç½‘æ ¼ã€‚" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "æœç´¢å…¶ä»–代ç†çš„è·ç¦»ã€‚" @@ -44986,14 +45294,26 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" "导航ä¸ä½¿ç”¨çš„ 2D 代ç†ï¼Œå¯ä»¥åœ¨å‰å¾€æŸä¸ªä½ç½®æ—¶èº²é¿é™æ€å’ŒåЍæ€éšœç¢ç‰©ã€‚躲é¿åЍæ€éšœç¢" "物使用的是 RVO(Reciprocal Velocity Obstacles,相对速度障ç¢ç‰©ï¼‰é˜²æ’žç®—法。代ç†" -"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©ä»£ç†æˆä¸º [Navigation2D] 节点的å项实现," -"也å¯ä»¥ä½¿ç”¨ [method set_navigation]。[NavigationAgent2D] 是物ç†å®‰å…¨çš„。" +"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚默认情况下,这个节点会在默认的 [World2D] 导航地图ä¸" +"进行注册。如果这个节点是 [Navigation2D] 节点的å项,那么就会在这个导航节点的" +"导航地图ä¸è¿›è¡Œæ³¨å†Œï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ [method set_navigation] 函数直接设置导航节点。" +"[NavigationAgent2D] 是物ç†å®‰å…¨çš„。\n" +"[b]注æ„:[/b]使用 [method set_target_location] 之åŽï¼Œå¿…须在æ¯ä¸ªç‰©ç†å¸§ä½¿ç”¨ä¸€" +"次 [method get_next_location] å‡½æ•°æ¥æ›´æ–° NavigationAgent 的内部路径逻辑。这个" +"函数返回的å‘é‡ä½ç½®åº”该用作该代ç†çš„父节点的下一次移动ä½ç½®ã€‚" #: doc/classes/NavigationAgent2D.xml msgid "" @@ -45008,15 +45328,6 @@ msgid "" msgstr "返回该代ç†çš„导航系统所使用的 [Navigation2D] 节点。" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" -"返回å¯ä»¥ç§»åŠ¨è‡³çš„ [Vector2] å…¨å±€åæ ‡ï¼Œç¡®ä¿ä¸é€”æ²¡æœ‰é™æ€ç‰©ä½“é˜»æŒ¡ã€‚å¦‚æžœä»£ç†æ²¡æœ‰å¯¼" -"航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„åŽŸç‚¹ã€‚" - -#: doc/classes/NavigationAgent2D.xml msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "返回这个代ç†åœ¨ [Navigation2DServer] 上的 [RID]。" @@ -45043,6 +45354,15 @@ msgstr "" "code]。为é¿éšœå¤„ç†æ³¨å†Œå¤§é‡ä»£ç†ä¼šå¯¹æ€§èƒ½æœ‰æ˜¾è‘—å½±å“,应该åªåœ¨å½“剿œ‰éœ€è¦çš„代ç†ä¸Šå¯" "用。" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationAgent2D] 所属的导航地图层。请求路径时,代ç†ä¼šå¿½ç•¥" +"没有任何匹é…å±‚çš„å¯¼èˆªç½‘æ ¼ã€‚" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "ç”¨äºŽæ¨¡æ‹Ÿå¯æ¥è¡ŒåŒºåŸŸå’Œéšœç¢ç‰©çš„ç½‘æ ¼ã€‚" @@ -45075,9 +45395,10 @@ msgstr "é€šè¿‡æ ¹æ® [Mesh] 设置顶点和索引æ¥åˆå§‹åŒ–å¯¼èˆªç½‘æ ¼ã€‚" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." -msgstr "返回[member geometry/collision_mask]的指定[code]bit[/code]是å¦è¢«è®¾ç½®ã€‚" +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." +msgstr "" +"返回 [member geometry_collision_mask] 上指定的 [code]bit[/code] 是å¦å·²è®¾ç½®ã€‚" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -45098,14 +45419,14 @@ msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector3Array]。 #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" -"如果 [code]value[/code] 为 [code]true[/code],则在 [member geometry/" -"collision_mask] ä¸è®¾ç½®æŒ‡å®šçš„ [code]bit[/code]。\n" -"如果 [code]value[/code] 为 [code]false[/code],则在 [member geometry/" -"collision_mask] 䏿¸…除指定的 [code]bit[/code]。" +"如果 [code]value[/code] 为 [code]true[/code],则在 [member " +"geometry_collision_mask] ä¸è®¾ç½®æŒ‡å®šçš„ [code]bit[/code]。\n" +"如果 [code]value[/code] 为 [code]false[/code],则在 [member " +"geometry_collision_mask] 䏿¸…除指定的 [code]bit[/code]。" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml msgid "" @@ -45118,19 +45439,19 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" "地æ¿åˆ°å¤©èбæ¿çš„æœ€å°é«˜åº¦ï¼Œä»ç„¶å…许被认为是å¯è¡Œèµ°çš„地æ¿ã€‚\n" -"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚" +"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell_height] çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" "被认为ä»å¯ç©¿è¶Šçš„æœ€å°å¢™å£é«˜åº¦ã€‚\n" -"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚" +"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„ [member cell_height] çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml msgid "The maximum slope that is considered walkable, in degrees." @@ -45141,10 +45462,10 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" "侵蚀/缩å°è¿œç¦»éšœç¢ç‰©çš„高度场的å¯è¡Œèµ°åŒºåŸŸè·ç¦»ã€‚\n" -"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/size] çš„å€æ•°ã€‚" +"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell_size] çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml msgid "The Y axis cell size to use for fields." @@ -45171,18 +45492,10 @@ msgstr "简化轮廓的边界边缘应å离原始原始轮廓的最大è·ç¦»ã€‚ msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" "æ²¿ç½‘æ ¼è¾¹ç•Œçš„è½®å»“çš„æœ€å¤§å…许长度。\n" -"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚" - -#: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." -msgstr "" -"如果为 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent/height],则将" -"å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºä¸å¯è¡Œèµ°ã€‚" +"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell_size]çš„å€æ•°ã€‚" #: doc/classes/NavigationMesh.xml msgid "If [code]true[/code], marks spans that are ledges as non-walkable." @@ -45191,19 +45504,27 @@ msgstr "如果为 [code]true[/code]ï¼Œåˆ™æ ‡è®°è¾¹ç¼˜é—´çš„è·¨åº¦ä¸ºä¸å¯è¡Œèµ° #: doc/classes/NavigationMesh.xml msgid "" "If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"is within [member agent_max_climb] of a walkable neighbor." +msgstr "" +"如果为 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member " +"agent_max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚" + +#: doc/classes/NavigationMesh.xml +msgid "" +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" -"如果为 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member agent/" -"max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚" +"如果为 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent_height],则将" +"å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºä¸å¯è¡Œèµ°ã€‚" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" "用于扫æé™æ€ç¢°æ’žçš„物ç†å±‚。\n" -"仅在 [member geometry/parsed_geometry_type]是[constant " +"仅在 [member geometry_parsed_geometry_type] 是 [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] 或 [constant PARSED_GEOMETRY_BOTH] æ—¶æ‰ä½¿" "用。" @@ -45222,12 +45543,12 @@ msgstr "çƒ˜ç„™æ—¶ä½¿ç”¨çš„å‡ ä½•ä½“çš„æºã€‚å‚阅 [enum SourceGeometryMode]。" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" "è¦æ‰«æçš„å‡ ä½•ä½“ç»„çš„å称。\n" -"åªæœ‰å½“ [member geometry/source_geometry_mode]是[constant " +"åªæœ‰å½“ [member geometry_source_geometry_mode] 是 [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] 或 [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT] æ—¶æ‰ä½¿ç”¨ã€‚" @@ -45298,10 +45619,10 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" -"å°† [StaticBody] 碰撞器解æžä¸ºå‡ 何体。碰撞器应ä½äºŽ [member geometry/" -"collision_mask] 指定的任何层ä¸ã€‚" +"å°† [StaticBody] 碰撞器解æžä¸ºå‡ 何体。碰撞器应ä½äºŽ [member " +"geometry_collision_mask] 指定的任何层ä¸ã€‚" #: doc/classes/NavigationMesh.xml msgid "" @@ -45323,17 +45644,17 @@ msgstr "递归扫æ [NavigationMeshInstance] çš„å节点以获å–å‡ ä½•ä½“ã€‚" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" -"ä»¥é€’å½’æ–¹å¼æ‰«æç»„ä¸çš„节点åŠå…¶å节点以获å–å‡ ä½•å›¾å½¢ã€‚è¯¥ç»„ç”± [member geometry/" -"source_group_name] 指定。" +"ä»¥é€’å½’æ–¹å¼æ‰«æç»„ä¸çš„节点åŠå…¶å节点以获å–å‡ ä½•å›¾å½¢ã€‚è¯¥ç»„ç”± [member " +"geometry_source_group_name] 指定。" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" -"使用一个组ä¸çš„èŠ‚ç‚¹è¿›è¡Œå‡ ä½•è¿ç®—。该组由 [member geometry/source_group_name] 指" +"使用一个组ä¸çš„èŠ‚ç‚¹è¿›è¡Œå‡ ä½•è¿ç®—。该组由 [member geometry_source_group_name] 指" "定。" #: doc/classes/NavigationMesh.xml @@ -45403,14 +45724,14 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" "将导航数æ®çƒ˜ç„™è‡³æä¾›çš„ [code]nav_mesh[/code] ä¸ã€‚è§£æžçš„æ˜¯æä¾›çš„æ ¹èŠ‚ç‚¹ " "[code]root_node[/code] çš„å节点,或å¯èƒ½åŒ…å«åŽŸå§‹å‡ ä½•ä½“çš„åˆ†ç»„ã€‚è§£æžè¡Œä¸ºå¯ä»¥é€š" -"过 [NavigationMesh] çš„ [member NavigationMesh.geometry/parsed_geometry_type] " -"å’Œ [member NavigationMesh.geometry/source_geometry_mode] 属性控制。" +"过 [NavigationMesh] çš„ [member NavigationMesh.geometry_parsed_geometry_type] " +"å’Œ [member NavigationMesh.geometry_source_geometry_mode] 属性控制。" #: doc/classes/NavigationMeshGenerator.xml msgid "" @@ -45425,11 +45746,34 @@ msgstr "[NavigationMesh] 的一个实例。" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." -msgstr "" -"[NavigationMesh] çš„ä¸€ä¸ªå®žä¾‹ã€‚å®ƒä¼šæ ¹æ® [NavigationMesh] 资æºï¼Œå‘ŠçŸ¥ " -"[Navigation] 节点什么å¯ä»¥å¯¼èˆªã€ä»€ä¹ˆä¸å¯ä»¥ã€‚应该是 [Navigation] 节点的å节点。" +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." +msgstr "" +"[NavigationMesh] 的实例。[Navigation] èŠ‚ç‚¹æ ¹æ®å®ƒçš„ [NavigationMesh] èµ„æºæ¥ç¡®" +"定哪些å¯ä»¥è¿›è¡Œå¯¼èˆªã€å“ªäº›ä¸èƒ½ã€‚\n" +"默认情况下,这个节点会在默认的 [World] 导航地图ä¸è¿›è¡Œæ³¨å†Œã€‚如果这个节点是 " +"[Navigation] 节点的å项,就会在该导航节点的导航地图ä¸è¿›è¡Œæ³¨å†Œã€‚\n" +"如果两个地图共享类似的边界,就å¯ä»¥ç›¸äº’è¿žæŽ¥ã€‚ä½ å¯ä»¥é€šè¿‡ [method " +"NavigationServer.map_set_edge_connection_margin] 设置两个顶点连接两æ¡è¾¹ç•Œæ‰€éœ€" +"的最å°è·ç¦»ã€‚\n" +"[b]注æ„:[/b]å°†ä¸¤ä¸ªåœ°åŒºçš„å¯¼èˆªç½‘æ ¼ç›¸äº’é‡å å¹¶ä¸è¶³ä»¥å°†å…¶ç›¸è¿žã€‚它们必须共享类似的" +"边界。\n" +"从å¦ä¸€ä¸ªåœ°åŒºè¿›å…¥è¿™ä¸ªåœ°å›¾çš„æ¶ˆè€—å¯ä»¥é€šè¿‡ [member enter_cost] 进行控制。\n" +"[b]注æ„:[/b]如果起点已ç»ä½äºŽè¿™ä¸ªåœ°åŒºä¹‹ä¸ï¼Œè¿™ä¸ªå€¼ä¸ä¼šåŠ å…¥åˆ°è·¯å¾„æ¶ˆè€—ä¹‹ä¸ã€‚\n" +"在这个地区ä¸ç§»åŠ¨æ‰€éœ€çš„æ¶ˆè€—å¯ä»¥é€šè¿‡ [member travel_cost] 系数进行控制。" #: doc/classes/NavigationMeshInstance.xml msgid "" @@ -45466,10 +45810,43 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "决定该 [NavigationMeshInstance] å·²å¯ç”¨è¿˜æ˜¯å·²ç¦ç”¨ã€‚" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" +"当从å¦ä¸€ä¸ªå¯¼èˆªåœ°åŒºçš„ç½‘æ ¼è¿›å…¥è¿™ä¸ªåœ°åŒºçš„å¯¼èˆªç½‘æ ¼è¿›è¡Œå¯»è·¯æ—¶ï¼Œä¼šå°†è¿›å…¥æ¶ˆè€— " +"[code]enter_cost[/code] åŠ å…¥è·¯å¾„é•¿åº¦ï¼Œä»Žè€Œç¡®å®šæœ€çŸè·¯å¾„。" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationMesh] 所属的导航地图层。使用 [method " +"NavigationServer.map_get_path] 请求路径时会忽略没有任何匹é…å±‚çš„å¯¼èˆªç½‘æ ¼ï¼Œå¯¼èˆª" +"地图åªä¼šå°†æ‹¥æœ‰åŒ¹é…å±‚çš„å¯¼èˆªç½‘æ ¼è¿›è¡Œè¿‘ä¼¼åˆå¹¶ã€‚" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "使用的 [NavigationMesh] 资æºã€‚" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +#, fuzzy +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" +"å½“åœ¨è¿™ä¸ªåœ°åŒºçš„å¯¼èˆªç½‘æ ¼ä¸è¿›è¡Œå¯»è·¯æ—¶ï¼Œä¼šå°†å·²ç§»åŠ¨çš„è·ç¦»ä¹˜ä¸Šç§»åŠ¨æ¶ˆè€— " +"[code]travel_cost[/code],从而确定最çŸè·¯å¾„。" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "å¯¼èˆªç½‘æ ¼çƒ˜ç„™æ“ä½œå®Œæˆæ—¶å‘出通知。" @@ -45486,11 +45863,15 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" "导航ä¸ç”¨äºŽé˜²æ’žçš„ 3D éšœç¢ç‰©ã€‚éšœç¢ç‰©éœ€è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©éšœç¢ç‰©" "æˆä¸º [Navigation] 节点的å项实现,也å¯ä»¥ä½¿ç”¨ [method set_navigation]。" -"[NavigationObstacle] 是物ç†å®‰å…¨çš„。" +"[NavigationObstacle] 是物ç†å®‰å…¨çš„。\n" +"[b]注æ„:[/b]éšœç¢ç‰©åº”ä½œä¸ºå¤„ç†æŒç»ç§»åŠ¨çš„ç‰©ä½“çš„æœ€åŽæ‰‹æ®µï¼Œæ— æ³•è¿›è¡Œé«˜æ•ˆçš„ï¼ˆé‡æ–°ï¼‰" +"烘焙。" #: doc/classes/NavigationObstacle.xml msgid "" @@ -45532,11 +45913,15 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" "导航ä¸ç”¨äºŽé˜²æ’žçš„ 2D éšœç¢ç‰©ã€‚éšœç¢ç‰©éœ€è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©éšœç¢ç‰©" "æˆä¸º [Navigation2D] 节点的å项实现,也å¯ä»¥ä½¿ç”¨ [method set_navigation]。" -"[NavigationObstacle2D] 是物ç†å®‰å…¨çš„。" +"[NavigationObstacle2D] 是物ç†å®‰å…¨çš„。\n" +"[b]注æ„:[/b]éšœç¢ç‰©åº”ä½œä¸ºå¤„ç†æŒç»ç§»åŠ¨çš„ç‰©ä½“çš„æœ€åŽæ‰‹æ®µï¼Œè¿™äº›ç‰©ä½“æ— æ³•è¿›è¡Œé«˜æ•ˆçš„" +"ï¼ˆé‡æ–°ï¼‰çƒ˜ç„™ã€‚" #: doc/classes/NavigationObstacle2D.xml msgid "" @@ -45643,6 +46028,17 @@ msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" +"返回这个导航多边形的 [NavigationMesh]ã€‚è¿™ä¸ªå¯¼èˆªç½‘æ ¼å¯ç”¨äºŽä½¿ç”¨ [method " +"NavigationServer.region_set_navmesh] API 直接更新æŸä¸ªåœ°åŒºçš„å¯¼èˆªç½‘æ ¼ï¼ˆ2D 在底" +"层使用的是 3D æœåŠ¡å™¨ï¼‰ã€‚" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "返回[PoolVector2Array],包å«åœ¨ç¼–è¾‘å™¨ä¸æˆ–通过脚本创建的轮廓的顶点。" @@ -45683,6 +46079,42 @@ msgstr "" "make_polygons_from_outlines] æ¥æ›´æ–°å¤šè¾¹å½¢ã€‚" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "2D 导航地图上的一个地区。" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" +"导航地图上的地区。[Navigation2DServer] æ ¹æ®å®ƒçš„ [NavigationPolygon] èµ„æºæ¥ç¡®" +"定哪些å¯ä»¥è¿›è¡Œå¯¼èˆªã€å“ªäº›ä¸èƒ½ã€‚\n" +"默认情况下,这个节点会在默认的 [World2D] 导航地图ä¸è¿›è¡Œæ³¨å†Œã€‚如果这个节点是 " +"[Navigation2D] 节点的å项,就会在该导航节点的导航地图ä¸è¿›è¡Œæ³¨å†Œã€‚\n" +"如果两个地图共享类似的边界,就å¯ä»¥ç›¸äº’è¿žæŽ¥ã€‚ä½ å¯ä»¥é€šè¿‡ [method " +"Navigation2DServer.map_set_edge_connection_margin] 设置两个顶点连接两æ¡è¾¹ç•Œæ‰€" +"需的最å°è·ç¦»ã€‚\n" +"[b]注æ„:[/b]å°†ä¸¤ä¸ªåœ°åŒºçš„å¯¼èˆªç½‘æ ¼ç›¸äº’é‡å å¹¶ä¸è¶³ä»¥å°†å…¶ç›¸è¿žã€‚它们必须共享类似的" +"边界。\n" +"从å¦ä¸€ä¸ªåœ°åŒºè¿›å…¥è¿™ä¸ªåœ°å›¾çš„寻路消耗å¯ä»¥é€šè¿‡ [member enter_cost] 进行控制。\n" +"[b]注æ„:[/b]如果起点已ç»ä½äºŽè¿™ä¸ªåœ°åŒºä¹‹ä¸ï¼Œè¿™ä¸ªå€¼ä¸ä¼šåŠ å…¥åˆ°è·¯å¾„æ¶ˆè€—ä¹‹ä¸ã€‚\n" +"在这个地区ä¸ç§»åŠ¨æ‰€éœ€çš„å¯»è·¯æ¶ˆè€—å¯ä»¥é€šè¿‡ [member travel_cost] 系数进行控制。" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -45693,12 +46125,30 @@ msgstr "" "Navigation2DServer.map_get_closest_point_owner] 组åˆä½¿ç”¨ï¼ŒèŽ·å–åˆå¹¶åŽçš„导航图" "ä¸ä¸ŽæŸä¸ªç‚¹æœ€æŽ¥è¿‘çš„ [NavigationPolygonInstance]。" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "决定该 [NavigationPolygonInstance] å·²å¯ç”¨è¿˜æ˜¯å·²ç¦ç”¨ã€‚" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" +"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationPolygon] 所属的导航地图层。使用 [method " +"Navigation2DServer.map_get_path] 请求路径时会忽略没有任何匹é…å±‚çš„å¯¼èˆªç½‘æ ¼ï¼Œå¯¼" +"航地图åªä¼šå°†æ‹¥æœ‰åŒ¹é…å±‚çš„å¯¼èˆªç½‘æ ¼è¿›è¡Œè¿‘ä¼¼åˆå¹¶ã€‚" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "使用的 [NavigationPolygon] 资æºã€‚" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "访问底层 3D 导航的æœåŠ¡å™¨æŽ¥å£ã€‚" #: doc/classes/NavigationServer.xml -#, fuzzy msgid "" "NavigationServer is the server responsible for all 3D navigation. It handles " "several objects, namely maps, regions and agents.\n" @@ -45726,7 +46176,11 @@ msgstr "" "NavigationServer 是负责所有 3D 导航的æœåŠ¡å™¨ï¼Œå¤„ç†çš„对象有地图(map)ã€åœ°åŒº" "(region)ã€ä»£ç†ï¼ˆagent)。\n" "地图是由地区组æˆçš„,地区åˆç”±å¯¼èˆªç½‘æ ¼ç»„æˆã€‚å®ƒä»¬ä¸€åŒæž„æˆäº† 3D 世界ä¸çš„å¯å¯¼èˆªåŒº" -"域。两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点" +"域。\n" +"[b]注æ„:[/b]NavigationServer 的大多数修改都è¦åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§ä¹‹åŽç”Ÿæ•ˆï¼Œä¸æ˜¯ç«‹" +"å³ç”Ÿæ•ˆçš„。SceneTree ä¸å¯¼èˆªç›¸å…³çš„节点对地图ã€åœ°åŒºã€ä»£ç†ä½œå‡ºçš„修改也是如æ¤ï¼Œé€š" +"过脚本作出的修改亦然。\n" +"两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点" "(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [member Navigation." "edge_connection_margin],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n" "è¦ä½¿ç”¨é˜²æ’žç³»ç»Ÿï¼Œå¯ä»¥ä½¿ç”¨ä»£ç†ã€‚ä½ å¯ä»¥è®¾ç½®ä»£ç†çš„ç›®æ ‡é€Ÿåº¦ï¼ŒæœåŠ¡å™¨å°±ä¼šä½¿ç”¨ä¿®æ£åŽ" @@ -45785,6 +46239,14 @@ msgid "Bakes the navigation mesh." msgstr "çƒ˜ç„™å¯¼èˆªç½‘æ ¼ã€‚" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" +"设置该地区的导航层。å¯ä»¥åœ¨ï¼ˆä½¿ç”¨ [method NavigationServer.map_get_path])进行" +"路径请求时选择地区。" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "控制这个æœåŠ¡å™¨æ˜¯å¦æ¿€æ´»ã€‚" @@ -48165,8 +48627,18 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "旋转角度,相对于父节点。" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." -msgstr "节点的缩放。未缩放时为:[code](1, 1)[/code]。" +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." +msgstr "" +"该节点的缩放。未缩放值:[code](1, 1)[/code]。\n" +"[b]注æ„:[/b]2D ä¸ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— 法分解出负数的 X 缩放的。由于 Godot ä¸ä½¿ç”¨å˜" +"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼ŒX 轴上的负数缩放在分解åŽä¼šå˜ä¸º Y 轴的负数缩放和一次 180 度" +"的旋转。" #: doc/classes/Node2D.xml msgid "Local [Transform2D]." @@ -48354,7 +48826,6 @@ msgstr "" "[/codeblock]" #: doc/classes/NodePath.xml -#, fuzzy msgid "" "Gets the node name indicated by [code]idx[/code] (0 to [method " "get_name_count] - 1).\n" @@ -48365,7 +48836,7 @@ msgid "" "print(node_path.get_name(2)) # Sprite\n" "[/codeblock]" msgstr "" -"获å–ç”± [code]idx[/code](0 到 [method get_name_count])指示的节点å称。\n" +"获å–ç”± [code]idx[/code](0 到 [method get_name_count] - 1)指示的节点å称。\n" "[codeblock]\n" "var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n" "print(node_path.get_name(0)) # Path2D\n" @@ -51028,11 +51499,25 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" -"将文件或目录移动到系统的回收站。å¦è¯·å‚阅 [method Directory.remove]。\n" -"[b]注æ„:[/b]如果用户ç¦ç”¨äº†ç³»ç»Ÿçš„å›žæ”¶ç«™ï¼Œé‚£ä¹ˆè¿™ä¸ªæ–‡ä»¶å°±ä¼šè¢«æ°¸ä¹…åˆ é™¤ã€‚" +"将文件或目录移动到系统的回收站。å¦è¯·å‚阅 [method Directory.remove].\n" +"该方法仅支æŒå…¨å±€è·¯å¾„ï¼Œæ‰€ä»¥ä½ å¯èƒ½éœ€è¦ä½¿ç”¨ [method ProjectSettings." +"globalize_path]。请勿将其用于 [code]res://[/code] ä¸çš„æ–‡ä»¶ï¼Œå› 为在导出åŽçš„项" +"ç›®ä¸æ˜¯æ— 法æ£å¸¸å·¥ä½œçš„。\n" +"[b]注æ„:[/b]如果用户在系统ä¸ç¦ç”¨äº†å›žæ”¶ç«™ï¼Œé‚£ä¹ˆè¯¥æ–‡ä»¶ä¼šè¢«æ°¸ä¹…åˆ é™¤ã€‚\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" #: doc/classes/OS.xml msgid "" @@ -51149,11 +51634,12 @@ msgid "" "[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment " "variable names are case-sensitive on all platforms except Windows." msgstr "" -"将环境å˜é‡[code]variable[/code]的值设置为[code]value[/code]。在è¿è¡Œ[method " -"set_environment]åŽï¼ŒçŽ¯å¢ƒå˜é‡å°†è¢«è®¾ç½®ä¸ºGodot进程和任何用[method execute]执行的" -"进程。环境å˜é‡å°†[i]ä¸[/i]æŒç»å˜åœ¨äºŽGodot进程终æ¢åŽè¿è¡Œçš„进程ä¸ã€‚\n" -"[b]注æ„:[/b]仔细检查[code]variable[/code]的大å°å†™ã€‚除Windows外,环境å˜é‡åç§°" -"在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。" +"将环境å˜é‡ [code]variable[/code] 的值设置为 [code]value[/code]。在è¿è¡Œ " +"[method set_environment] åŽï¼ŒçŽ¯å¢ƒå˜é‡å°†è¢«è®¾ç½®ä¸º Godot 进程和任何用 [method " +"execute] 执行的进程。环境å˜é‡[i]ä¸ä¼š[/i]æŒç»å˜åœ¨äºŽ Godot 进程终æ¢åŽè¿è¡Œçš„进程" +"ä¸ã€‚\n" +"[b]注æ„:[/b]仔细检查 [code]variable[/code] 的大å°å†™ã€‚除 Windows 外,环境å˜é‡" +"å称在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。" #: doc/classes/OS.xml msgid "" @@ -51271,7 +51757,6 @@ msgstr "" "[b]注æ„:[/b]该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。" #: doc/classes/OS.xml -#, fuzzy msgid "" "Requests the OS to open a resource with the most appropriate program. For " "example:\n" @@ -51296,8 +51781,8 @@ msgstr "" "器打开 Godot 官方网站。\n" "- [code]OS.shell_open(\"mailto:example@example.com\")[/code] 会打开默认电åé‚®" "件客户端并将“收件人â€å—段设置为 [code]example@example.com[/code]。其他支æŒè‡ªå®š" -"ä¹‰çš„å—æ®µè§ [url=https://blog.escapecreative.com/customizing-mailto-links/]自" -"定义 [code]mailto:[/code] 链接[/url] 。\n" +"ä¹‰çš„å—æ®µè§ [url=https://datatracker.ietf.org/doc/html/rfc2368]RFC 2368 - " +"[code]mailto[/code] URL 方案[/url]。\n" "å¯ä»¥ä½¿ç”¨ [method ProjectSettings.globalize_path] å°† [code]res://[/code] å’Œ " "[code]user://[/code] 路径转æ¢ä¸ºæœ¬æ–¹æ³•所使用的系统路径。\n" "[b]注æ„:[/b]本方法在 Androidã€iOSã€HTML5ã€Linuxã€macOSã€ä»¥åŠ Windows 上实" @@ -56187,7 +56672,6 @@ msgid "A pooled array of bytes." msgstr "å—èŠ‚æ± æ•°ç»„ã€‚" #: doc/classes/PoolByteArray.xml -#, fuzzy msgid "" "An array specifically designed to hold bytes. Optimized for memory usage, " "does not fragment the memory.\n" @@ -56217,7 +56701,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolByteArray()]\n" "array[0].push_back(123)\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolByteArray)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolByteArray)\n" "[/codeblock]\n" "整个 [PoolByteArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘" "生å˜åŒ–:\n" @@ -56396,7 +56880,6 @@ msgid "A pooled array of [Color]s." msgstr "[Color] æ± æ•°ç»„ã€‚" #: doc/classes/PoolColorArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [Color]. Optimized for memory usage, " "does not fragment the memory.\n" @@ -56427,7 +56910,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolColorArray()]\n" "array[0].push_back(Color(0.1, 0.2, 0.3, 0.4))\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolColorArray)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolColorArray)\n" "[/codeblock]\n" "整个 [PoolColorArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘" "生å˜åŒ–:\n" @@ -56474,7 +56957,6 @@ msgid "A pooled array of integers ([int])." msgstr "整数([int]ï¼‰æ± æ•°ç»„ã€‚" #: doc/classes/PoolIntArray.xml -#, fuzzy msgid "" "An array specifically designed to hold integer values ([int]). Optimized for " "memory usage, does not fragment the memory.\n" @@ -56510,7 +56992,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolIntArray()]\n" "array[0].push_back(1234)\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolIntArray)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolIntArray)\n" "[/codeblock]\n" "整个 [PoolIntArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘生" "å˜åŒ–:\n" @@ -56553,7 +57035,6 @@ msgid "A pooled array of real numbers ([float])." msgstr "实数([float]ï¼‰æ± æ•°ç»„ã€‚" #: doc/classes/PoolRealArray.xml -#, fuzzy msgid "" "An array specifically designed to hold floating-point values. Optimized for " "memory usage, does not fragment the memory.\n" @@ -56590,7 +57071,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolIntArray()]\n" "array[0].push_back(12.34)\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolRealArray)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolRealArray)\n" "[/codeblock]\n" "整个 [PoolRealArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘" "生å˜åŒ–:\n" @@ -56626,7 +57107,6 @@ msgid "A pooled array of [String]s." msgstr "[String] æ± æ•°ç»„ã€‚" #: doc/classes/PoolStringArray.xml -#, fuzzy msgid "" "An array specifically designed to hold [String]s. Optimized for memory " "usage, does not fragment the memory.\n" @@ -56656,7 +57136,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolStringArray()]\n" "array[0].push_back(\"hello\")\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolStringArray)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolStringArray)\n" "[/codeblock]\n" "整个 [PoolStringArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š" "å‘生å˜åŒ–:\n" @@ -56699,7 +57179,6 @@ msgid "A pooled array of [Vector2]s." msgstr "[Vector2] æ± æ•°ç»„ã€‚" #: doc/classes/PoolVector2Array.xml -#, fuzzy msgid "" "An array specifically designed to hold [Vector2]. Optimized for memory " "usage, does not fragment the memory.\n" @@ -56730,7 +57209,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolVector2Array()]\n" "array[0].push_back(Vector2(12, 34))\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolVector2Array)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolVector2Array)\n" "[/codeblock]\n" "整个 [PoolVector2Array] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š" "å‘生å˜åŒ–:\n" @@ -56772,7 +57251,6 @@ msgid "A pooled array of [Vector3]." msgstr "[Vector3] æ± æ•°ç»„ã€‚" #: doc/classes/PoolVector3Array.xml -#, fuzzy msgid "" "An array specifically designed to hold [Vector3]. Optimized for memory " "usage, does not fragment the memory.\n" @@ -56803,7 +57281,7 @@ msgstr "" "[codeblock]\n" "var array = [PoolVector3Array()]\n" "array[0].push_back(Vector3(12, 34, 56))\n" -"print(array) # [[]](空 Array ä¸åŒ…å«äº†ç©ºçš„ PoolVector3Array)\n" +"print(array) # [[]](Array ä¸åŒ…å«äº†ç©ºçš„ PoolVector3Array)\n" "[/codeblock]\n" "整个 [PoolVector3Array] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š" "å‘生å˜åŒ–:\n" @@ -58333,8 +58811,8 @@ msgid "" "[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/" "code] will still be read to override the project settings." msgstr "" -"指定一个文件æ¥è¦†ç›–项目设置。比如说。[code]user://custom_settings.cfg[/code]。" -"å‚è§ [ProjectSettings] 顶部类æè¿°ä¸çš„“Overridingâ€ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n" +"指定一个文件æ¥è¦†ç›–项目设置。例如:[code]user://custom_settings.cfg[/code]。å‚" +"è§ [ProjectSettings] 顶部类æè¿°ä¸çš„“Overridingâ€ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n" "[b]注æ„:[/b]ä¸ç®¡è¿™ä¸ªè®¾ç½®çš„值如何,[code]res://override.cfg[/code] ä»ç„¶ä¼šè¢«è¯»" "å–æ¥è¦†ç›–项目设置。" @@ -58380,8 +58858,8 @@ msgid "" "Icon set in [code].ico[/code] format used on Windows to set the game's icon. " "This is done automatically on start by calling [method OS.set_native_icon]." msgstr "" -"以[code].ico[/code]æ ¼å¼è®¾ç½®çš„å›¾æ ‡ï¼Œåœ¨Windows上用于设置游æˆçš„å›¾æ ‡ã€‚è¿™åœ¨å¯åŠ¨æ—¶" -"通过调用[method OS.set_native_icon]自动完æˆã€‚" +"以 [code].ico[/code] æ ¼å¼è®¾ç½®çš„å›¾æ ‡ï¼Œåœ¨ Windows 上用于设置游æˆçš„å›¾æ ‡ã€‚è¿™åœ¨å¯" +"动时通过调用 [method OS.set_native_icon] 自动完æˆã€‚" #: doc/classes/ProjectSettings.xml msgid "" @@ -58876,8 +59354,21 @@ msgstr "" "用è¦å‘Šã€‚" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." -msgstr "å½“å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨å›žæº¯ä¹‹å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚" +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" +"å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨è°ƒç”¨ç«™å›žæº¯å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚默认情况下,这个消æ¯åªä¼šåœ¨å¯¼å‡ºåŽçš„项目" +"ä¸ä½¿ç”¨ï¼Œå› 为编辑器会对这个设置进行覆盖。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." +msgstr "" +"仅用于编辑器的 [member debug/settings/crash_handler/message] 覆盖项。ä¸ä¼šå½±å“" +"用调试或å‘布模å¼å¯¼å‡ºçš„项目。" #: doc/classes/ProjectSettings.xml msgid "" @@ -59190,6 +59681,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -59485,6 +59988,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "触摸事件的默认延迟(å•ä½ä¸ºç§’ï¼‰ã€‚ä»…å½±å“ iOS 设备。" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "2D 导航层 1 çš„å¯é€‰å称。留空则会显示为“层 1â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "2D 导航层 10 çš„å¯é€‰å称。留空则会显示为“层 10â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "2D 导航层 11 çš„å¯é€‰å称。留空则会显示为“层 11â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "2D 导航层 12 çš„å¯é€‰å称。留空则会显示为“层 12â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "2D 导航层 13 çš„å¯é€‰å称。留空则会显示为“层 13â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "2D 导航层 14 çš„å¯é€‰å称。留空则会显示为“层 14â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "2D 导航层 15 çš„å¯é€‰å称。留空则会显示为“层 15â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "2D 导航层 16 çš„å¯é€‰å称。留空则会显示为“层 16â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "2D 导航层 17 çš„å¯é€‰å称。留空则会显示为“层 17â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "2D 导航层 18 çš„å¯é€‰å称。留空则会显示为“层 18â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "2D 导航层 19 çš„å¯é€‰å称。留空则会显示为“层 19â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "2D 导航层 2 çš„å¯é€‰å称。留空则会显示为“层 2â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "2D 导航层 20 çš„å¯é€‰å称。留空则会显示为“层 20â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "2D 导航层 21 çš„å¯é€‰å称。留空则会显示为“层 21â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "2D 导航层 22 çš„å¯é€‰å称。留空则会显示为“层 22â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "2D 导航层 23 çš„å¯é€‰å称。留空则会显示为“层 23â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "2D 导航层 24 çš„å¯é€‰å称。留空则会显示为“层 24â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "2D 导航层 25 çš„å¯é€‰å称。留空则会显示为“层 25â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "2D 导航层 26 çš„å¯é€‰å称。留空则会显示为“层 26â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "2D 导航层 27 çš„å¯é€‰å称。留空则会显示为“层 27â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "2D 导航层 28 çš„å¯é€‰å称。留空则会显示为“层 28â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "2D 导航层 29 çš„å¯é€‰å称。留空则会显示为“层 29â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "2D 导航层 3 çš„å¯é€‰å称。留空则会显示为“层 3â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "2D 导航层 30 çš„å¯é€‰å称。留空则会显示为“层 30â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "2D 导航层 31 çš„å¯é€‰å称。留空则会显示为“层 31â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "2D 导航层 32 çš„å¯é€‰å称。留空则会显示为“层 32â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "2D 导航层 4 çš„å¯é€‰å称。留空则会显示为“层 4â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "2D 导航层 5 çš„å¯é€‰å称。留空则会显示为“层 5â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "2D 导航层 6 çš„å¯é€‰å称。留空则会显示为“层 6â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "2D 导航层 7 çš„å¯é€‰å称。留空则会显示为“层 7â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "2D 导航层 8 çš„å¯é€‰å称。留空则会显示为“层 8â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "2D 导航层 9 çš„å¯é€‰å称。留空则会显示为“层 9â€ã€‚" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "2D 物ç†å±‚ 1 çš„å¯é€‰å称。" @@ -59693,6 +60388,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "2D 渲染层 9 çš„å¯é€‰å称。" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "3D 导航层 1 çš„å¯é€‰å称。留空则会显示为“层 1â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "3D 导航层 10 çš„å¯é€‰å称。留空则会显示为“层 10â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "3D 导航层 11 çš„å¯é€‰å称。留空则会显示为“层 11â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "3D 导航层 12 çš„å¯é€‰å称。留空则会显示为“层 12â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "3D 导航层 13 çš„å¯é€‰å称。留空则会显示为“层 13â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "3D 导航层 14 çš„å¯é€‰å称。留空则会显示为“层 14â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "3D 导航层 15 çš„å¯é€‰å称。留空则会显示为“层 15â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "3D 导航层 16 çš„å¯é€‰å称。留空则会显示为“层 16â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "3D 导航层 17 çš„å¯é€‰å称。留空则会显示为“层 17â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "3D 导航层 18 çš„å¯é€‰å称。留空则会显示为“层 18â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "3D 导航层 19 çš„å¯é€‰å称。留空则会显示为“层 19â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "3D 导航层 2 çš„å¯é€‰å称。留空则会显示为“层 2â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "3D 导航层 20 çš„å¯é€‰å称。留空则会显示为“层 20â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "3D 导航层 21 çš„å¯é€‰å称。留空则会显示为“层 21â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "3D 导航层 22 çš„å¯é€‰å称。留空则会显示为“层 22â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "3D 导航层 23 çš„å¯é€‰å称。留空则会显示为“层 23â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "3D 导航层 24 çš„å¯é€‰å称。留空则会显示为“层 24â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "3D 导航层 25 çš„å¯é€‰å称。留空则会显示为“层 25â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "3D 导航层 26 çš„å¯é€‰å称。留空则会显示为“层 26â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "3D 导航层 27 çš„å¯é€‰å称。留空则会显示为“层 27â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "3D 导航层 28 çš„å¯é€‰å称。留空则会显示为“层 28â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "3D 导航层 29 çš„å¯é€‰å称。留空则会显示为“层 29â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "3D 导航层 3 çš„å¯é€‰å称。留空则会显示为“层 3â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "3D 导航层 30 çš„å¯é€‰å称。留空则会显示为“层 30â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "3D 导航层 31 çš„å¯é€‰å称。留空则会显示为“层 31â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "3D 导航层 32 çš„å¯é€‰å称。留空则会显示为“层 32â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "3D 导航层 4 çš„å¯é€‰å称。留空则会显示为“层 4â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "3D 导航层 5 çš„å¯é€‰å称。留空则会显示为“层 5â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "3D 导航层 6 çš„å¯é€‰å称。留空则会显示为“层 6â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "3D 导航层 7 çš„å¯é€‰å称。留空则会显示为“层 7â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "3D 导航层 8 çš„å¯é€‰å称。留空则会显示为“层 8â€ã€‚" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "3D 导航层 9 çš„å¯é€‰å称。留空则会显示为“层 9â€ã€‚" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "3D 物ç†å±‚ 1 çš„å¯é€‰å称。" @@ -59974,6 +60861,61 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" +"2D 导航地图的默认å•å…ƒæ ¼é«˜åº¦ã€‚è§ [method Navigation2DServer." +"map_set_cell_height]。\n" +"[b]注æ„:[/b]尚未实现。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" +"2D 导航地图的默认å•å…ƒæ ¼å¤§å°ã€‚è§ [method Navigation2DServer." +"map_set_cell_size]。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" +"2D 导航地图的默认边界连接边è·ã€‚è§ [method Navigation2DServer." +"map_set_edge_connection_margin]。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" +"3D 导航地图的默认å•å…ƒæ ¼é«˜åº¦ã€‚è§ [method NavigationServer." +"map_set_cell_height]。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" +"3D 导航地图的默认å•å…ƒæ ¼å¤§å°ã€‚è§ [method NavigationServer.map_set_cell_size]。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" +"3D 导航地图的默认边界连接边è·ã€‚è§ [method NavigationServer." +"map_set_edge_connection_margin]。" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "3D 导航地图的默认地图上å‘é‡ã€‚è§ [method NavigationServer.map_set_up]。" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -61791,8 +62733,8 @@ msgid "" msgstr "" "如果为 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ BPTC 算法导入 VRAM 压缩的纹ç†ã€‚æ¤" "纹ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨æ¡Œé¢å¹³å°å¾—到支æŒï¼Œå¹¶ä¸”仅在使用 GLES3 渲染器时æ‰å—支æŒã€‚\n" -"[b]注æ„:[/b]更改æ¤è®¾ç½®ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于" -"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件" +"[b]注æ„:[/b]更改æ¤è®¾ç½®[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ¤è®¾ç½®åº”用于已" +"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–è¾‘å™¨ï¼Œåˆ é™¤ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件" "夹,然åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼ˆå‚阅 [member application/config/" "use_hidden_project_data_directory])。" @@ -62022,7 +62964,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -62072,7 +63013,6 @@ msgstr "" "- å¦‚æžœä½ çš„ [member grid_radius] 比 [code]Vector3(1, 1, 1)[/code] å°ï¼Œå°±ä¼šè¢«èˆ" "入到 [code]Vector3(1, 1, 1)[/code]ã€‚å› æ¤ï¼Œè¾ƒå°çš„ç½‘æ ¼åŠå¾„å¯èƒ½ä¼šå¯¼è‡´æ„外的分" "组。\n" -"[/codeblock]\n" "[b]注æ„:[/b]Godot 4.0 会移除 [ProximityGroup],使用更高效ã€å¿«é€Ÿçš„ " "[VisibilityNotifier] 功能。对于大多数情况,[method Vector3.distance_to] å’Œ " "[method Vector3.distance_squared_to] 都足够快了,尤其是在使用 [Timer] 节点å‡" @@ -62479,17 +63419,17 @@ msgid "" msgstr "" "æ ¹æ®ç»™å®šçš„ç§å值åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆå™¨çжæ€ã€‚给定的ç§åå°†æä¾›å¯é‡å¤çš„ä¼ªéšæœºæ•°åº" "列。\n" -"[b]注:[/b] RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å。如果ç§åæ¥" +"[b]注æ„:[/b]RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å。如果ç§åæ¥" "è‡ªå¤–éƒ¨ï¼Œè¯·è€ƒè™‘ä½¿ç”¨å“ˆå¸Œå‡½æ•°æ¥æé«˜ç§åè´¨é‡ã€‚\n" -"[b]注:[/b]设置这个属性会产生改å˜å†…部[member state]的副作用,所以一定è¦åœ¨ä¿®æ”¹" -"[member state][i]之å‰[/i]åˆå§‹åŒ–ç§å:\n" +"[b]注æ„:[/b]设置这个属性会产生改å˜å†…部 [member state] 的副作用,所以一定è¦åœ¨" +"修改 [member state] [i]之å‰[/i]åˆå§‹åŒ–ç§å:\n" "[codeblock]\n" "var rng = RandomNumberGenerator.new()\n" "rng.seed = hash(\"Godot\")\n" -"rng.state = 100 # Restore to some previously saved state.\n" +"rng.state = 100 # æ¢å¤ä¹‹å‰ä¿å˜çš„æŸä¸ªçŠ¶æ€ã€‚\n" "[/codeblock]\n" -"[b]è¦å‘Šï¼š[/b]该属性的getter返回之å‰çš„[member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å值,这将在" -"Godot 4.0ä¸ä¿®å¤ã€‚" +"[b]è¦å‘Šï¼š[/b]该属性的 getter 返回之å‰çš„ [member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å值,这" +"将在 Godot 4.0 ä¸ä¿®å¤ã€‚" #: doc/classes/RandomNumberGenerator.xml msgid "" @@ -62527,15 +63467,16 @@ msgid "Abstract base class for range-based controls." msgstr "基于范围的控件的抽象基类。" #: doc/classes/Range.xml -#, fuzzy msgid "" "Range is a base class for [Control] nodes that change a floating-point " "[member value] between a [member min_value] and [member max_value], using a " "configured [member step] and [member page] size. See e.g. [ScrollBar] and " "[Slider] for examples of higher level nodes using Range." msgstr "" -"Range是一个用于[Control]节点的基类,它在[i]最å°å€¼[/i]å’Œ[i]最大值[/i]之间改å˜" -"一个浮点[i]值[/i],用于[i]æ¥è¿›[/i]å’Œ[i]页é¢[/i],例如[ScrollBar]。" +"Range 是一些 [Control] 节点的基类,这些节点能够将浮点值 [member value] 在最å°" +"值 [member min_value] 和最大值 [member max_value] 之间进行调整,并且能够对æ¥" +"é•¿ [member step] å’Œåˆ†é¡µå¤§å° [member page] 进行设置。使用 Range 的更高级节点示" +"例请å‚考 [ScrollBar] å’Œ [Slider]。" #: doc/classes/Range.xml msgid "" @@ -64841,6 +65782,22 @@ msgid "Makes text fill width." msgstr "使文本填充宽度。" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "将内è”图åƒçš„顶部与文本的顶部对é½ã€‚" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "将内è”图åƒçš„ä¸å¿ƒä¸Žæ–‡æœ¬çš„ä¸å¿ƒå¯¹é½ã€‚" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "将内è”图åƒçš„底部与文本的基线对é½ã€‚" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "将内è”图åƒçš„底部与文本的底部对é½ã€‚" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "æ¯ä¸ªåˆ—è¡¨é¡¹éƒ½æœ‰ä¸€ä¸ªæ•°å—æ ‡è®°ã€‚" @@ -65084,15 +66041,14 @@ msgid "Locks the specified linear or rotational axis." msgstr "é”定指定的线性或旋转轴。" #: doc/classes/RigidBody.xml -#, fuzzy msgid "" "Damps the body's rotational forces. If this value is different from -1.0 it " "will be added to any angular damp derived from the world or areas.\n" "See [member ProjectSettings.physics/3d/default_angular_damp] for more " "details about damping." msgstr "" -"对 RigidBody 的旋转力进行阻尼è¿ç®—。如果这个值与 -1.0 ä¸åŒï¼Œå°†ä¼šè¿½åŠ åˆ°ä»»ä½•ä»Žä¸–" -"界或区域派生的线性阻尼ä¸ã€‚\n" +"对该实体的旋转力进行阻尼è¿ç®—。如果这个值与 -1.0 ä¸åŒï¼Œå°†ä¼šè¿½åŠ åˆ°ä»»ä½•ä»Žä¸–ç•Œæˆ–" +"区域派生的角度阻尼ä¸ã€‚\n" "关于阻尼的更多细节,请å‚阅 [member ProjectSettings.physics/3d/" "default_angular_damp]。" @@ -67132,7 +68088,6 @@ msgid "One-shot timer." msgstr "一次性定时器。" #: doc/classes/SceneTreeTimer.xml -#, fuzzy msgid "" "A one-shot timer managed by the scene tree, which emits [signal timeout] on " "completion. See also [method SceneTree.create_timer].\n" @@ -67144,8 +68099,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" "ç”±åœºæ™¯æ ‘ç®¡ç†çš„ä¸€æ¬¡æ€§å®šæ—¶å™¨ï¼Œå®ƒåœ¨å®Œæˆæ—¶å‘[signal timeout] ä¿¡å·ã€‚请å‚阅 " "[method SceneTree.create_timer]。\n" @@ -67157,7 +68112,8 @@ msgstr "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"计时器结æŸã€‚\")\n" "[/codeblock]\n" -"时间结æŸåŽï¼Œè¯¥è®¡æ—¶å™¨å°†è¢«è‡ªåŠ¨é‡Šæ”¾ã€‚" +"时间结æŸåŽï¼Œå¯¹è¯¥è®¡æ—¶å™¨çš„引用将被自动释放。è¦ä¿ç•™è¯¥è®¡æ—¶å™¨ï¼Œä½ å¯ä»¥ä¿æŒå¯¹å®ƒçš„引" +"ç”¨ã€‚è§ [Reference]。" #: doc/classes/SceneTreeTimer.xml msgid "The time remaining (in seconds)." @@ -69400,8 +70356,16 @@ msgid "" msgstr "æ—‹è½¬éƒ¨åˆ†å±€éƒ¨å˜æ¢ä¸ºåº¦ï¼ŒæŒ‰YXZ-Eulerè§’æ ¼å¼æŒ‡å®š(Xè§’ã€Yè§’ã€Zè§’)。" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." -msgstr "å±€éƒ¨å˜æ¢çš„缩放部分。" +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." +msgstr "" +"æœ¬åœ°å˜æ¢ä¸çš„缩放。\n" +"[b]注æ„:[/b]3D ä¸ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— 法分解出æ£è´Ÿæ··åˆçš„缩放的。由于 Godot ä¸ä½¿ç”¨å˜" +"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼Œå¾—到的缩放值è¦ä¹ˆå…¨æ£ã€è¦ä¹ˆå…¨è´Ÿã€‚" #: doc/classes/Spatial.xml msgid "Local space [Transform] of this node, with respect to the parent node." @@ -76903,6 +77867,10 @@ msgstr "" "[/codeblock]" #: doc/classes/TileMap.xml +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "如果为 [code]true[/code],这个 TileMap 会烘焙导航地区。" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "如果[code]true[/code],å•å…ƒæ ¼çš„UV将被剪è£ã€‚" @@ -77035,6 +78003,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "图å—åœ°å›¾çš„æ–¹å‘æ¨¡å¼ã€‚有关å¯èƒ½çš„值,å‚阅[enum Mode]。" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "TileMap 生æˆå…¶å¯¼èˆªåœ°åŒºçš„导航层。" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -78387,10 +79359,17 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." -msgstr "" -"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法将其用给定的缩放系数 [code]scale[/code] 进行缩" -"放。" +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." +msgstr "" +"è¿”å›žè¯¥å˜æ¢åœ¨ä½¿ç”¨ç»™å®šçš„ [code]scale[/code] 缩放系统进行矩阵乘法åŽçš„副本。\n" +"[b]注æ„:[/b]2D ä¸ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— 法分解出负数的 X 缩放的。由于 Godot ä¸ä½¿ç”¨å˜" +"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼ŒX 轴上的负数缩放在分解åŽä¼šå˜ä¸º Y 轴的负数缩放和一次 180 度" +"的旋转。" #: doc/classes/Transform2D.xml msgid "" @@ -82424,13 +83403,12 @@ msgstr "" "是针对éžå¸¸é«˜ç«¯çš„系统,å¦åˆ™æ•°å€¼ä¸º4是最好的。" #: doc/classes/Viewport.xml -#, fuzzy msgid "" "If [code]true[/code], the viewport will use a unique copy of the [World] " "defined in [member world]." msgstr "" -"如果为 [code]true[/code],该视窗将使用 [code]world[/code] 属性ä¸å®šä¹‰çš„ " -"[World]。" +"如果为 [code]true[/code],该视窗将使用 [member world] ä¸å®šä¹‰çš„ [World] 的唯一" +"副本。" #: doc/classes/Viewport.xml msgid "" @@ -82927,23 +83905,26 @@ msgstr "如果[code]true[/code],父级的[method Node._process]å°†è¢«åœæ¢ã€‚ #: doc/classes/VisibilityEnabler2D.xml msgid "This enabler will freeze [RigidBody2D] nodes." -msgstr "这个å¯ç”¨ç¨‹åºå°†å†»ç»“[RigidBody2D]节点。" +msgstr "这个å¯ç”¨ç¨‹åºå°†å†»ç»“ [RigidBody2D] 节点。" #: doc/classes/VisibilityEnabler2D.xml msgid "This enabler will stop [Particles2D] nodes." -msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢[Particles2D]节点。" +msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢ [Particles2D] 节点。" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." -msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢çˆ¶ç±»çš„_process函数。" +#, fuzzy +msgid "This enabler will stop the parent's [method Node._process] function." +msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢çˆ¶ç±»çš„ _process 函数。" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." -msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢çˆ¶ç±»çš„_physics_process函数。" +#, fuzzy +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." +msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢çˆ¶ç±»çš„ _physics_process 函数。" #: doc/classes/VisibilityEnabler2D.xml msgid "This enabler will stop [AnimatedSprite] nodes animations." -msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢[AnimatedSprite]节点的动画。" +msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ¢ [AnimatedSprite] 节点的动画。" #: doc/classes/VisibilityNotifier.xml doc/classes/VisibilityNotifier2D.xml msgid "Detects approximately when the node is visible on screen." @@ -82988,6 +83969,20 @@ msgid "The VisibilityNotifier's bounding box." msgstr "VisibilityNotifier的边界框。" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" +"除了检查节点是å¦åœ¨å±å¹•内或在 [Camera] 的视野内,VisibilityNotifier 还å¯ä»¥åœ¨ä½¿" +"用é€è§†æŠ•影的 [Camera] 时对节点是å¦åœ¨æŒ‡å®šçš„æœ€å¤§è·ç¦»å†…进行检测。å¯ç”¨äºŽé™åˆ¶è¿œè·" +"离节点的性能需求。\n" +"[b]注æ„:[/b]如果设为 0.0 则会ç¦ç”¨è¿™ä¸ªç‰¹æ€§ã€‚" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "当VisibilityNotifier进入[Camera]的视图时触å‘。" @@ -87506,7 +88501,6 @@ msgid "Sets a viewport's canvas." msgstr "设置视窗的画布。" #: doc/classes/VisualServer.xml -#, fuzzy msgid "" "Copies viewport to a region of the screen specified by [code]rect[/code]. If " "[member Viewport.render_direct_to_screen] is [code]true[/code], then " @@ -87527,10 +88521,10 @@ msgid "" "manually. For further optimization, see [method " "viewport_set_render_direct_to_screen]." msgstr "" -"将视窗å¤åˆ¶åˆ°å±å¹•上由[code]rect[/code]指定的区域。如果[member Viewport." -"render_direct_to_screen]是[code]true[/code],那么视窗就ä¸ä¼šä½¿ç”¨å¸§ç¼“冲器,视窗" +"将视窗å¤åˆ¶åˆ°å±å¹•上由 [code]rect[/code] 指定的区域。如果 [member Viewport." +"render_direct_to_screen] 为 [code]true[/code],那么视窗就ä¸ä¼šä½¿ç”¨å¸§ç¼“冲,视窗" "的内容会直接渲染到å±å¹•上。然而,请注æ„ï¼Œæ ¹è§†çª—æ˜¯æœ€åŽç»˜åˆ¶çš„ï¼Œå› æ¤å®ƒå°†åœ¨å±å¹•上" -"ç»˜åˆ¶ã€‚å› æ¤ï¼Œä½ å¿…é¡»å°†æ ¹è§†çª—è®¾ç½®ä¸ºä¸€ä¸ªä¸è¦†ç›–ä½ æ‰€é™„åŠ çš„è¿™ä¸ªè§†çª—çš„åŒºåŸŸã€‚\n" +"ç»˜åˆ¶ã€‚ç›¸åº”åœ°ï¼Œä½ å°±å¿…é¡»å°†æ ¹è§†çª—è®¾ç½®ä¸ºä¸€ä¸ªä¸è¦†ç›–ä½ æ‰€é™„åŠ çš„è¿™ä¸ªè§†çª—çš„åŒºåŸŸã€‚\n" "ä¾‹å¦‚ï¼Œä½ å¯ä»¥ç”¨ä»¥ä¸‹ä»£ç å°†æ ¹è§†çª—è®¾ç½®ä¸ºå®Œå…¨ä¸æ¸²æŸ“。\n" "[codeblock]\n" "func _ready():\n" @@ -87538,7 +88532,7 @@ msgstr "" " $Viewport.set_attach_to_screen_rect(Rect2(0, 0, 600, 600))\n" "[/codeblock]\n" "使用这个方法å¯ä»¥å¸¦æ¥æ˜Žæ˜¾çš„优化,特别是在低端设备上。然而,它的代价是必须手动" -"管ç†ä½ 的视窗。对于进一æ¥çš„优化,请看,[method " +"管ç†ä½ 的视窗。进一æ¥çš„优化请å‚阅 [method " "viewport_set_render_direct_to_screen]。" #: doc/classes/VisualServer.xml @@ -88455,6 +89449,21 @@ msgid "The amount of shader rebinds in the frame." msgstr "帧ä¸é‡æ–°ç»‘定的ç€è‰²å™¨æ•°é‡ã€‚" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" +"在该帧ä¸ï¼Œå¤„于编译状æ€çš„ç€è‰²å™¨æ•°é‡å³°å€¼ã€‚\n" +"å¯ç”¨äºŽæ£€æŸ¥å±å¹•上当å‰ç€è‰²å™¨çš„异æ¥ç¼–译是å¦å®Œæˆã€‚\n" +"[b]注æ„:[/b]è¦çœŸæ£ç¡®å®šå®Œæˆï¼Œè¯·åœ¨è¿™ä¸ªå€¼è‡³å°‘连ç»ä¸¤å¸§éƒ½ä¸ºé›¶æ—¶æ‰è®¤ä¸ºæ²¡æœ‰å…¶ä»–东西" +"需è¦ç¼–译。\n" +"GLES2 渲染åŽç«¯ä¸å°šæœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "帧ä¸çš„è¡¨é¢æ›´æ”¹é‡ã€‚" @@ -91716,8 +92725,9 @@ msgid "" "can set this to a valid [X509Certificate] to be provided as additional CA " "chain information during the SSL handshake." msgstr "" -"当使用SSLæ—¶ï¼Œä½ å¯ä»¥å°†å…¶è®¾ç½®ä¸ºä¸€ä¸ªæœ‰æ•ˆçš„[X509Certificate],作为SSLæ¡æ‰‹è¿‡ç¨‹ä¸é¢" -"外的CAé“¾ä¿¡æ¯æä¾›ã€‚å‚阅[member private_key]å’Œ[member ssl_certificate]。" +"当使用 SSL æ—¶ï¼Œä½ å¯ä»¥å°†å…¶è®¾ç½®ä¸ºä¸€ä¸ªæœ‰æ•ˆçš„ [X509Certificate],作为 SSL æ¡æ‰‹è¿‡" +"程ä¸é¢å¤–çš„ CA é“¾ä¿¡æ¯æä¾›ã€‚è¯·å‚阅 [member private_key] å’Œ [member " +"ssl_certificate]。" #: modules/websocket/doc_classes/WebSocketServer.xml msgid "" @@ -91752,23 +92762,23 @@ msgid "" "to achieve the clean close. See [method WebSocketPeer.close] for more " "details." msgstr "" -"å½“ä¸€ä¸ªå®¢æˆ·ç«¯è¦æ±‚å½»åº•å…³é—æ—¶è§¦å‘ã€‚ä½ åº”è¯¥ç»§ç»è½®è¯¢ï¼Œç›´åˆ°ä½ 得到一个具有相åŒ" -"[code]id[/code]çš„[signal client_disconnected]ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•å…³é—。请å‚阅" -"[method WebSocketPeer.close]以了解更多细节。" +"å½“ä¸€ä¸ªå®¢æˆ·ç«¯è¦æ±‚å½»åº•å…³é—æ—¶è§¦å‘ã€‚ä½ åº”è¯¥ç»§ç»è½®è¯¢ï¼Œç›´åˆ°ä½ å¾—åˆ°ä¸€ä¸ªå…·æœ‰ç›¸åŒ " +"[code]id[/code] çš„ [signal client_disconnected] ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•å…³é—。更多细" +"节请å‚阅 [method WebSocketPeer.close]。" #: modules/websocket/doc_classes/WebSocketServer.xml msgid "" "Emitted when a new client connects. \"protocol\" will be the sub-protocol " "agreed with the client." -msgstr "当新的客户端连接时触å‘。\"åè®®\" 将是与客户端达æˆçš„åå议。" +msgstr "当新的客户端连接时触å‘。“protocolâ€å°†æ˜¯ä¸Žå®¢æˆ·ç«¯è¾¾æˆçš„åå议。" #: modules/websocket/doc_classes/WebSocketServer.xml msgid "" "Emitted when a client disconnects. [code]was_clean_close[/code] will be " "[code]true[/code] if the connection was shutdown cleanly." msgstr "" -"当客户端æ–开连接时触å‘。如果连接被彻底关é—[code]was_clean_close[/code] 将是" -"[code]true[/code] 。" +"当客户端æ–开连接时触å‘。如果连接被彻底关é—,[code]was_clean_close[/code] å°†" +"是 [code]true[/code] 。" #: modules/websocket/doc_classes/WebSocketServer.xml msgid "" @@ -91777,7 +92787,7 @@ msgid "" "multiplayer peer." msgstr "" "å½“æ”¶åˆ°ä¸€ä¸ªæ–°æ¶ˆæ¯æ—¶è§¦å‘。\n" -"[b]注æ„:[/b]这个信å·åœ¨ç”¨ä½œé«˜çº§å¤šäººå¯¹ç‰çš„æ—¶å€™ï¼Œ[i]ä¸[/i]触å‘。" +"[b]注æ„:[/b]这个信å·åœ¨ç”¨ä½œé«˜çº§å¤šäººå¯¹ç‰çš„æ—¶å€™ï¼Œ[i]ä¸ä¼š[/i]触å‘。" #: modules/webxr/doc_classes/WebXRInterface.xml msgid "AR/VR interface using WebXR." @@ -91958,7 +92968,7 @@ msgstr "" "\n" "func _on_Button_pressed():\n" " if not vr_supported:\n" -" OS.alert(\"Your browser doesn't support VR\")\n" +" OS.alert(\"ä½ çš„æµè§ˆå™¨ä¸æ”¯æŒ VR\")\n" " return\n" "\n" " # 获得沉浸å¼çš„VRä½“éªŒï¼Œè€Œä¸æ˜¯AR('immersive-ar')\n" @@ -91983,12 +92993,12 @@ msgstr "" " # _webxr_session_started()或_webxr_session_failed()方法被调用时,æ‰çŸ¥é“它" "是å¦çœŸçš„æˆåŠŸæˆ–å¤±è´¥ã€‚\n" " if not webxr_interface.initialize():\n" -" OS.alert(\"Failed to initialize\")\n" +" OS.alert(\"åˆå§‹åŒ–失败\")\n" " return\n" "\n" "func _webxr_session_started():\n" " $Button.visible = false\n" -" # 这告诉Godot开始进行渲染。\n" +" # 让 Godot 开始进行渲染。\n" " get_viewport().arvr = true\n" " # 这将是您从上é¢è¯·æ±‚çš„ç±»åž‹ä¸æœ€ç»ˆå¾—到的引用空间类型。\n" " # å¦‚æžœä½ æƒ³è®©æ¸¸æˆåœ¨'bounded-floor'å’Œ 'local-floor' 䏿œ‰ä¸€ç‚¹ä¸åŒï¼Œ\n" @@ -92003,7 +93013,7 @@ msgstr "" " get_viewport().arvr = false\n" "\n" "func _webxr_session_failed(message):\n" -" OS.alert(\"Failed to initialize: \" + message)\n" +" OS.alert(\"åˆå§‹åŒ–失败:\" + message)\n" "[/codeblock]\n" "æœ‰å‡ ç§æ–¹æ³•æ¥å¤„ç†â€œcontrollerâ€æŽ§åˆ¶å™¨çš„è¾“å…¥ã€‚\n" "- 使用 [ARVRController] 节点和它们的 [signal ARVRController.button_pressed] " @@ -92440,11 +93450,11 @@ msgstr "拥有与世界相关的一切的类。" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" -"拥有与世界相关的一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯å’Œå£°éŸ³ç©ºé—´ã€‚ç©ºé—´èŠ‚ç‚¹å°†å…¶èµ„æºæ³¨å†Œ" -"到当å‰ä¸–界ä¸ã€‚" +"拥有与世界相关的一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯ã€å¯¼èˆªåœ°å›¾å’Œå£°éŸ³ç©ºé—´ã€‚空间节点将" +"å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰ä¸–界ä¸ã€‚" #: doc/classes/World.xml msgid "" @@ -92457,14 +93467,20 @@ msgid "The World's [Environment]." msgstr "Worldçš„[Environment]环境。" #: doc/classes/World.xml +#, fuzzy msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" "如果 World çš„ [Environment] 失败或丢失,将使用 World çš„ " "fallback_environment。" #: doc/classes/World.xml +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "这个世界的导航地图的 [RID]。会被 [NavigationServer] 使用。" + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "世界的视觉场景。" @@ -92479,11 +93495,11 @@ msgstr "拥有与 2D 世界有关的所有内容的类。" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" -"拥有与 2D 世界有关一切的类。一个物ç†ç©ºé—´ã€ä¸€ä¸ªå¯è§†åŒ–场景和一个声音空间。2D 节" -"ç‚¹å°†å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰çš„ 2D 世界ä¸ã€‚" +"拥有与 2D 世界有关一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯ã€å¯¼èˆªåœ°å›¾å’Œå£°éŸ³ç©ºé—´ã€‚2D 节点将" +"å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰çš„ 2D 世界ä¸ã€‚" #: doc/classes/World2D.xml msgid "" @@ -92502,6 +93518,11 @@ msgstr "" #: doc/classes/World2D.xml msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "这个世界的导航地图的 [RID]。会被 [Navigation2DServer] 使用。" + +#: doc/classes/World2D.xml +msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." msgstr "" diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po index 50436013ff..ba40f5ee74 100644 --- a/doc/translations/zh_TW.po +++ b/doc/translations/zh_TW.po @@ -428,7 +428,7 @@ msgstr "" #: modules/gdscript/doc_classes/@GDScript.xml msgid "" "Compares two values by checking their actual contents, recursing into any " -"`Array` or `Dictionary` up to its deepest level.\n" +"[Array] or [Dictionary] up to its deepest level.\n" "This compares to [code]==[/code] in a number of ways:\n" "- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/" "code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] " @@ -3488,6 +3488,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 2D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that an integer property is a bitmask using the optionally named 3D " "render layers." msgstr "" @@ -3500,6 +3506,12 @@ msgstr "" #: doc/classes/@GlobalScope.xml msgid "" +"Hints that an integer property is a bitmask using the optionally named 3D " +"navigation layers." +msgstr "" + +#: doc/classes/@GlobalScope.xml +msgid "" "Hints that a string property is a path to a file. Editing it will show a " "file dialog for picking the path. The hint string can be a set of filters " "with wildcards like [code]\"*.png,*.jpg\"[/code]." @@ -8480,7 +8492,7 @@ msgid "" "[/codeblock]" msgstr "" -#: doc/classes/AStar.xml +#: doc/classes/AStar.xml doc/classes/AStar2D.xml msgid "" "Deletes the segment between the given points. If [code]bidirectional[/code] " "is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/" @@ -8679,7 +8691,10 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Returns whether there is a connection/segment between the given points." +msgid "" +"Returns whether there is a connection/segment between the given points. If " +"[code]bidirectional[/code] is [code]false[/code], returns whether movement " +"from [code]id[/code] to [code]to_id[/code] is possible through this segment." msgstr "" #: doc/classes/AStar2D.xml @@ -8696,10 +8711,6 @@ msgid "" msgstr "" #: doc/classes/AStar2D.xml -msgid "Deletes the segment between the given points." -msgstr "" - -#: doc/classes/AStar2D.xml msgid "" "Returns the closest position to [code]to_position[/code] that resides inside " "a segment between two connected points.\n" @@ -8884,7 +8895,9 @@ msgid "" "Application code should consume these audio frames from this ring buffer " "using [method get_buffer] and process it as needed, for example to capture " "data from a microphone, implement application defined effects, or to " -"transmit audio over the network." +"transmit audio over the network. When capturing audio data from a " +"microphone, the format of the samples will be stereo 32-bit floating point " +"PCM." msgstr "" #: doc/classes/AudioEffectCapture.xml @@ -13736,7 +13749,7 @@ msgid "" msgstr "" #: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml -#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml +#: doc/classes/Navigation2D.xml msgid "Returns the object's [RID]." msgstr "" @@ -19221,11 +19234,15 @@ msgid "" msgstr "" #: doc/classes/CurveTexture.xml -msgid "The [code]curve[/code] rendered onto the texture." -msgstr "" +#, fuzzy +msgid "The [Curve] that is rendered onto the texture." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" #: doc/classes/CurveTexture.xml -msgid "The width of the 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 " +"the cost of increased generation time and memory usage." msgstr "" #: doc/classes/CylinderMesh.xml @@ -19511,6 +19528,13 @@ msgid "Returns the list of keys in the [Dictionary]." msgstr "" #: doc/classes/Dictionary.xml +msgid "" +"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, " +"duplicate keys will not be copied over, unless [code]overwrite[/code] is " +"[code]true[/code]." +msgstr "" + +#: doc/classes/Dictionary.xml #, fuzzy msgid "Returns the number of keys in the dictionary." msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" @@ -21451,9 +21475,23 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the state of your plugin editor. This is used when saving the scene (so " -"state is kept when opening it again) and for switching tabs (so state can be " -"restored when the tab returns)." +"Override this method to provide a state data you want to be saved, like view " +"position, grid settings, folding, etc. This is used when saving the scene " +"(so state is kept when opening it again) and for switching tabs (so state " +"can be restored when the tab returns). This data is automatically saved for " +"each scene in an [code]editstate[/code] file in the editor metadata folder. " +"If you want to store global (scene-independent) editor data for your plugin, " +"you can use [method get_window_layout] instead.\n" +"Use [method set_state] to restore your saved state.\n" +"[b]Note:[/b] This method should not be used to save important settings that " +"should persist with the project.\n" +"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be " +"stored and restored correctly.\n" +"[codeblock]\n" +"func get_state():\n" +" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n" +" return state\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21464,9 +21502,18 @@ msgstr "" #: doc/classes/EditorPlugin.xml msgid "" -"Gets the GUI layout of the plugin. This is used to save the project's editor " -"layout when [method queue_save_layout] is called or the editor layout was " -"changed(For example changing the position of a dock)." +"Override this method to provide the GUI layout of the plugin or any other " +"data you want to be stored. This is used to save the project's editor layout " +"when [method queue_save_layout] is called or the editor layout was changed " +"(for example changing the position of a dock). The data is stored in the " +"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n" +"Use [method set_window_layout] to restore your saved layout.\n" +"[codeblock]\n" +"func get_window_layout(configuration):\n" +" configuration.set_value(\"MyPlugin\", \"window_position\", $Window." +"position)\n" +" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -21579,11 +21626,30 @@ msgid "" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the state saved by [method get_state]." +msgid "" +"Restore the state saved by [method get_state]. This method is called when " +"the current scene tab is changed in the editor.\n" +"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise " +"it will not be recognized and this method will not be called.\n" +"[codeblock]\n" +"func set_state(data):\n" +" zoom = data.get(\"zoom\", 1.0)\n" +" preferred_color = data.get(\"my_color\", Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml -msgid "Restore the plugin GUI layout saved by [method get_window_layout]." +msgid "" +"Restore the plugin GUI layout and data saved by [method get_window_layout]. " +"This method is called for every plugin on editor startup. Use the provided " +"[code]configuration[/code] file to read your saved data.\n" +"[codeblock]\n" +"func set_window_layout(configuration):\n" +" $Window.position = configuration.get_value(\"MyPlugin\", " +"\"window_position\", Vector2())\n" +" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", " +"Color.white)\n" +"[/codeblock]" msgstr "" #: doc/classes/EditorPlugin.xml @@ -26230,7 +26296,8 @@ msgid "" "will be filled from left to right using colors obtained from the gradient. " "This means the texture does not necessarily represent an exact copy of the " "gradient, but instead an interpolation of samples obtained from the gradient " -"at fixed steps (see [member width])." +"at fixed steps (see [member width]). See also [GradientTexture2D] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture.xml @@ -26252,7 +26319,8 @@ msgid "" "repeat] types using colors obtained from the gradient. The texture does not " "necessarily represent an exact copy of the gradient, but instead an " "interpolation of samples obtained from the gradient at fixed steps (see " -"[member width] and [member height])." +"[member width] and [member height]). See also [GradientTexture] and " +"[CurveTexture]." msgstr "" #: doc/classes/GradientTexture2D.xml @@ -27066,6 +27134,12 @@ msgid "" msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "" +"If [code]true[/code], this GridMap uses cell navmesh resources to create " +"navigation regions." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "If [code]true[/code], grid items are centered on the X axis." msgstr "" @@ -27116,6 +27190,10 @@ msgid "The assigned [MeshLibrary]." msgstr "" #: modules/gridmap/doc_classes/GridMap.xml +msgid "The navigation layers the GridMap generates its navigation regions in." +msgstr "" + +#: modules/gridmap/doc_classes/GridMap.xml msgid "" "Overrides the default friction and bounce physics properties for the whole " "[GridMap]." @@ -29508,7 +29586,7 @@ msgstr "" msgid "" "Sends all input events which are in the current buffer to the game loop. " "These events may have been buffered as a result of accumulated input " -"([method set_use_accumulated_input]) or agile input flushing ([member " +"([member use_accumulated_input]) or agile input flushing ([member " "ProjectSettings.input_devices/buffering/agile_event_flushing]).\n" "The engine will already do this itself at key execution points (at least " "once per frame). However, this can be useful in advanced cases where you " @@ -29657,10 +29735,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Returns the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Gets an input vector by specifying four actions for the positive and " "negative X and Y axes.\n" @@ -29854,24 +29928,6 @@ msgid "" msgstr "" #: doc/classes/Input.xml -msgid "Sets the mouse mode. See the constants for more information." -msgstr "" - -#: doc/classes/Input.xml -msgid "" -"Enables or disables the accumulation of similar input events sent by the " -"operating system. When input accumulation is enabled, all input events " -"generated during a frame will be merged and emitted when the frame is done " -"rendering. Therefore, this limits the number of input method calls per " -"second to the rendering FPS.\n" -"Input accumulation is enabled by default. It can be disabled to get slightly " -"more precise/reactive input at the cost of increased CPU usage. In " -"applications where drawing freehand lines is required, input accumulation " -"should generally be disabled while the user is drawing the line to get " -"results that closely follow the actual input." -msgstr "" - -#: doc/classes/Input.xml msgid "" "Starts to vibrate the joypad. Joypads usually come with two rumble motors, a " "strong and a weak one. [code]weak_magnitude[/code] is the strength of the " @@ -29907,6 +29963,24 @@ msgid "" msgstr "" #: doc/classes/Input.xml +msgid "Controls the mouse mode. See [enum MouseMode] for more information." +msgstr "" + +#: doc/classes/Input.xml +msgid "" +"If [code]true[/code], similar input events sent by the operating system are " +"accumulated. When input accumulation is enabled, all input events generated " +"during a frame will be merged and emitted when the frame is done rendering. " +"Therefore, this limits the number of input method calls per second to the " +"rendering FPS.\n" +"Input accumulation can be disabled to get slightly more precise/reactive " +"input at the cost of increased CPU usage. In applications where drawing " +"freehand lines is required, input accumulation should generally be disabled " +"while the user is drawing the line to get results that closely follow the " +"actual input." +msgstr "" + +#: doc/classes/Input.xml msgid "Emitted when a joypad device has been connected or disconnected." msgstr "" @@ -30214,8 +30288,8 @@ msgstr "" #: doc/classes/InputEventJoypadButton.xml msgid "" -"Represents the pressure the user puts on the button with his finger, if the " -"controller supports it. Ranges from [code]0[/code] to [code]1[/code]." +"Represents the pressure the user puts on the button with their finger, if " +"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]." msgstr "" #: doc/classes/InputEventJoypadMotion.xml @@ -30478,9 +30552,9 @@ msgid "" "Contains mouse and pen motion information. Supports relative, absolute " "positions and speed. See [method Node._input].\n" "[b]Note:[/b] By default, this event is only emitted once per frame rendered " -"at most. If you need more precise input reporting, call [method Input." -"set_use_accumulated_input] with [code]false[/code] to make events emitted as " -"often as possible. If you use InputEventMouseMotion to draw lines, consider " +"at most. If you need more precise input reporting, set [member Input." +"use_accumulated_input] to [code]false[/code] to make events emitted as often " +"as possible. If you use InputEventMouseMotion to draw lines, consider " "implementing [url=https://en.wikipedia.org/wiki/" "Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to " "avoid visible gaps in lines if the user is moving the mouse quickly." @@ -34792,9 +34866,10 @@ msgstr "" #: doc/classes/MeshInstance2D.xml msgid "" -"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing " -"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert " -"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"." +"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be " +"automatically created from an existing [Sprite] via a tool in the editor " +"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to " +"MeshInstance2D[/b] at the top of the 2D editor viewport." msgstr "" #: doc/classes/MeshInstance2D.xml @@ -35599,6 +35674,11 @@ msgid "" msgstr "" #: doc/classes/Navigation.xml +#, fuzzy +msgid "Returns the [RID] of the navigation map on the [NavigationServer]." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/Navigation.xml msgid "" "Returns the path between two given points. Points are in local coordinate " "space. If [code]optimize[/code] is [code]true[/code] (the default), the " @@ -35621,10 +35701,22 @@ msgstr "" #: doc/classes/Navigation.xml msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation.get_simple_path] path query." +msgstr "" + +#: doc/classes/Navigation.xml +msgid "" "Defines which direction is up. By default, this is [code](0, 1, 0)[/code], " "which is the world's \"up\" direction." msgstr "" +#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml +#: doc/classes/NavigationServer.xml +msgid "" +"Emitted when a navigation map is updated, when a region moves or is modified." +msgstr "" + #: doc/classes/Navigation2D.xml msgid "2D navigation and pathfinding node." msgstr "" @@ -35659,6 +35751,12 @@ msgstr "" msgid "The XY plane cell size to use for fields." msgstr "" +#: doc/classes/Navigation2D.xml +msgid "" +"A bitfield determining all navigation map layers the navigation can use on a " +"[method Navigation2D.get_simple_path] path query." +msgstr "" + #: doc/classes/Navigation2DServer.xml msgid "Server interface for low-level 2D navigation access." msgstr "" @@ -35675,8 +35773,12 @@ msgid "" "through scripts.\n" "For two regions to be connected to each other, they must share a similar " "edge. An edge is considered connected to another if both of its two vertices " -"are at a distance less than [member Navigation.edge_connection_margin] to " -"the respective other edge's vertex.\n" +"are at a distance less than navigation map [code]edge_connection_margin[/" +"code] to the respective other edge's vertex.\n" +"You may assign navigation layers to regions with [method Navigation2DServer." +"region_set_navigation_layers], which then can be checked upon when " +"requesting a path with [method Navigation2DServer.map_get_path]. This allows " +"allowing or forbidding some areas to 2D objects.\n" "To use the collision avoidance system, you may use agents. You can set an " "agent's target velocity, then the servers will emit a callback with a " "modified velocity.\n" @@ -35704,7 +35806,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Callback called at the end of the RVO process." +msgid "" +"Callback called at the end of the RVO process. If a callback is created " +"manually and the agent is placed on a navigation map it will calculate " +"avoidance for the agent and dispatch the calculated [code]safe_velocity[/" +"code] to the [code]receiver[/code] object with a signal to the chosen " +"[code]method[/code] name.\n" +"[b]Note:[/b] Created callbacks are always processed independently of the " +"SceneTree state as long as the agent is on a navigation map and not freed. " +"To disable the dispatch of a callback from an agent use [method " +"agent_set_callback] again with a [code]null[/code] object as the " +"[code]receiver[/code]." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35774,6 +35886,10 @@ msgid "" "requested navigation [code]map[/code]." msgstr "" +#: doc/classes/Navigation2DServer.xml +msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Returns the map cell size." @@ -35798,7 +35914,10 @@ msgid "" msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml -msgid "Returns the navigation path to reach the destination from the origin." +msgid "" +"Returns the navigation path to reach the destination from the origin. " +"[code]navigation_layers[/code] is a bitmask of all region layers that are " +"allowed to be in the path." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml @@ -35817,6 +35936,12 @@ msgstr "å›žå‚³åƒæ•¸çš„餘弦值。" msgid "Sets the map active." msgstr "å›žå‚³åƒæ•¸çš„åæ£å¼¦å€¼ã€‚" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/" +"b] Currently not implemented." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "Set the map cell size used to weld the navigation mesh polygons." msgstr "" @@ -35832,15 +35957,61 @@ msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml msgid "" +"Returns the ending point of a connection door. [code]connection[/code] is an " +"index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns the starting point of a connection door. [code]connection[/code] is " +"an index between 0 and the return value of [method " +"region_get_connections_count]." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" +"Returns how many connections this [code]region[/code] has with other regions " +"in the map." +msgstr "" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]." +msgstr "計算兩個å‘é‡çš„外ç©ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +msgid "" "Returns the navigation map [RID] the requested [code]region[/code] is " "currently assigned to." msgstr "" #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy +msgid "Returns the region's navigation layers." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]." +msgstr "計算兩個å‘é‡çš„外ç©ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]." +msgstr "計算兩個å‘é‡çš„外ç©ã€‚" + +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy msgid "Sets the map for the region." msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" +#: doc/classes/Navigation2DServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method Navigation2DServer.map_get_path])." +msgstr "" + #: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml #, fuzzy msgid "Sets the navigation mesh for the region." @@ -35851,6 +36022,11 @@ msgstr "å›žå‚³åƒæ•¸çš„相å值。" msgid "Sets the global transformation for the region." msgstr "計算兩個å‘é‡çš„外ç©ã€‚" +#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml +#, fuzzy +msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]." +msgstr "計算兩個å‘é‡çš„外ç©ã€‚" + #: doc/classes/NavigationAgent.xml msgid "3D agent used in navigation for collision avoidance." msgstr "" @@ -35860,9 +36036,16 @@ msgid "" "3D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationAgent] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World] navigation map. If this node is a child of a [Navigation] " +"node it will register to the navigation map of the navigation node or the " +"function [method set_navigation] can be used to set the navigation node " +"directly. [NavigationAgent] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml @@ -35880,7 +36063,15 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml -msgid "Returns the path from start to finish in global coordinates." +msgid "" +"Returns this agent's current path from start to finish in global " +"coordinates. The path only updates when the target location is changed or " +"the agent requires a repath. The path array is not intended to be used in " +"direct path movement as the agent has its own internal path logic that would " +"get corrupted by changing the path array manually. Use the intended [method " +"get_next_location] once every physics frame to receive the next path point " +"for the agents movement as this function also updates the internal path " +"logic." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35896,11 +36087,24 @@ msgid "" "system." msgstr "" -#: doc/classes/NavigationAgent.xml +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" +"Returns the [RID] of the navigation map for this NavigationAgent node. This " +"function returns always the map set on the NavigationAgent node and not the " +"map of the abstract agent on the NavigationServer. If the agent map is " +"changed directly with the NavigationServer API the NavigationAgent node will " +"not be aware of the map change. Use [method set_navigation_map] to change " +"the navigation map for the NavigationAgent and also update the agent on the " +"NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" -"Returns a [Vector3] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the origin of the agent's parent." +"Returns the next location in global coordinates that can be moved to, making " +"sure that there are no static objects in the way. If the agent does not have " +"a navigation path, it will return the position of the agent's parent. The " +"use of this function once every physics frame is required to update the " +"internal path logic of the NavigationAgent." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35942,6 +36146,12 @@ msgstr "" #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "" +"Sets the [RID] of the navigation map this NavigationAgent node should use " +"and also updates the [code]agent[/code] on the NavigationServer." +msgstr "" + +#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml +msgid "" "Sets the user desired final location. This will clear the current navigation " "path." msgstr "" @@ -35954,7 +36164,13 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent.xml -msgid "The agent height offset to match the navigation mesh height." +msgid "" +"The NavigationAgent height offset is subtracted from the y-axis value of any " +"vector path position for this NavigationAgent. The NavigationAgent height " +"offset does not change or influence the navigation mesh or pathfinding query " +"result. Additional navigation maps that use regions with navigation meshes " +"that the developer baked with appropriate agent radius or height values are " +"required to support different-sized agents." msgstr "" #: doc/classes/NavigationAgent.xml @@ -35981,6 +36197,13 @@ msgstr "" msgid "The maximum speed that an agent can move." msgstr "" +#: doc/classes/NavigationAgent.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml msgid "The distance to search for other agents." msgstr "" @@ -36043,9 +36266,16 @@ msgid "" "2D agent that is used in navigation to reach a location while avoiding " "static and dynamic obstacles. The dynamic obstacles are avoided using RVO " "(Reciprocal Velocity Obstacles) collision avoidance. The agent needs " -"navigation data to work correctly. This can be done by having the agent as a " -"child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationAgent2D] is physics safe." +"navigation data to work correctly. By default this node will register to the " +"default [World2D] navigation map. If this node is a child of a " +"[Navigation2D] node it will register to the navigation map of the navigation " +"node or the function [method set_navigation] can be used to set the " +"navigation node directly. [NavigationAgent2D] is physics safe.\n" +"[b]Note:[/b] After [method set_target_location] is used it is required to " +"use the [method get_next_location] function once every physics frame to " +"update the internal path logic of the NavigationAgent. The returned vector " +"position from this function should be used as the next movement position for " +"the agent's parent Node." msgstr "" #: doc/classes/NavigationAgent2D.xml @@ -36062,13 +36292,6 @@ msgid "" msgstr "" #: doc/classes/NavigationAgent2D.xml -msgid "" -"Returns a [Vector2] in global coordinates, that can be moved to, making sure " -"that there are no static objects in the way. If the agent does not have a " -"navigation path, it will return the position of the agent's parent." -msgstr "" - -#: doc/classes/NavigationAgent2D.xml #, fuzzy msgid "Returns the [RID] of this agent on the [Navigation2DServer]." msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" @@ -36089,6 +36312,13 @@ msgid "" "only be enabled on agents that currently require it." msgstr "" +#: doc/classes/NavigationAgent2D.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationAgent2D] " +"belongs to. On path requests the agent will ignore navmeshes without at " +"least one matching layer." +msgstr "" + #: doc/classes/NavigationMesh.xml msgid "A mesh to approximate the walkable areas and obstacles." msgstr "" @@ -36119,8 +36349,8 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"Returns whether the specified [code]bit[/code] of the [member geometry/" -"collision_mask] is set." +"Returns whether the specified [code]bit[/code] of the [member " +"geometry_collision_mask] is set." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36143,9 +36373,9 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/" -"code] in the [member geometry/collision_mask].\n" +"code] in the [member geometry_collision_mask].\n" "If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/" -"code] in the [member geometry/collision_mask]." +"code] in the [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml @@ -36159,14 +36389,14 @@ msgid "" "The minimum floor to ceiling height that will still allow the floor area to " "be considered walkable.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The minimum ledge height that is considered to still be traversable.\n" "[b]Note:[/b] While baking, this value will be rounded down to the nearest " -"multiple of [member cell/height]." +"multiple of [member cell_height]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36178,7 +36408,7 @@ msgid "" "The distance to erode/shrink the walkable area of the heightfield away from " "obstructions.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36206,29 +36436,29 @@ msgstr "" msgid "" "The maximum allowed length for contour edges along the border of the mesh.\n" "[b]Note:[/b] While baking, this value will be rounded up to the nearest " -"multiple of [member cell/size]." +"multiple of [member cell_size]." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "" -"If [code]true[/code], marks walkable spans as not walkable if the clearance " -"above the span is less than [member agent/height]." +msgid "If [code]true[/code], marks spans that are ledges as non-walkable." msgstr "" #: doc/classes/NavigationMesh.xml -msgid "If [code]true[/code], marks spans that are ledges as non-walkable." +msgid "" +"If [code]true[/code], marks non-walkable spans as walkable if their maximum " +"is within [member agent_max_climb] of a walkable neighbor." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" -"If [code]true[/code], marks non-walkable spans as walkable if their maximum " -"is within [member agent/max_climb] of a walkable neighbor." +"If [code]true[/code], marks walkable spans as not walkable if the clearance " +"above the span is less than [member agent_height]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The physics layers to scan for static colliders.\n" -"Only used when [member geometry/parsed_geometry_type] is [constant " +"Only used when [member geometry_parsed_geometry_type] is [constant " "PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]." msgstr "" @@ -36247,7 +36477,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "The name of the group to scan for geometry.\n" -"Only used when [member geometry/source_geometry_mode] is [constant " +"Only used when [member geometry_source_geometry_mode] is [constant " "SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant " "SOURCE_GEOMETRY_GROUPS_EXPLICIT]." msgstr "" @@ -36310,7 +36540,7 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Parses [StaticBody] colliders as geometry. The collider should be in any of " -"the layers specified by [member geometry/collision_mask]." +"the layers specified by [member geometry_collision_mask]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36332,13 +36562,13 @@ msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Scans nodes in a group and their child nodes recursively for geometry. The " -"group is specified by [member geometry/source_group_name]." +"group is specified by [member geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml msgid "" "Uses nodes in a group for geometry. The group is specified by [member " -"geometry/source_group_name]." +"geometry_source_group_name]." msgstr "" #: doc/classes/NavigationMesh.xml @@ -36388,8 +36618,8 @@ msgid "" "Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child " "nodes under the provided [code]root_node[/code] or a specific group of nodes " "for potential source geometry. The parse behavior can be controlled with the " -"[member NavigationMesh.geometry/parsed_geometry_type] and [member " -"NavigationMesh.geometry/source_geometry_mode] properties on the " +"[member NavigationMesh.geometry_parsed_geometry_type] and [member " +"NavigationMesh.geometry_source_geometry_mode] properties on the " "[NavigationMesh] resource." msgstr "" @@ -36407,8 +36637,21 @@ msgstr "" #: doc/classes/NavigationMeshInstance.xml msgid "" "An instance of a [NavigationMesh]. It tells the [Navigation] node what can " -"be navigated and what cannot, based on the [NavigationMesh] resource. This " -"should be a child of a [Navigation] node." +"be navigated and what cannot, based on the [NavigationMesh] resource.\n" +"By default this node will register to the default [World] navigation map. If " +"this node is a child of a [Navigation] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method NavigationServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The cost of entering this region from another region can be controlled with " +"the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The cost of traveling distances inside this region can be controlled with " +"the [member travel_cost] multiplier." msgstr "" #: doc/classes/NavigationMeshInstance.xml @@ -36437,10 +36680,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding enters this region's navmesh from another regions navmesh " +"the [code]enter_cost[/code] value is added to the path distance for " +"determining the shortest path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationMesh] " +"belongs to. On path requests with [method NavigationServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "The [NavigationMesh] resource to use." msgstr "" #: doc/classes/NavigationMeshInstance.xml +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"When pathfinding moves inside this region's navmesh the traveled distances " +"are multiplied with [code]travel_cost[/code] for determining the shortest " +"path." +msgstr "" + +#: doc/classes/NavigationMeshInstance.xml msgid "Notifies when the navigation mesh bake operation is completed." msgstr "" @@ -36457,7 +36724,9 @@ msgid "" "3D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation] node, or using [method set_navigation]. " -"[NavigationObstacle] is physics safe." +"[NavigationObstacle] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle.xml @@ -36498,7 +36767,9 @@ msgid "" "2D obstacle used in navigation for collision avoidance. The obstacle needs " "navigation data to work correctly. This can be done by having the obstacle " "as a child of a [Navigation2D] node, or using [method set_navigation]. " -"[NavigationObstacle2D] is physics safe." +"[NavigationObstacle2D] is physics safe.\n" +"[b]Note:[/b] Obstacles are intended as a last resort option for constantly " +"moving objects that cannot be (re)baked to a navigation mesh efficiently." msgstr "" #: doc/classes/NavigationObstacle2D.xml @@ -36579,6 +36850,14 @@ msgstr "" #: doc/classes/NavigationPolygon.xml msgid "" +"Returns the [NavigationMesh] resulting from this navigation polygon. This " +"navmesh can be used to update the navmesh of a region with the [method " +"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server " +"behind the scene)." +msgstr "" + +#: doc/classes/NavigationPolygon.xml +msgid "" "Returns a [PoolVector2Array] containing the vertices of an outline that was " "created in the editor or by script." msgstr "" @@ -36615,6 +36894,30 @@ msgid "" msgstr "" #: doc/classes/NavigationPolygonInstance.xml +msgid "A region of the 2D navigation map." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A region of the navigation map. It tells the [Navigation2DServer] what can " +"be navigated and what cannot, based on its [NavigationPolygon] resource.\n" +"By default this node will register to the default [World2D] navigation map. " +"If this node is a child of a [Navigation2D] node it will register to the " +"navigation map of the navigation node.\n" +"Two regions can be connected to each other if they share a similar edge. You " +"can set the minimum distance between two vertices required to connect two " +"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n" +"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting " +"two regions. They must share a similar edge.\n" +"The pathfinding cost of entering this region from another region can be " +"controlled with the [member enter_cost] value.\n" +"[b]Note[/b]: This value is not added to the path cost when the start " +"position is already inside this region.\n" +"The pathfinding cost of traveling distances inside this region can be " +"controlled with the [member travel_cost] multiplier." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml msgid "" "Returns the [RID] of this region on the [Navigation2DServer]. Combined with " "[method Navigation2DServer.map_get_closest_point_owner] can be used to " @@ -36622,6 +36925,22 @@ msgid "" "navigation map." msgstr "" +#: doc/classes/NavigationPolygonInstance.xml +msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "" +"A bitfield determining all navigation map layers the [NavigationPolygon] " +"belongs to. On path requests with [method Navigation2DServer.map_get_path] " +"navmeshes without matching layers will be ignored and the navigation map " +"will only proximity merge different navmeshes with matching layers." +msgstr "" + +#: doc/classes/NavigationPolygonInstance.xml +msgid "The [NavigationPolygon] resource to use." +msgstr "" + #: doc/classes/NavigationServer.xml msgid "Server interface for low-level 3D navigation access." msgstr "" @@ -36701,6 +37020,12 @@ msgid "Bakes the navigation mesh." msgstr "" #: doc/classes/NavigationServer.xml +msgid "" +"Set the region's navigation layers. This allows selecting regions from a " +"path request (when using [method NavigationServer.map_get_path])." +msgstr "" + +#: doc/classes/NavigationServer.xml msgid "Control activation of this server." msgstr "" @@ -38464,7 +38789,13 @@ msgid "Rotation in degrees, relative to the node's parent." msgstr "" #: doc/classes/Node2D.xml -msgid "The node's scale. Unscaled value: [code](1, 1)[/code]." +msgid "" +"The node's scale. Unscaled value: [code](1, 1)[/code].\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Node2D.xml @@ -40565,8 +40896,15 @@ msgstr "" msgid "" "Moves the file or directory to the system's recycle bin. See also [method " "Directory.remove].\n" +"The method takes only global paths, so you may need to use [method " +"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/" +"code] as it will not work in exported project.\n" "[b]Note:[/b] If the user has disabled the recycle bin on their system, the " -"file will be permanently deleted instead." +"file will be permanently deleted instead.\n" +"[codeblock]\n" +"var file_to_remove = \"user://slot1.sav\"\n" +"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n" +"[/codeblock]" msgstr "" #: doc/classes/OS.xml @@ -46933,7 +47271,16 @@ msgid "" msgstr "" #: doc/classes/ProjectSettings.xml -msgid "Message to be displayed before the backtrace when the engine crashes." +msgid "" +"Message to be displayed before the backtrace when the engine crashes. By " +"default, this message is only used in exported projects due to the editor-" +"only override applied to this setting." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Editor-only override for [member debug/settings/crash_handler/message]. Does " +"not affect exported projects in debug or release mode." msgstr "" #: doc/classes/ProjectSettings.xml @@ -47178,6 +47525,18 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default naming style for scene files to infer from their root nodes. " +"Possible options are:\n" +"- [code]0[/code] (Auto): Uses the scene root name as is without changing its " +"casing.\n" +"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase " +"casing.\n" +"- [code]2[/code] (snake_case): Converts the scene root name to snake_case " +"casing." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Search path for project-specific script templates. Godot will search for " "script templates both in the editor-specific path and in this project-" "specific path." @@ -47403,6 +47762,198 @@ msgid "Default delay for touch events. This only affects iOS devices." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 2D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 2D physics layer 1." msgstr "" @@ -47611,6 +48162,198 @@ msgid "Optional name for the 2D render layer 9." msgstr "" #: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 1. If left empty, the layer will " +"display as \"Layer 1\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 10. If left empty, the layer will " +"display as \"Layer 10\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 11. If left empty, the layer will " +"display as \"Layer 11\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 12. If left empty, the layer will " +"display as \"Layer 12\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 13. If left empty, the layer will " +"display as \"Layer 13\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 14. If left empty, the layer will " +"display as \"Layer 14\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 15. If left empty, the layer will " +"display as \"Layer 15\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 16. If left empty, the layer will " +"display as \"Layer 16\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 17. If left empty, the layer will " +"display as \"Layer 17\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 18. If left empty, the layer will " +"display as \"Layer 18\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 19. If left empty, the layer will " +"display as \"Layer 19\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 2. If left empty, the layer will " +"display as \"Layer 2\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 20. If left empty, the layer will " +"display as \"Layer 20\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 21. If left empty, the layer will " +"display as \"Layer 21\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 22. If left empty, the layer will " +"display as \"Layer 22\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 23. If left empty, the layer will " +"display as \"Layer 23\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 24. If left empty, the layer will " +"display as \"Layer 24\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 25. If left empty, the layer will " +"display as \"Layer 25\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 26. If left empty, the layer will " +"display as \"Layer 26\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 27. If left empty, the layer will " +"display as \"Layer 27\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 28. If left empty, the layer will " +"display as \"Layer 28\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 29. If left empty, the layer will " +"display as \"Layer 29\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 3. If left empty, the layer will " +"display as \"Layer 3\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 30. If left empty, the layer will " +"display as \"Layer 30\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 31. If left empty, the layer will " +"display as \"Layer 31\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 32. If left empty, the layer will " +"display as \"Layer 32\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 4. If left empty, the layer will " +"display as \"Layer 4\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 5. If left empty, the layer will " +"display as \"Layer 5\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 6. If left empty, the layer will " +"display as \"Layer 6\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 7. If left empty, the layer will " +"display as \"Layer 7\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 8. If left empty, the layer will " +"display as \"Layer 8\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Optional name for the 3D navigation layer 9. If left empty, the layer will " +"display as \"Layer 9\"." +msgstr "" + +#: doc/classes/ProjectSettings.xml msgid "Optional name for the 3D physics layer 1." msgstr "" @@ -47878,6 +48621,49 @@ msgstr "" #: doc/classes/ProjectSettings.xml msgid "" +"Default cell height for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_height].\n" +"[b]Note:[/b] Currently not implemented." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 2D navigation maps. See [method Navigation2DServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 2D navigation maps. See [method " +"Navigation2DServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell height for 3D navigation maps. See [method NavigationServer." +"map_set_cell_height]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default cell size for 3D navigation maps. See [method NavigationServer." +"map_set_cell_size]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default edge connection margin for 3D navigation maps. See [method " +"NavigationServer.map_set_edge_connection_margin]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" +"Default map up vector for 3D navigation maps. See [method NavigationServer." +"map_set_up]." +msgstr "" + +#: doc/classes/ProjectSettings.xml +msgid "" "Maximum amount of characters allowed to send as output from the debugger. " "Over this value, content is dropped. This helps not to stall the debugger " "connection." @@ -49380,7 +50166,6 @@ msgid "" "- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/" "code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, " "small grid radius values may lead to unwanted groupings.\n" -"[/codeblock]\n" "[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more " "effective and faster [VisibilityNotifier] functionality. For most use cases, " "[method Vector3.distance_to] or [method Vector3.distance_squared_to] are " @@ -51529,6 +52314,22 @@ msgid "Makes text fill width." msgstr "" #: doc/classes/RichTextLabel.xml +msgid "Aligns top of the inline image to the top of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns center of the inline image to the center of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the baseline of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml +msgid "Aligns bottom of the inline image to the bottom of the text." +msgstr "" + +#: doc/classes/RichTextLabel.xml msgid "Each list item has a number marker." msgstr "" @@ -53266,8 +54067,8 @@ msgid "" " yield(get_tree().create_timer(1.0), \"timeout\")\n" " print(\"Timer ended.\")\n" "[/codeblock]\n" -"The timer will be automatically freed after its time elapses, so be aware " -"that any reference you might have kept to it will become invalid." +"The timer will be dereferenced after its time elapses. To preserve the " +"timer, you can keep a reference to it. See [Reference]." msgstr "" #: doc/classes/SceneTreeTimer.xml @@ -54989,7 +55790,12 @@ msgid "" msgstr "" #: doc/classes/Spatial.xml -msgid "Scale part of the local transformation." +msgid "" +"Scale part of the local transformation.\n" +"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, the scale values will either be all " +"positive or all negative." msgstr "" #: doc/classes/Spatial.xml @@ -61105,6 +61911,11 @@ msgid "" msgstr "" #: doc/classes/TileMap.xml +#, fuzzy +msgid "If [code]true[/code], this TileMap bakes a navigation region." +msgstr "å›žå‚³åƒæ•¸çš„餘弦值。" + +#: doc/classes/TileMap.xml msgid "If [code]true[/code], the cell's UVs will be clipped." msgstr "" @@ -61211,6 +62022,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values." msgstr "" #: doc/classes/TileMap.xml +msgid "The navigation layers the TileMap generates its navigation regions in." +msgstr "" + +#: doc/classes/TileMap.xml msgid "" "The light mask assigned to all light occluders in the TileMap. The TileSet's " "light occluders will cast shadows only from Light2D(s) that have the same " @@ -62342,7 +63157,12 @@ msgstr "" #: doc/classes/Transform2D.xml msgid "" "Returns a copy of the transform scaled by the given [code]scale[/code] " -"factor, using matrix multiplication." +"factor, using matrix multiplication.\n" +"[b]Note:[/b] Negative X scales in 2D are not decomposable from the " +"transformation matrix. Due to the way scale is represented with " +"transformation matrices in Godot, negative scales on the X axis will be " +"changed to negative scales on the Y axis and a rotation of 180 degrees when " +"decomposed." msgstr "" #: doc/classes/Transform2D.xml @@ -66028,11 +66848,12 @@ msgid "This enabler will stop [Particles2D] nodes." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _process function." +msgid "This enabler will stop the parent's [method Node._process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml -msgid "This enabler will stop the parent's _physics_process function." +msgid "" +"This enabler will stop the parent's [method Node._physics_process] function." msgstr "" #: doc/classes/VisibilityEnabler2D.xml @@ -66072,6 +66893,16 @@ msgid "The VisibilityNotifier's bounding box." msgstr "" #: doc/classes/VisibilityNotifier.xml +msgid "" +"In addition to checking whether a node is on screen or within a [Camera]'s " +"view, VisibilityNotifier can also optionally check whether a node is within " +"a specified maximum distance when using a [Camera] with perspective " +"projection. This is useful for throttling the performance requirements of " +"nodes that are far away.\n" +"[b]Note:[/b] This feature will be disabled if set to 0.0." +msgstr "" + +#: doc/classes/VisibilityNotifier.xml msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view." msgstr "" @@ -70836,6 +71667,16 @@ msgid "The amount of shader rebinds in the frame." msgstr "" #: doc/classes/VisualServer.xml +msgid "" +"The peak amount of shaders that have been under compilation in the frame.\n" +"This is useful to know when asynchronous shader compilation has finished for " +"the current shaders on screen.\n" +"[b]Note:[/b] For complete certainty, only assume there are no outstanding " +"compilations when this value is zero for at least two frames in a row.\n" +"Unimplemented in the GLES2 rendering backend, always returns 0." +msgstr "" + +#: doc/classes/VisualServer.xml msgid "The amount of surface changes in the frame." msgstr "" @@ -74033,8 +74874,8 @@ msgstr "" #: doc/classes/World.xml msgid "" "Class that has everything pertaining to a world. A physics space, a visual " -"scenario and a sound space. Spatial nodes register their resources into the " -"current world." +"scenario, a navigation map and a sound space. Spatial nodes register their " +"resources into the current world." msgstr "" #: doc/classes/World.xml @@ -74049,11 +74890,17 @@ msgstr "" #: doc/classes/World.xml msgid "" -"The World's fallback_environment will be used if the World's [Environment] " -"fails or is missing." +"The World's fallback environment will be used if [member environment] fails " +"or is missing." msgstr "" #: doc/classes/World.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [NavigationServer]." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/World.xml msgid "The World's visual scenario." msgstr "" @@ -74068,8 +74915,8 @@ msgstr "" #: doc/classes/World2D.xml msgid "" "Class that has everything pertaining to a 2D world. A physics space, a " -"visual scenario and a sound space. 2D nodes register their resources into " -"the current 2D world." +"visual scenario, a navigation map and a sound space. 2D nodes register their " +"resources into the current 2D world." msgstr "" #: doc/classes/World2D.xml @@ -74086,6 +74933,12 @@ msgid "" msgstr "" #: doc/classes/World2D.xml +#, fuzzy +msgid "" +"The [RID] of this world's navigation map. Used by the [Navigation2DServer]." +msgstr "å›žå‚³åƒæ•¸çš„æ£å¼¦å€¼ã€‚" + +#: doc/classes/World2D.xml msgid "" "The [RID] of this world's physics space resource. Used by the " "[Physics2DServer] for 2D physics, treating it as both a space and an area." diff --git a/drivers/gles3/SCsub b/drivers/gles3/SCsub index 5760fd714e..506312df80 100644 --- a/drivers/gles3/SCsub +++ b/drivers/gles3/SCsub @@ -7,3 +7,4 @@ env.add_source_files(env.drivers_sources, "*.cpp") SConscript("shaders/SCsub") SConscript("storage/SCsub") SConscript("effects/SCsub") +SConscript("environment/SCsub") diff --git a/drivers/gles3/environment/SCsub b/drivers/gles3/environment/SCsub new file mode 100644 index 0000000000..91e1140b75 --- /dev/null +++ b/drivers/gles3/environment/SCsub @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +Import("env") + +env.add_source_files(env.drivers_sources, "*.cpp") diff --git a/drivers/gles3/environment/gi.cpp b/drivers/gles3/environment/gi.cpp new file mode 100644 index 0000000000..98d698b2ae --- /dev/null +++ b/drivers/gles3/environment/gi.cpp @@ -0,0 +1,140 @@ +/*************************************************************************/ +/* gi.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifdef GLES3_ENABLED + +#include "gi.h" + +using namespace GLES3; + +/* VOXEL GI API */ + +RID GI::voxel_gi_allocate() { + return RID(); +} + +void GI::voxel_gi_free(RID p_rid) { +} + +void GI::voxel_gi_initialize(RID p_rid) { +} + +void GI::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) { +} + +AABB GI::voxel_gi_get_bounds(RID p_voxel_gi) const { + return AABB(); +} + +Vector3i GI::voxel_gi_get_octree_size(RID p_voxel_gi) const { + return Vector3i(); +} + +Vector<uint8_t> GI::voxel_gi_get_octree_cells(RID p_voxel_gi) const { + return Vector<uint8_t>(); +} + +Vector<uint8_t> GI::voxel_gi_get_data_cells(RID p_voxel_gi) const { + return Vector<uint8_t>(); +} + +Vector<uint8_t> GI::voxel_gi_get_distance_field(RID p_voxel_gi) const { + return Vector<uint8_t>(); +} + +Vector<int> GI::voxel_gi_get_level_counts(RID p_voxel_gi) const { + return Vector<int>(); +} + +Transform3D GI::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const { + return Transform3D(); +} + +void GI::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) { +} + +float GI::voxel_gi_get_dynamic_range(RID p_voxel_gi) const { + return 0; +} + +void GI::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) { +} + +float GI::voxel_gi_get_propagation(RID p_voxel_gi) const { + return 0; +} + +void GI::voxel_gi_set_energy(RID p_voxel_gi, float p_range) { +} + +float GI::voxel_gi_get_energy(RID p_voxel_gi) const { + return 0.0; +} + +void GI::voxel_gi_set_bias(RID p_voxel_gi, float p_range) { +} + +float GI::voxel_gi_get_bias(RID p_voxel_gi) const { + return 0.0; +} + +void GI::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) { +} + +float GI::voxel_gi_get_normal_bias(RID p_voxel_gi) const { + return 0.0; +} + +void GI::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) { +} + +bool GI::voxel_gi_is_interior(RID p_voxel_gi) const { + return false; +} + +void GI::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) { +} + +bool GI::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const { + return false; +} + +void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { +} + +float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { + return 0; +} + +uint32_t GI::voxel_gi_get_version(RID p_voxel_gi) const { + return 0; +} + +#endif // GLES3_ENABLED diff --git a/drivers/gles3/environment/gi.h b/drivers/gles3/environment/gi.h new file mode 100644 index 0000000000..bff482d7fa --- /dev/null +++ b/drivers/gles3/environment/gi.h @@ -0,0 +1,99 @@ +/*************************************************************************/ +/* gi.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef GI_GLES3_H +#define GI_GLES3_H + +#ifdef GLES3_ENABLED + +#include "core/templates/local_vector.h" +#include "core/templates/rid_owner.h" +#include "core/templates/self_list.h" +#include "servers/rendering/environment/renderer_gi.h" + +#include "platform_config.h" +#ifndef OPENGL_INCLUDE_H +#include <GLES3/gl3.h> +#else +#include OPENGL_INCLUDE_H +#endif + +namespace GLES3 { + +class GI : public RendererGI { +public: + /* VOXEL GI API */ + + virtual RID voxel_gi_allocate() override; + virtual void voxel_gi_free(RID p_rid) override; + virtual void voxel_gi_initialize(RID p_rid) override; + virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override; + + virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override; + virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override; + + virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override; + virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_energy(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_bias(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override; + virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override; + virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override; + virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override; + + virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override; +}; + +}; // namespace GLES3 + +#endif // GLES3_ENABLED + +#endif // !GI_GLES3_H diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index 32d279a635..d41c844d1d 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -689,6 +689,10 @@ void RasterizerCanvasGLES3::_render_item(RID p_render_target, const Item *p_item _bind_instance_data_buffer(1); glBindVertexArray(pb->vertex_array); + if (pb->color_disabled) { + glVertexAttrib4f(RS::ARRAY_COLOR, pb->color.r, pb->color.g, pb->color.b, pb->color.a); + } + if (pb->index_buffer != 0) { glDrawElements(prim[polygon->primitive], pb->count, GL_UNSIGNED_INT, nullptr); } else { @@ -698,6 +702,11 @@ void RasterizerCanvasGLES3::_render_item(RID p_render_target, const Item *p_item state.fences[state.current_buffer] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); state.current_buffer = (state.current_buffer + 1) % state.canvas_instance_data_buffers.size(); + + if (pb->color_disabled) { + // Reset so this doesn't pollute other draw calls. + glVertexAttrib4f(RS::ARRAY_COLOR, 1.0, 1.0, 1.0, 1.0); + } } break; case Item::Command::TYPE_PRIMITIVE: { @@ -758,7 +767,6 @@ void RasterizerCanvasGLES3::_render_item(RID p_render_target, const Item *p_item GLuint multimesh_buffer = 0; uint32_t multimesh_stride = 0; uint32_t multimesh_color_offset = 0; - uint32_t multimesh_custom_data_offset = 0; bool multimesh_uses_color = false; bool multimesh_uses_custom_data = false; @@ -788,7 +796,6 @@ void RasterizerCanvasGLES3::_render_item(RID p_render_target, const Item *p_item multimesh_buffer = mesh_storage->multimesh_get_gl_buffer(multimesh); multimesh_stride = mesh_storage->multimesh_get_stride(multimesh); multimesh_color_offset = mesh_storage->multimesh_get_color_offset(multimesh); - multimesh_custom_data_offset = mesh_storage->multimesh_get_custom_data_offset(multimesh); multimesh_uses_color = mesh_storage->multimesh_uses_colors(multimesh); multimesh_uses_custom_data = mesh_storage->multimesh_uses_custom_data(multimesh); } @@ -854,22 +861,17 @@ void RasterizerCanvasGLES3::_render_item(RID p_render_target, const Item *p_item if (instance_count > 1) { // Bind instance buffers. glBindBuffer(GL_ARRAY_BUFFER, multimesh_buffer); - glEnableVertexAttribArray(5); - glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(0)); - glVertexAttribDivisor(5, 1); - glEnableVertexAttribArray(6); - glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(4 * 4)); - glVertexAttribDivisor(6, 1); - - if (multimesh_uses_color) { - glEnableVertexAttribArray(7); - glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(multimesh_color_offset * sizeof(float))); - glVertexAttribDivisor(7, 1); - } - if (multimesh_uses_custom_data) { - glEnableVertexAttribArray(8); - glVertexAttribPointer(8, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(multimesh_custom_data_offset * sizeof(float))); - glVertexAttribDivisor(8, 1); + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(0)); + glVertexAttribDivisor(1, 1); + glEnableVertexAttribArray(2); + glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(4 * 4)); + glVertexAttribDivisor(2, 1); + + if (multimesh_uses_color || multimesh_uses_custom_data) { + glEnableVertexAttribArray(5); + glVertexAttribIPointer(5, 4, GL_UNSIGNED_INT, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(multimesh_color_offset * sizeof(float))); + glVertexAttribDivisor(5, 1); } } @@ -1268,11 +1270,7 @@ RendererCanvasRender::PolygonID RasterizerCanvasGLES3::request_polygon(const Vec } // Next add colors - if (p_colors.size() == 1) { - glDisableVertexAttribArray(RS::ARRAY_COLOR); - Color m = p_colors[0]; - glVertexAttrib4f(RS::ARRAY_COLOR, m.r, m.g, m.b, m.a); - } else if ((uint32_t)p_colors.size() == vertex_count) { + if ((uint32_t)p_colors.size() == vertex_count) { glEnableVertexAttribArray(RS::ARRAY_COLOR); glVertexAttribPointer(RS::ARRAY_COLOR, 4, GL_FLOAT, GL_FALSE, stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(base_offset * sizeof(float))); @@ -1287,7 +1285,8 @@ RendererCanvasRender::PolygonID RasterizerCanvasGLES3::request_polygon(const Vec base_offset += 4; } else { glDisableVertexAttribArray(RS::ARRAY_COLOR); - glVertexAttrib4f(RS::ARRAY_COLOR, 1.0, 1.0, 1.0, 1.0); + pb.color_disabled = true; + pb.color = p_colors.size() == 1 ? p_colors[0] : Color(1.0, 1.0, 1.0, 1.0); } if ((uint32_t)p_uvs.size() == vertex_count) { diff --git a/drivers/gles3/rasterizer_canvas_gles3.h b/drivers/gles3/rasterizer_canvas_gles3.h index 31e82401f9..bf13c91e1c 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.h +++ b/drivers/gles3/rasterizer_canvas_gles3.h @@ -238,6 +238,8 @@ public: GLuint vertex_array; GLuint index_buffer; int count; + bool color_disabled = false; + Color color; }; struct { diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index c8705dc8c8..78ffb42557 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -198,6 +198,8 @@ void RasterizerGLES3::finalize() { memdelete(scene); memdelete(canvas); memdelete(storage); + memdelete(gi); + memdelete(copy_effects); memdelete(light_storage); memdelete(particles_storage); memdelete(mesh_storage); @@ -269,6 +271,7 @@ RasterizerGLES3::RasterizerGLES3() { particles_storage = memnew(GLES3::ParticlesStorage); light_storage = memnew(GLES3::LightStorage); copy_effects = memnew(GLES3::CopyEffects); + gi = memnew(GLES3::GI); storage = memnew(RasterizerStorageGLES3); canvas = memnew(RasterizerCanvasGLES3(storage)); scene = memnew(RasterizerSceneGLES3(storage)); diff --git a/drivers/gles3/rasterizer_gles3.h b/drivers/gles3/rasterizer_gles3.h index 5f1cbab849..c0322dc45b 100644 --- a/drivers/gles3/rasterizer_gles3.h +++ b/drivers/gles3/rasterizer_gles3.h @@ -34,6 +34,7 @@ #ifdef GLES3_ENABLED #include "effects/copy_effects.h" +#include "environment/gi.h" #include "rasterizer_canvas_gles3.h" #include "rasterizer_scene_gles3.h" #include "rasterizer_storage_gles3.h" @@ -59,6 +60,7 @@ protected: GLES3::MeshStorage *mesh_storage = nullptr; GLES3::ParticlesStorage *particles_storage = nullptr; GLES3::LightStorage *light_storage = nullptr; + GLES3::GI *gi = nullptr; GLES3::CopyEffects *copy_effects = nullptr; RasterizerStorageGLES3 *storage = nullptr; RasterizerCanvasGLES3 *canvas = nullptr; @@ -72,6 +74,7 @@ public: RendererMeshStorage *get_mesh_storage() { return mesh_storage; } RendererParticlesStorage *get_particles_storage() { return particles_storage; } RendererTextureStorage *get_texture_storage() { return texture_storage; } + RendererGI *get_gi() { return gi; } RendererStorage *get_storage() { return storage; } RendererCanvasRender *get_canvas() { return canvas; } RendererSceneRender *get_scene() { return scene; } diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 3fe0ae4876..33c7b9bf32 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -491,7 +491,7 @@ void RasterizerSceneGLES3::_geometry_instance_update(GeometryInstance *p_geometr } } - ginstance->instance_count = 1; + ginstance->instance_count = -1; } break; @@ -1923,11 +1923,11 @@ void RasterizerSceneGLES3::render_scene(RID p_render_buffers, const CameraData * render_data.cam_transform = p_camera_data->main_transform; render_data.inv_cam_transform = render_data.cam_transform.affine_inverse(); render_data.cam_projection = p_camera_data->main_projection; - render_data.view_projection[0] = p_camera_data->main_projection; render_data.cam_orthogonal = p_camera_data->is_orthogonal; render_data.view_count = p_camera_data->view_count; for (uint32_t v = 0; v < p_camera_data->view_count; v++) { + render_data.view_eye_offset[v] = p_camera_data->view_offset[v].origin; render_data.view_projection[v] = p_camera_data->view_projection[v]; } @@ -2200,6 +2200,7 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, GLES3::SceneMaterialData *prev_material_data = nullptr; GLES3::SceneShaderData *prev_shader = nullptr; GeometryInstanceGLES3 *prev_inst = nullptr; + SceneShaderGLES3::ShaderVariant prev_variant = SceneShaderGLES3::ShaderVariant::MODE_COLOR; SceneShaderGLES3::ShaderVariant shader_variant = SceneShaderGLES3::MODE_COLOR; // Assigned to silence wrong -Wmaybe-initialized. @@ -2386,12 +2387,11 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, prev_vertex_array_gl = vertex_array_gl; } - bool use_index_buffer = false; + bool use_index_buffer = index_array_gl != 0; if (prev_index_array_gl != index_array_gl) { if (index_array_gl != 0) { // Bind index each time so we can use LODs glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_array_gl); - use_index_buffer = true; } prev_index_array_gl = index_array_gl; } @@ -2406,8 +2406,13 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, prev_material_data = material_data; } - if (prev_shader != shader) { - material_storage->shaders.scene_shader.version_bind_shader(shader->version, shader_variant); + SceneShaderGLES3::ShaderVariant instance_variant = shader_variant; + if (inst->instance_count > 0) { + instance_variant = SceneShaderGLES3::ShaderVariant(1 + int(shader_variant)); + } + + if (prev_shader != shader || prev_variant != instance_variant) { + material_storage->shaders.scene_shader.version_bind_shader(shader->version, instance_variant); float opaque_prepass_threshold = 0.0; if (p_pass_mode == PASS_MODE_DEPTH) { opaque_prepass_threshold = 0.99; @@ -2415,33 +2420,69 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, opaque_prepass_threshold = 0.1; } - material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OPAQUE_PREPASS_THRESHOLD, opaque_prepass_threshold, shader->version, shader_variant); + material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OPAQUE_PREPASS_THRESHOLD, opaque_prepass_threshold, shader->version, instance_variant); prev_shader = shader; + prev_variant = instance_variant; } - if (prev_inst != inst) { + if (prev_inst != inst || prev_shader != shader || prev_variant != instance_variant) { // Rebind the light indices. - material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OMNI_LIGHT_COUNT, inst->omni_light_count, shader->version, shader_variant); - material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::SPOT_LIGHT_COUNT, inst->spot_light_count, shader->version, shader_variant); + material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OMNI_LIGHT_COUNT, inst->omni_light_count, shader->version, instance_variant); + material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::SPOT_LIGHT_COUNT, inst->spot_light_count, shader->version, instance_variant); if (inst->omni_light_count) { - glUniform1uiv(material_storage->shaders.scene_shader.version_get_uniform(SceneShaderGLES3::OMNI_LIGHT_INDICES, shader->version, shader_variant), inst->omni_light_count, inst->omni_light_gl_cache.ptr()); + glUniform1uiv(material_storage->shaders.scene_shader.version_get_uniform(SceneShaderGLES3::OMNI_LIGHT_INDICES, shader->version, instance_variant), inst->omni_light_count, inst->omni_light_gl_cache.ptr()); } if (inst->spot_light_count) { - glUniform1uiv(material_storage->shaders.scene_shader.version_get_uniform(SceneShaderGLES3::SPOT_LIGHT_INDICES, shader->version, shader_variant), inst->spot_light_count, inst->spot_light_gl_cache.ptr()); + glUniform1uiv(material_storage->shaders.scene_shader.version_get_uniform(SceneShaderGLES3::SPOT_LIGHT_INDICES, shader->version, instance_variant), inst->spot_light_count, inst->spot_light_gl_cache.ptr()); } prev_inst = inst; } - material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::WORLD_TRANSFORM, world_transform, shader->version, shader_variant); - - if (use_index_buffer) { - glDrawElements(primitive_gl, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface), mesh_storage->mesh_surface_get_index_type(mesh_surface), 0); + material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::WORLD_TRANSFORM, world_transform, shader->version, instance_variant); + if (inst->instance_count > 0) { + // Using MultiMesh. + // Bind instance buffers. + + GLuint multimesh_buffer = mesh_storage->multimesh_get_gl_buffer(inst->data->base); + glBindBuffer(GL_ARRAY_BUFFER, multimesh_buffer); + uint32_t multimesh_stride = mesh_storage->multimesh_get_stride(inst->data->base); + glEnableVertexAttribArray(12); + glVertexAttribPointer(12, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(0)); + glVertexAttribDivisor(12, 1); + glEnableVertexAttribArray(13); + glVertexAttribPointer(13, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(4 * 4)); + glVertexAttribDivisor(13, 1); + glEnableVertexAttribArray(14); + glVertexAttribPointer(14, 4, GL_FLOAT, GL_FALSE, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(4 * 8)); + glVertexAttribDivisor(14, 1); + + if (mesh_storage->multimesh_uses_colors(inst->data->base) || mesh_storage->multimesh_uses_custom_data(inst->data->base)) { + glEnableVertexAttribArray(15); + glVertexAttribIPointer(15, 4, GL_UNSIGNED_INT, multimesh_stride * sizeof(float), CAST_INT_TO_UCHAR_PTR(mesh_storage->multimesh_get_color_offset(inst->data->base) * sizeof(float))); + glVertexAttribDivisor(15, 1); + } + if (use_index_buffer) { + glDrawElementsInstanced(primitive_gl, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface), mesh_storage->mesh_surface_get_index_type(mesh_surface), 0, inst->instance_count); + } else { + glDrawArraysInstanced(primitive_gl, 0, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface), inst->instance_count); + } } else { - glDrawArrays(primitive_gl, 0, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface)); + // Using regular Mesh. + if (use_index_buffer) { + glDrawElements(primitive_gl, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface), mesh_storage->mesh_surface_get_index_type(mesh_surface), 0); + } else { + glDrawArrays(primitive_gl, 0, mesh_storage->mesh_surface_get_vertices_drawn_count(mesh_surface)); + } + } + if (inst->instance_count > 0) { + glDisableVertexAttribArray(12); + glDisableVertexAttribArray(13); + glDisableVertexAttribArray(14); + glDisableVertexAttribArray(15); } } } @@ -2811,6 +2852,9 @@ void sky() { #ifdef GLES_OVER_GL glEnable(_EXT_TEXTURE_CUBE_MAP_SEAMLESS); #endif + + // MultiMesh may read from color when color is disabled, so make sure that the color defaults to white instead of black; + glVertexAttrib4f(RS::ARRAY_COLOR, 1.0, 1.0, 1.0, 1.0); } RasterizerSceneGLES3::~RasterizerSceneGLES3() { diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index f76861bc90..4757a3f161 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -100,6 +100,7 @@ struct RenderDataGLES3 { // For stereo rendering uint32_t view_count = 1; + Vector3 view_eye_offset[RendererSceneRender::MAX_RENDER_VIEWS]; CameraMatrix view_projection[RendererSceneRender::MAX_RENDER_VIEWS]; float z_near = 0.0; @@ -277,7 +278,7 @@ private: int32_t shader_parameters_offset = -1; uint32_t layer_mask = 1; - uint32_t instance_count = 0; + int32_t instance_count = 0; RID mesh_instance; bool can_sdfgi = false; diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 012cda953c..3b80d88666 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -38,6 +38,8 @@ #include "rasterizer_scene_gles3.h" #include "servers/rendering/shader_language.h" +/* MISC */ + void RasterizerStorageGLES3::base_update_dependency(RID p_base, DependencyTracker *p_instance) { if (GLES3::MeshStorage::get_singleton()->owns_mesh(p_base)) { GLES3::Mesh *mesh = GLES3::MeshStorage::get_singleton()->get_mesh(p_base); @@ -54,104 +56,27 @@ void RasterizerStorageGLES3::base_update_dependency(RID p_base, DependencyTracke } } -/* VOXEL GI API */ - -RID RasterizerStorageGLES3::voxel_gi_allocate() { - return RID(); -} - -void RasterizerStorageGLES3::voxel_gi_initialize(RID p_rid) { -} - -void RasterizerStorageGLES3::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) { -} - -AABB RasterizerStorageGLES3::voxel_gi_get_bounds(RID p_voxel_gi) const { - return AABB(); -} - -Vector3i RasterizerStorageGLES3::voxel_gi_get_octree_size(RID p_voxel_gi) const { - return Vector3i(); -} - -Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_octree_cells(RID p_voxel_gi) const { - return Vector<uint8_t>(); -} - -Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_data_cells(RID p_voxel_gi) const { - return Vector<uint8_t>(); -} - -Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_distance_field(RID p_voxel_gi) const { - return Vector<uint8_t>(); -} - -Vector<int> RasterizerStorageGLES3::voxel_gi_get_level_counts(RID p_voxel_gi) const { - return Vector<int>(); -} - -Transform3D RasterizerStorageGLES3::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const { - return Transform3D(); -} - -void RasterizerStorageGLES3::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) { -} - -float RasterizerStorageGLES3::voxel_gi_get_dynamic_range(RID p_voxel_gi) const { - return 0; -} - -void RasterizerStorageGLES3::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) { -} - -float RasterizerStorageGLES3::voxel_gi_get_propagation(RID p_voxel_gi) const { - return 0; -} - -void RasterizerStorageGLES3::voxel_gi_set_energy(RID p_voxel_gi, float p_range) { -} - -float RasterizerStorageGLES3::voxel_gi_get_energy(RID p_voxel_gi) const { - return 0.0; -} - -void RasterizerStorageGLES3::voxel_gi_set_bias(RID p_voxel_gi, float p_range) { -} - -float RasterizerStorageGLES3::voxel_gi_get_bias(RID p_voxel_gi) const { - return 0.0; -} - -void RasterizerStorageGLES3::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) { -} - -float RasterizerStorageGLES3::voxel_gi_get_normal_bias(RID p_voxel_gi) const { - return 0.0; -} - -void RasterizerStorageGLES3::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) { -} - -bool RasterizerStorageGLES3::voxel_gi_is_interior(RID p_voxel_gi) const { - return false; -} +Vector<uint8_t> RasterizerStorageGLES3::buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size) { + Vector<uint8_t> ret; + ret.resize(p_buffer_size); + glBindBuffer(p_target, p_buffer); -void RasterizerStorageGLES3::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) { -} - -bool RasterizerStorageGLES3::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const { - return false; -} - -void RasterizerStorageGLES3::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { -} - -float RasterizerStorageGLES3::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { - return 0; -} - -uint32_t RasterizerStorageGLES3::voxel_gi_get_version(RID p_voxel_gi) { - return 0; +#if defined(__EMSCRIPTEN__) + { + uint8_t *w = ret.ptrw(); + glGetBufferSubData(p_target, 0, p_buffer_size, w); + } +#else + void *data = glMapBufferRange(p_target, 0, p_buffer_size, GL_MAP_READ_BIT); + ERR_FAIL_NULL_V(data, Vector<uint8_t>()); + { + uint8_t *w = ret.ptrw(); + memcpy(w, data, p_buffer_size); + } + glUnmapBuffer(p_target); +#endif + glBindBuffer(p_target, 0); + return ret; } /* OCCLUDER */ diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h index 7ac3db4537..c42efbce19 100644 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ b/drivers/gles3/rasterizer_storage_gles3.h @@ -98,6 +98,9 @@ public: } } + // Buffer size is specified in bytes + static Vector<uint8_t> buffer_get_data(GLenum p_target, GLuint p_buffer, uint32_t p_buffer_size); + struct Resources { GLuint mipmap_blur_fbo; GLuint mipmap_blur_color; @@ -151,47 +154,6 @@ public: public: virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override; - /* VOXEL GI API */ - - RID voxel_gi_allocate() override; - void voxel_gi_initialize(RID p_rid) override; - void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override; - - AABB voxel_gi_get_bounds(RID p_voxel_gi) const override; - Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override; - Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override; - Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override; - Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override; - - Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override; - Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override; - - void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override; - float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override; - - void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override; - float voxel_gi_get_propagation(RID p_voxel_gi) const override; - - void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override; - float voxel_gi_get_energy(RID p_voxel_gi) const override; - - void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override; - float voxel_gi_get_bias(RID p_voxel_gi) const override; - - void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override; - float voxel_gi_get_normal_bias(RID p_voxel_gi) const override; - - void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override; - bool voxel_gi_is_interior(RID p_voxel_gi) const override; - - void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override; - bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override; - - void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override; - float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override; - - uint32_t voxel_gi_get_version(RID p_voxel_gi) override; - /* OCCLUDER */ void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices); @@ -295,28 +257,10 @@ public: return String(); } - //bool validate_framebuffer(); // Validate currently bound framebuffer, does not touch global state - String get_framebuffer_error(GLenum p_status); - RasterizerStorageGLES3(); ~RasterizerStorageGLES3(); }; -inline String RasterizerStorageGLES3::get_framebuffer_error(GLenum p_status) { -#if defined(DEBUG_ENABLED) && defined(GLES_OVER_GL) - if (p_status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) { - return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; - } else if (p_status == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) { - return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; - } else if (p_status == GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER) { - return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"; - } else if (p_status == GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER) { - return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"; - } -#endif - return itos(p_status); -} - #endif // GLES3_ENABLED #endif // RASTERIZER_STORAGE_OPENGL_H diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 9c426dd3ef..4df818cd4c 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -23,10 +23,9 @@ layout(location = 11) in vec4 weight_attrib; #ifdef USE_INSTANCING -layout(location = 5) in highp vec4 instance_xform0; -layout(location = 6) in highp vec4 instance_xform1; -layout(location = 7) in lowp vec4 instance_color; -layout(location = 8) in highp vec4 instance_custom_data; +layout(location = 1) in highp vec4 instance_xform0; +layout(location = 2) in highp vec4 instance_xform1; +layout(location = 5) in highp uvec4 instance_color_custom_data; // Color packed into xy, custom_data packed into zw for compatibility with 3D #endif @@ -98,8 +97,9 @@ void main() { vec4 bone_weights = weight_attrib; #ifdef USE_INSTANCING + vec4 instance_color = vec4(unpackHalf2x16(instance_color_custom_data.x), unpackHalf2x16(instance_color_custom_data.y)); color *= instance_color; - instance_custom = instance_custom_data; + instance_custom = vec4(unpackHalf2x16(instance_color_custom_data.z), unpackHalf2x16(instance_color_custom_data.w)); #endif #else diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index fbea4bdbe4..4f2be8bf60 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -2,8 +2,11 @@ #[modes] mode_color = #define BASE_PASS +mode_color_instancing = #define BASE_PASS \n#define USE_INSTANCING mode_additive = #define USE_ADDITIVE_LIGHTING +mode_additive_instancing = #define USE_ADDITIVE_LIGHTING \n#define USE_INSTANCING mode_depth = #define MODE_RENDER_DEPTH +mode_depth_instancing = #define MODE_RENDER_DEPTH \n#define USE_INSTANCING #[specializations] @@ -43,8 +46,6 @@ ARRAY_CUSTOM2 = 8, ARRAY_CUSTOM3 = 9, ARRAY_BONES = 10, // RGBA16UI (x2 if 8 weights) ARRAY_WEIGHTS = 11, // RGBA16UNORM (x2 if 8 weights) -ARRAY_INDEX = 12, // 16 or 32 bits depending on length > 0xFFFF. -ARRAY_MAX = 13 */ /* INPUT ATTRIBS */ @@ -96,6 +97,13 @@ layout(location = 10) in uvec4 bone_attrib; layout(location = 11) in vec4 weight_attrib; #endif +#ifdef USE_INSTANCING +layout(location = 12) in highp vec4 instance_xform0; +layout(location = 13) in highp vec4 instance_xform1; +layout(location = 14) in highp vec4 instance_xform2; +layout(location = 15) in highp uvec4 instance_color_custom_data; // Color packed into xy, Custom data into zw. +#endif + layout(std140) uniform GlobalVariableData { //ubo:1 vec4 global_variables[MAX_GLOBAL_VARIABLES]; }; @@ -195,6 +203,10 @@ void main() { highp vec3 vertex = vertex_attrib; highp mat4 model_matrix = world_transform; +#ifdef USE_INSTANCING + highp mat4 m = mat4(instance_xform0, instance_xform1, instance_xform2, vec4(0.0, 0.0, 0.0, 1.0)); + model_matrix = model_matrix * transpose(m); +#endif #ifdef NORMAL_USED vec3 normal = normal_attrib * 2.0 - 1.0; @@ -209,6 +221,10 @@ void main() { #if defined(COLOR_USED) color_interp = color_attrib; +#ifdef USE_INSTANCING + vec4 instance_color = vec4(unpackHalf2x16(instance_color_custom_data.x), unpackHalf2x16(instance_color_custom_data.y)); + color_interp *= instance_color; +#endif #endif #if defined(UV_USED) @@ -229,7 +245,11 @@ void main() { highp mat4 projection_matrix = scene_data.projection_matrix; highp mat4 inv_projection_matrix = scene_data.inv_projection_matrix; +#ifdef USE_INSTANCING + vec4 instance_custom = vec4(unpackHalf2x16(instance_color_custom_data.z), unpackHalf2x16(instance_color_custom_data.w)); +#else vec4 instance_custom = vec4(0.0); +#endif // Using world coordinates #if !defined(SKIP_TRANSFORM_USED) && defined(VERTEX_WORLD_COORDS_USED) diff --git a/drivers/gles3/storage/mesh_storage.cpp b/drivers/gles3/storage/mesh_storage.cpp index 822be25337..5aa82bfcc1 100644 --- a/drivers/gles3/storage/mesh_storage.cpp +++ b/drivers/gles3/storage/mesh_storage.cpp @@ -31,6 +31,7 @@ #ifdef GLES3_ENABLED #include "mesh_storage.h" +#include "../rasterizer_storage_gles3.h" #include "material_storage.h" using namespace GLES3; @@ -230,6 +231,7 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //unbind s->lods[i].edge_length = p_surface.lods[i].edge_length; s->lods[i].index_count = p_surface.lods[i].index_data.size() / (is_index_16 ? 2 : 4); + s->lods[i].index_buffer_size = p_surface.lods[i].index_data.size(); } } } @@ -333,48 +335,10 @@ RS::SurfaceData MeshStorage::mesh_get_surface(RID p_mesh, int p_surface) const { RS::SurfaceData sd; sd.format = s.format; - { - Vector<uint8_t> ret; - ret.resize(s.vertex_buffer_size); - glBindBuffer(GL_ARRAY_BUFFER, s.vertex_buffer); - -#if defined(__EMSCRIPTEN__) - { - uint8_t *w = ret.ptrw(); - glGetBufferSubData(GL_ARRAY_BUFFER, 0, s.vertex_buffer_size, w); - } -#else - void *data = glMapBufferRange(GL_ARRAY_BUFFER, 0, s.vertex_buffer_size, GL_MAP_READ_BIT); - ERR_FAIL_NULL_V(data, RS::SurfaceData()); - { - uint8_t *w = ret.ptrw(); - memcpy(w, data, s.vertex_buffer_size); - } - glUnmapBuffer(GL_ARRAY_BUFFER); -#endif - sd.vertex_data = ret; - } + sd.vertex_data = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, s.vertex_buffer, s.vertex_buffer_size); if (s.attribute_buffer != 0) { - Vector<uint8_t> ret; - ret.resize(s.attribute_buffer_size); - glBindBuffer(GL_ARRAY_BUFFER, s.attribute_buffer); - -#if defined(__EMSCRIPTEN__) - { - uint8_t *w = ret.ptrw(); - glGetBufferSubData(GL_ARRAY_BUFFER, 0, s.attribute_buffer_size, w); - } -#else - void *data = glMapBufferRange(GL_ARRAY_BUFFER, 0, s.attribute_buffer_size, GL_MAP_READ_BIT); - ERR_FAIL_NULL_V(data, RS::SurfaceData()); - { - uint8_t *w = ret.ptrw(); - memcpy(w, data, s.attribute_buffer_size); - } - glUnmapBuffer(GL_ARRAY_BUFFER); -#endif - sd.attribute_data = ret; + sd.attribute_data = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, s.attribute_buffer, s.attribute_buffer_size); } sd.vertex_count = s.vertex_count; @@ -382,33 +346,14 @@ RS::SurfaceData MeshStorage::mesh_get_surface(RID p_mesh, int p_surface) const { sd.primitive = s.primitive; if (sd.index_count) { - Vector<uint8_t> ret; - ret.resize(s.index_buffer_size); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, s.index_buffer); - -#if defined(__EMSCRIPTEN__) - { - uint8_t *w = ret.ptrw(); - glGetBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, s.index_buffer_size, w); - } -#else - void *data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, 0, s.index_buffer_size, GL_MAP_READ_BIT); - ERR_FAIL_NULL_V(data, RS::SurfaceData()); - { - uint8_t *w = ret.ptrw(); - memcpy(w, data, s.index_buffer_size); - } - glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); -#endif - sd.index_data = ret; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + sd.index_data = RasterizerStorageGLES3::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.index_buffer, s.index_buffer_size); } sd.aabb = s.aabb; for (uint32_t i = 0; i < s.lod_count; i++) { RS::SurfaceData::LOD lod; lod.edge_length = s.lods[i].edge_length; - //lod.index_data = RD::get_singleton()->buffer_get_data(s.lods[i].index_buffer); + lod.index_data = RasterizerStorageGLES3::buffer_get_data(GL_ELEMENT_ARRAY_BUFFER, s.lods[i].index_buffer, s.lods[i].index_buffer_size); sd.lods.push_back(lod); } @@ -723,17 +668,6 @@ void MeshStorage::_mesh_surface_generate_version_for_input_mask(Mesh::Surface::V for (int i = 0; i < RS::ARRAY_INDEX; i++) { if (!attribs[i].enabled) { glDisableVertexAttribArray(i); - if (s->format & RS::ARRAY_FLAG_USE_2D_VERTICES) { - if (i == RS::ARRAY_COLOR) { - glVertexAttrib4f(i, 1, 1, 1, 1); - } else if (i == RS::ARRAY_TEX_UV) { - glVertexAttrib2f(i, 1, 1); - } else if (i == RS::ARRAY_BONES) { - glVertexAttrib4f(i, 1, 1, 1, 1); - } else if (i == RS::ARRAY_WEIGHTS) { - glVertexAttrib4f(i, 1, 1, 1, 1); - } - } continue; } if (i <= RS::ARRAY_TANGENT) { @@ -949,8 +883,8 @@ void MeshStorage::multimesh_allocate_data(RID p_multimesh, int p_instances, RS:: multimesh->uses_colors = p_use_colors; multimesh->color_offset_cache = p_transform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12; multimesh->uses_custom_data = p_use_custom_data; - multimesh->custom_data_offset_cache = multimesh->color_offset_cache + (p_use_colors ? 4 : 0); - multimesh->stride_cache = multimesh->custom_data_offset_cache + (p_use_custom_data ? 4 : 0); + multimesh->custom_data_offset_cache = multimesh->color_offset_cache + (p_use_colors ? 2 : 0); + multimesh->stride_cache = multimesh->custom_data_offset_cache + (p_use_custom_data ? 2 : 0); multimesh->buffer_set = false; multimesh->data_cache = Vector<float>(); @@ -977,7 +911,7 @@ int MeshStorage::multimesh_get_instance_count(RID p_multimesh) const { void MeshStorage::multimesh_set_mesh(RID p_multimesh, RID p_mesh) { MultiMesh *multimesh = multimesh_owner.get_or_null(p_multimesh); ERR_FAIL_COND(!multimesh); - if (multimesh->mesh == p_mesh) { + if (multimesh->mesh == p_mesh || p_mesh.is_null()) { return; } multimesh->mesh = p_mesh; @@ -990,13 +924,12 @@ void MeshStorage::multimesh_set_mesh(RID p_multimesh, RID p_mesh) { //we have a data cache, just mark it dirty _multimesh_mark_all_dirty(multimesh, false, true); } else if (multimesh->instances) { - //need to re-create AABB unfortunately, calling this has a penalty + // Need to re-create AABB. Unfortunately, calling this has a penalty. if (multimesh->buffer_set) { - // TODO add a function to RasterizerStorage to get data from a buffer - //Vector<uint8_t> buffer = RD::get_singleton()->buffer_get_data(multimesh->buffer); - //const uint8_t *r = buffer.ptr(); - //const float *data = (const float *)r; - //_multimesh_re_create_aabb(multimesh, data, multimesh->instances); + Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); + const uint8_t *r = buffer.ptr(); + const float *data = (const float *)r; + _multimesh_re_create_aabb(multimesh, data, multimesh->instances); } } @@ -1017,10 +950,11 @@ void MeshStorage::_multimesh_make_local(MultiMesh *multimesh) const { float *w = multimesh->data_cache.ptrw(); if (multimesh->buffer_set) { - //Vector<uint8_t> buffer = RD::get_singleton()->buffer_get_data(multimesh->buffer); + Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); + { - // const uint8_t *r = buffer.ptr(); - // memcpy(w, r, buffer.size()); + const uint8_t *r = buffer.ptr(); + memcpy(w, r, buffer.size()); } } else { memset(w, 0, (size_t)multimesh->instances * multimesh->stride_cache * sizeof(float)); @@ -1186,14 +1120,12 @@ void MeshStorage::multimesh_instance_set_color(RID p_multimesh, int p_index, con _multimesh_make_local(multimesh); { + // Colors are packed into 2 floats. float *w = multimesh->data_cache.ptrw(); float *dataptr = w + p_index * multimesh->stride_cache + multimesh->color_offset_cache; - - dataptr[0] = p_color.r; - dataptr[1] = p_color.g; - dataptr[2] = p_color.b; - dataptr[3] = p_color.a; + uint16_t val[4] = { Math::make_half_float(p_color.r), Math::make_half_float(p_color.g), Math::make_half_float(p_color.b), Math::make_half_float(p_color.a) }; + memcpy(dataptr, val, 2 * 4); } _multimesh_mark_dirty(multimesh, p_index, false); @@ -1211,11 +1143,8 @@ void MeshStorage::multimesh_instance_set_custom_data(RID p_multimesh, int p_inde float *w = multimesh->data_cache.ptrw(); float *dataptr = w + p_index * multimesh->stride_cache + multimesh->custom_data_offset_cache; - - dataptr[0] = p_color.r; - dataptr[1] = p_color.g; - dataptr[2] = p_color.b; - dataptr[3] = p_color.a; + uint16_t val[4] = { Math::make_half_float(p_color.r), Math::make_half_float(p_color.g), Math::make_half_float(p_color.b), Math::make_half_float(p_color.a) }; + memcpy(dataptr, val, 2 * 4); } _multimesh_mark_dirty(multimesh, p_index, false); @@ -1306,11 +1235,12 @@ Color MeshStorage::multimesh_instance_get_color(RID p_multimesh, int p_index) co const float *r = multimesh->data_cache.ptr(); const float *dataptr = r + p_index * multimesh->stride_cache + multimesh->color_offset_cache; - - c.r = dataptr[0]; - c.g = dataptr[1]; - c.b = dataptr[2]; - c.a = dataptr[3]; + uint16_t raw_data[4]; + memcpy(raw_data, dataptr, 2 * 4); + c.r = Math::half_to_float(raw_data[0]); + c.g = Math::half_to_float(raw_data[1]); + c.b = Math::half_to_float(raw_data[2]); + c.a = Math::half_to_float(raw_data[3]); } return c; @@ -1329,11 +1259,12 @@ Color MeshStorage::multimesh_instance_get_custom_data(RID p_multimesh, int p_ind const float *r = multimesh->data_cache.ptr(); const float *dataptr = r + p_index * multimesh->stride_cache + multimesh->custom_data_offset_cache; - - c.r = dataptr[0]; - c.g = dataptr[1]; - c.b = dataptr[2]; - c.a = dataptr[3]; + uint16_t raw_data[4]; + memcpy(raw_data, dataptr, 2 * 4); + c.r = Math::half_to_float(raw_data[0]); + c.g = Math::half_to_float(raw_data[1]); + c.b = Math::half_to_float(raw_data[2]); + c.a = Math::half_to_float(raw_data[3]); } return c; @@ -1342,19 +1273,66 @@ Color MeshStorage::multimesh_instance_get_custom_data(RID p_multimesh, int p_ind void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) { MultiMesh *multimesh = multimesh_owner.get_or_null(p_multimesh); ERR_FAIL_COND(!multimesh); - ERR_FAIL_COND(p_buffer.size() != (multimesh->instances * (int)multimesh->stride_cache)); - { + if (multimesh->uses_colors || multimesh->uses_custom_data) { + // Color and custom need to be packed so copy buffer to data_cache and pack. + + _multimesh_make_local(multimesh); + multimesh->data_cache = p_buffer; + + float *w = multimesh->data_cache.ptrw(); + uint32_t old_stride = multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12; + old_stride += multimesh->uses_colors ? 4 : 0; + old_stride += multimesh->uses_custom_data ? 4 : 0; + for (int i = 0; i < multimesh->instances; i++) { + { + float *dataptr = w + i * old_stride; + float *newptr = w + i * multimesh->stride_cache; + float vals[8] = { dataptr[0], dataptr[1], dataptr[2], dataptr[3], dataptr[4], dataptr[5], dataptr[6], dataptr[7] }; + memcpy(newptr, vals, 8 * 4); + } + + if (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_3D) { + float *dataptr = w + i * old_stride + 8; + float *newptr = w + i * multimesh->stride_cache + 8; + float vals[8] = { dataptr[0], dataptr[1], dataptr[2], dataptr[3] }; + memcpy(newptr, vals, 4 * 4); + } + + if (multimesh->uses_colors) { + float *dataptr = w + i * old_stride + (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12); + float *newptr = w + i * multimesh->stride_cache + multimesh->color_offset_cache; + uint16_t val[4] = { Math::make_half_float(dataptr[0]), Math::make_half_float(dataptr[1]), Math::make_half_float(dataptr[2]), Math::make_half_float(dataptr[3]) }; + memcpy(newptr, val, 2 * 4); + } + if (multimesh->uses_custom_data) { + float *dataptr = w + i * old_stride + (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12) + (multimesh->uses_colors ? 4 : 0); + float *newptr = w + i * multimesh->stride_cache + multimesh->custom_data_offset_cache; + uint16_t val[4] = { Math::make_half_float(dataptr[0]), Math::make_half_float(dataptr[1]), Math::make_half_float(dataptr[2]), Math::make_half_float(dataptr[3]) }; + memcpy(newptr, val, 2 * 4); + } + } + + multimesh->data_cache.resize(multimesh->instances * (int)multimesh->stride_cache); + const float *r = multimesh->data_cache.ptr(); + glBindBuffer(GL_ARRAY_BUFFER, multimesh->buffer); + glBufferData(GL_ARRAY_BUFFER, multimesh->data_cache.size() * sizeof(float), r, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + } else { + // Only Transform is being used, so we can upload directly. + ERR_FAIL_COND(p_buffer.size() != (multimesh->instances * (int)multimesh->stride_cache)); const float *r = p_buffer.ptr(); glBindBuffer(GL_ARRAY_BUFFER, multimesh->buffer); glBufferData(GL_ARRAY_BUFFER, p_buffer.size() * sizeof(float), r, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); - multimesh->buffer_set = true; } - if (multimesh->data_cache.size()) { + multimesh->buffer_set = true; + + if (multimesh->data_cache.size() || multimesh->uses_colors || multimesh->uses_custom_data) { //if we have a data cache, just update it - multimesh->data_cache = p_buffer; + multimesh->data_cache = multimesh->data_cache; { //clear dirty since nothing will be dirty anymore uint32_t data_cache_dirty_region_count = (multimesh->instances - 1) / MULTIMESH_DIRTY_REGION_SIZE + 1; @@ -1367,7 +1345,7 @@ void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_b _multimesh_mark_all_dirty(multimesh, false, true); //update AABB } else if (multimesh->mesh.is_valid()) { //if we have a mesh set, we need to re-generate the AABB from the new data - const float *data = p_buffer.ptr(); + const float *data = multimesh->data_cache.ptr(); _multimesh_re_create_aabb(multimesh, data, multimesh->instances); multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); @@ -1377,22 +1355,71 @@ void MeshStorage::multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_b Vector<float> MeshStorage::multimesh_get_buffer(RID p_multimesh) const { MultiMesh *multimesh = multimesh_owner.get_or_null(p_multimesh); ERR_FAIL_COND_V(!multimesh, Vector<float>()); + Vector<float> ret; if (multimesh->buffer == 0) { return Vector<float>(); } else if (multimesh->data_cache.size()) { - return multimesh->data_cache; + ret = multimesh->data_cache; } else { - //get from memory + // Buffer not cached, so fetch from GPU memory. This can be a stalling operation, avoid whenever possible. - //Vector<uint8_t> buffer = RD::get_singleton()->buffer_get_data(multimesh->buffer); - Vector<float> ret; + Vector<uint8_t> buffer = RasterizerStorageGLES3::buffer_get_data(GL_ARRAY_BUFFER, multimesh->buffer, multimesh->instances * multimesh->stride_cache * sizeof(float)); ret.resize(multimesh->instances * multimesh->stride_cache); - //{ - // float *w = ret.ptrw(); - // const uint8_t *r = buffer.ptr(); - // memcpy(w, r, buffer.size()); - //} + { + float *w = ret.ptrw(); + const uint8_t *r = buffer.ptr(); + memcpy(w, r, buffer.size()); + } + } + if (multimesh->uses_colors || multimesh->uses_custom_data) { + // Need to decompress buffer. + uint32_t new_stride = multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12; + new_stride += multimesh->uses_colors ? 4 : 0; + new_stride += multimesh->uses_custom_data ? 4 : 0; + + Vector<float> decompressed; + decompressed.resize(multimesh->instances * (int)new_stride); + float *w = decompressed.ptrw(); + const float *r = ret.ptr(); + for (int i = 0; i < multimesh->instances; i++) { + { + float *newptr = w + i * new_stride; + const float *oldptr = r + i * multimesh->stride_cache; + float vals[8] = { oldptr[0], oldptr[1], oldptr[2], oldptr[3], oldptr[4], oldptr[5], oldptr[6], oldptr[7] }; + memcpy(newptr, vals, 8 * 4); + } + + if (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_3D) { + float *newptr = w + i * new_stride + 8; + const float *oldptr = r + i * multimesh->stride_cache + 8; + float vals[8] = { oldptr[0], oldptr[1], oldptr[2], oldptr[3] }; + memcpy(newptr, vals, 4 * 4); + } + + if (multimesh->uses_colors) { + float *newptr = w + i * new_stride + (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12); + const float *oldptr = r + i * multimesh->stride_cache + multimesh->color_offset_cache; + uint16_t raw_data[4]; + memcpy(raw_data, oldptr, 2 * 4); + newptr[0] = Math::half_to_float(raw_data[0]); + newptr[1] = Math::half_to_float(raw_data[1]); + newptr[2] = Math::half_to_float(raw_data[2]); + newptr[3] = Math::half_to_float(raw_data[3]); + } + if (multimesh->uses_custom_data) { + float *newptr = w + i * new_stride + (multimesh->xform_format == RS::MULTIMESH_TRANSFORM_2D ? 8 : 12) + (multimesh->uses_colors ? 4 : 0); + const float *oldptr = r + i * multimesh->stride_cache + multimesh->custom_data_offset_cache; + uint16_t raw_data[4]; + memcpy(raw_data, oldptr, 2 * 4); + newptr[0] = Math::half_to_float(raw_data[0]); + newptr[1] = Math::half_to_float(raw_data[1]); + newptr[2] = Math::half_to_float(raw_data[2]); + newptr[3] = Math::half_to_float(raw_data[3]); + } + } + return decompressed; + } else { return ret; } } @@ -1439,7 +1466,7 @@ void MeshStorage::_update_dirty_multimeshes() { if (multimesh->data_cache_used_dirty_regions > 32 || multimesh->data_cache_used_dirty_regions > visible_region_count / 2) { // If there too many dirty regions, or represent the majority of regions, just copy all, else transfer cost piles up too much glBindBuffer(GL_ARRAY_BUFFER, multimesh->buffer); - glBufferData(GL_ARRAY_BUFFER, MIN(visible_region_count * region_size, multimesh->instances * (uint32_t)multimesh->stride_cache * (uint32_t)sizeof(float)), data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, MIN(visible_region_count * region_size, multimesh->instances * multimesh->stride_cache * sizeof(float)), data, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); } else { // Not that many regions? update them all @@ -1463,8 +1490,7 @@ void MeshStorage::_update_dirty_multimeshes() { multimesh->data_cache_used_dirty_regions = 0; } - if (multimesh->aabb_dirty) { - //aabb is dirty.. + if (multimesh->aabb_dirty && multimesh->mesh.is_valid()) { _multimesh_re_create_aabb(multimesh, data, visible_instances); multimesh->aabb_dirty = false; multimesh->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); diff --git a/drivers/gles3/storage/mesh_storage.h b/drivers/gles3/storage/mesh_storage.h index 068aa2fe40..3bb7061413 100644 --- a/drivers/gles3/storage/mesh_storage.h +++ b/drivers/gles3/storage/mesh_storage.h @@ -90,6 +90,7 @@ struct Mesh { struct LOD { float edge_length = 0.0; uint32_t index_count = 0; + uint32_t index_buffer_size = 0; GLuint index_buffer; }; diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp index 77aab72d40..99aa0e2442 100644 --- a/drivers/vulkan/rendering_device_vulkan.cpp +++ b/drivers/vulkan/rendering_device_vulkan.cpp @@ -2314,6 +2314,12 @@ RID RenderingDeviceVulkan::texture_create_shared_from_slice(const TextureView &p image_view_create_info.viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY; } + if (p_slice_type == TEXTURE_SLICE_2D) { + texture.type = TEXTURE_TYPE_2D; + } else if (p_slice_type == TEXTURE_SLICE_3D) { + texture.type = TEXTURE_TYPE_3D; + } + if (p_view.format_override == DATA_FORMAT_MAX || p_view.format_override == texture.format) { image_view_create_info.format = vulkan_formats[texture.format]; } else { diff --git a/drivers/vulkan/rendering_device_vulkan.h b/drivers/vulkan/rendering_device_vulkan.h index 903a39b3d0..3b21ee67a1 100644 --- a/drivers/vulkan/rendering_device_vulkan.h +++ b/drivers/vulkan/rendering_device_vulkan.h @@ -457,17 +457,17 @@ class RenderingDeviceVulkan : public RenderingDevice { uint32_t hash() const { int vdc = vertex_formats.size(); - uint32_t h = hash_djb2_one_32(vdc); + uint32_t h = hash_murmur3_one_32(vdc); const VertexAttribute *ptr = vertex_formats.ptr(); for (int i = 0; i < vdc; i++) { const VertexAttribute &vd = ptr[i]; - h = hash_djb2_one_32(vd.location, h); - h = hash_djb2_one_32(vd.offset, h); - h = hash_djb2_one_32(vd.format, h); - h = hash_djb2_one_32(vd.stride, h); - h = hash_djb2_one_32(vd.frequency, h); + h = hash_murmur3_one_32(vd.location, h); + h = hash_murmur3_one_32(vd.offset, h); + h = hash_murmur3_one_32(vd.format, h); + h = hash_murmur3_one_32(vd.stride, h); + h = hash_murmur3_one_32(vd.frequency, h); } - return h; + return hash_fmix32(h); } }; diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index d81d629780..e612130041 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -6239,7 +6239,7 @@ AnimationTrackEditor::AnimationTrackEditor() { info_message->set_text(TTR("Select an AnimationPlayer node to create and edit animations.")); info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); main_panel->add_child(info_message); diff --git a/editor/debugger/debug_adapter/debug_adapter_types.h b/editor/debugger/debug_adapter/debug_adapter_types.h index 4d77b6d51c..fd66905f9b 100644 --- a/editor/debugger/debug_adapter/debug_adapter_types.h +++ b/editor/debugger/debug_adapter/debug_adapter_types.h @@ -220,7 +220,7 @@ struct StackFrame { int column; static uint32_t hash(const StackFrame &p_frame) { - return hash_djb2_one_32(p_frame.id); + return hash_murmur3_one_32(p_frame.id); } bool operator==(const StackFrame &p_other) const { return id == p_other.id; diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index bc28b11a71..e13af59d69 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -103,6 +103,7 @@ ScriptEditorDebugger *EditorDebuggerNode::_add_debugger() { node->connect("remote_object_updated", callable_mp(this, &EditorDebuggerNode::_remote_object_updated), varray(id)); node->connect("remote_object_property_updated", callable_mp(this, &EditorDebuggerNode::_remote_object_property_updated), varray(id)); node->connect("remote_object_requested", callable_mp(this, &EditorDebuggerNode::_remote_object_requested), varray(id)); + node->connect("errors_cleared", callable_mp(this, &EditorDebuggerNode::_update_errors)); if (tabs->get_tab_count() > 0) { get_debugger(0)->clear_style(); @@ -267,40 +268,7 @@ void EditorDebuggerNode::_notification(int p_what) { } server->poll(); - // Errors and warnings - int error_count = 0; - int warning_count = 0; - _for_all(tabs, [&](ScriptEditorDebugger *dbg) { - error_count += dbg->get_error_count(); - warning_count += dbg->get_warning_count(); - }); - - if (error_count != last_error_count || warning_count != last_warning_count) { - _for_all(tabs, [&](ScriptEditorDebugger *dbg) { - dbg->update_tabs(); - }); - - if (error_count == 0 && warning_count == 0) { - debugger_button->set_text(TTR("Debugger")); - debugger_button->remove_theme_color_override("font_color"); - debugger_button->set_icon(Ref<Texture2D>()); - } else { - debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); - if (error_count >= 1 && warning_count >= 1) { - debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons"))); - // Use error color to represent the highest level of severity reported. - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); - } else if (error_count >= 1) { - debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); - } else { - debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))); - debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor"))); - } - } - last_error_count = error_count; - last_warning_count = warning_count; - } + _update_errors(); // Remote scene tree update remote_scene_tree_timeout -= get_process_delta_time(); @@ -361,6 +329,42 @@ void EditorDebuggerNode::_notification(int p_what) { } } +void EditorDebuggerNode::_update_errors() { + int error_count = 0; + int warning_count = 0; + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + error_count += dbg->get_error_count(); + warning_count += dbg->get_warning_count(); + }); + + if (error_count != last_error_count || warning_count != last_warning_count) { + _for_all(tabs, [&](ScriptEditorDebugger *dbg) { + dbg->update_tabs(); + }); + + if (error_count == 0 && warning_count == 0) { + debugger_button->set_text(TTR("Debugger")); + debugger_button->remove_theme_color_override("font_color"); + debugger_button->set_icon(Ref<Texture2D>()); + } else { + debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); + if (error_count >= 1 && warning_count >= 1) { + debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons"))); + // Use error color to represent the highest level of severity reported. + debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); + } else if (error_count >= 1) { + debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); + debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); + } else { + debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))); + debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor"))); + } + } + last_error_count = error_count; + last_warning_count = warning_count; + } +} + void EditorDebuggerNode::_debugger_stopped(int p_id) { ScriptEditorDebugger *dbg = get_debugger(p_id); ERR_FAIL_COND(!dbg); diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h index 87457fc09a..d50cbec291 100644 --- a/editor/debugger/editor_debugger_node.h +++ b/editor/debugger/editor_debugger_node.h @@ -72,7 +72,7 @@ private: static uint32_t hash(const Breakpoint &p_val) { uint32_t h = HashMapHasherDefault::hash(p_val.source); - return hash_djb2_one_32(p_val.line, h); + return hash_murmur3_one_32(p_val.line, h); } bool operator==(const Breakpoint &p_b) const { return (line == p_b.line && source == p_b.source); @@ -116,6 +116,7 @@ private: ScriptEditorDebugger *_add_debugger(); EditorDebuggerRemoteObject *get_inspected_remote_object(); + void _update_errors(); friend class DebuggerEditorPlugin; friend class DebugAdapterParser; diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp index ed451ed68e..764e842539 100644 --- a/editor/debugger/editor_performance_profiler.cpp +++ b/editor/debugger/editor_performance_profiler.cpp @@ -391,7 +391,7 @@ EditorPerformanceProfiler::EditorPerformanceProfiler() { info_message->set_text(TTR("Pick one or more items from the list to display the graph.")); info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); monitor_draw->add_child(info_message); diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 9184846408..c209c67dcb 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -1465,6 +1465,7 @@ void ScriptEditorDebugger::_clear_errors_list() { error_tree->clear(); error_count = 0; warning_count = 0; + emit_signal(SNAME("errors_cleared")); update_tabs(); expand_all_button->set_disabled(true); @@ -1626,6 +1627,7 @@ void ScriptEditorDebugger::_bind_methods() { ADD_SIGNAL(MethodInfo("debug_data", PropertyInfo(Variant::STRING, "msg"), PropertyInfo(Variant::ARRAY, "data"))); ADD_SIGNAL(MethodInfo("set_breakpoint", PropertyInfo("script"), PropertyInfo(Variant::INT, "line"), PropertyInfo(Variant::BOOL, "enabled"))); ADD_SIGNAL(MethodInfo("clear_breakpoints")); + ADD_SIGNAL(MethodInfo("errors_cleared")); } void ScriptEditorDebugger::add_debugger_plugin(const Ref<Script> &p_script) { @@ -1684,7 +1686,7 @@ ScriptEditorDebugger::ScriptEditorDebugger() { reason->set_text(""); hbc->add_child(reason); reason->set_h_size_flags(SIZE_EXPAND_FILL); - reason->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + reason->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); reason->set_max_lines_visible(3); reason->set_mouse_filter(Control::MOUSE_FILTER_PASS); diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index 6fafb2d91a..17aa67cd45 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -213,7 +213,7 @@ EditorAbout::EditorAbout() { Label *tpl_label = memnew(Label); tpl_label->set_h_size_flags(Control::SIZE_EXPAND_FILL); - tpl_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + tpl_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); tpl_label->set_text(TTR("Godot Engine relies on a number of third-party free and open source libraries, all compatible with the terms of its MIT license. The following is an exhaustive list of all such third-party components with their respective copyright statements and license terms.")); tpl_label->set_size(Size2(630, 1) * EDSCALE); license_thirdparty->add_child(tpl_label); diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 13084e2aab..95f72476aa 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -756,7 +756,7 @@ void EditorFileDialog::update_file_list() { item_list->set_icon_mode(ItemList::ICON_MODE_TOP); item_list->set_fixed_column_width(thumbnail_size * 3 / 2); item_list->set_max_text_lines(2); - item_list->set_text_overrun_behavior(TextParagraph::OVERRUN_TRIM_ELLIPSIS); + item_list->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); item_list->set_fixed_icon_size(Size2(thumbnail_size, thumbnail_size)); if (thumbnail_size < 64) { diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 61f8ab1936..bcfc516849 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -553,6 +553,8 @@ void EditorNode::_update_from_settings() { tree->set_debug_collision_contact_color(GLOBAL_GET("debug/shapes/collision/contact_color")); tree->set_debug_navigation_color(GLOBAL_GET("debug/shapes/navigation/geometry_color")); tree->set_debug_navigation_disabled_color(GLOBAL_GET("debug/shapes/navigation/disabled_geometry_color")); + + _update_title(); } void EditorNode::_select_default_main_screen_plugin() { @@ -582,10 +584,7 @@ void EditorNode::_notification(int p_what) { opening_prev = false; } - if (unsaved_cache != (saved_version != editor_data.get_undo_redo().get_version())) { - unsaved_cache = (saved_version != editor_data.get_undo_redo().get_version()); - _update_title(); - } + unsaved_cache = saved_version != editor_data.get_undo_redo().get_version(); if (last_checked_version != editor_data.get_undo_redo().get_version()) { _update_scene_tabs(); @@ -1792,6 +1791,10 @@ void EditorNode::save_scene_list(Vector<String> p_scene_filenames) { void EditorNode::restart_editor() { exiting = true; + if (editor_run.get_status() != EditorRun::STATUS_STOP) { + editor_run.stop(); + } + String to_reopen; if (get_tree()->get_edited_scene_root()) { to_reopen = get_tree()->get_edited_scene_root()->get_scene_file_path(); @@ -2338,6 +2341,20 @@ void EditorNode::_run(bool p_current, const String &p_custom) { return; } + String write_movie_file; + if (write_movie_button->is_pressed()) { + if (p_current && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->has_meta("movie_file")) { + // If the scene file has a movie_file metadata set, use this as file. Quick workaround if you want to have multiple scenes that write to multiple movies. + write_movie_file = get_tree()->get_edited_scene_root()->get_meta("movie_file"); + } else { + write_movie_file = GLOBAL_GET("editor/movie_writer/movie_file"); + } + if (write_movie_file == String()) { + show_accept(TTR("Movie Maker mode is enabled, but no movie file path has been specified.\nA default movie file path can be specified in the project settings under the 'Editor/Movie Writer' category.\nAlternatively, for running single scenes, a 'movie_path' metadata can be added to the root node,\nspecifying the path to a movie file that will be used when recording that scene."), TTR("OK")); + return; + } + } + play_button->set_pressed(false); play_button->set_icon(gui_base->get_theme_icon(SNAME("MainPlay"), SNAME("EditorIcons"))); play_scene_button->set_pressed(false); @@ -2401,7 +2418,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) { } EditorDebuggerNode::get_singleton()->start(); - Error error = editor_run.run(run_filename); + Error error = editor_run.run(run_filename, write_movie_file); if (error != OK) { EditorDebuggerNode::get_singleton()->stop(); show_accept(TTR("Could not start subprocess(es)!"), TTR("OK")); @@ -2784,6 +2801,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case RUN_SETTINGS: { project_settings_editor->popup_project_settings(); } break; + case RUN_WRITE_MOVIE: { + _update_write_movie_icon(); + } break; case FILE_INSTALL_ANDROID_SOURCE: { if (p_confirmed) { export_template_manager->install_android_template(); @@ -3299,33 +3319,39 @@ void EditorNode::_update_addon_config() { } void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, bool p_config_changed) { - ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(p_addon)); - ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(p_addon)); + String addon_path = p_addon; + + if (!addon_path.begins_with("res://")) { + addon_path = "res://addons/" + addon_path + "/plugin.cfg"; + } + + ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(addon_path)); + ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(addon_path)); if (!p_enabled) { - EditorPlugin *addon = addon_name_to_plugin[p_addon]; + EditorPlugin *addon = addon_name_to_plugin[addon_path]; remove_editor_plugin(addon, p_config_changed); memdelete(addon); - addon_name_to_plugin.erase(p_addon); + addon_name_to_plugin.erase(addon_path); _update_addon_config(); return; } Ref<ConfigFile> cf; cf.instantiate(); - if (!DirAccess::exists(p_addon.get_base_dir())) { - _remove_plugin_from_enabled(p_addon); - WARN_PRINT("Addon '" + p_addon + "' failed to load. No directory found. Removing from enabled plugins."); + if (!DirAccess::exists(addon_path.get_base_dir())) { + _remove_plugin_from_enabled(addon_path); + WARN_PRINT("Addon '" + addon_path + "' failed to load. No directory found. Removing from enabled plugins."); return; } - Error err = cf->load(p_addon); + Error err = cf->load(addon_path); if (err != OK) { - show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), p_addon)); + show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), addon_path)); return; } if (!cf->has_section_key("plugin", "script")) { - show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), p_addon)); + show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), addon_path)); return; } @@ -3334,7 +3360,7 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, // Only try to load the script if it has a name. Else, the plugin has no init script. if (script_path.length() > 0) { - script_path = p_addon.get_base_dir().plus_file(script_path); + script_path = addon_path.get_base_dir().plus_file(script_path); script = ResourceLoader::load(script_path); if (script.is_null()) { @@ -3344,8 +3370,8 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, // Errors in the script cause the base_type to be an empty StringName. if (script->get_instance_base_type() == StringName()) { - show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, p_addon)); - _remove_plugin_from_enabled(p_addon); + show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, addon_path)); + _remove_plugin_from_enabled(addon_path); return; } @@ -3363,14 +3389,18 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, EditorPlugin *ep = memnew(EditorPlugin); ep->set_script(script); - addon_name_to_plugin[p_addon] = ep; + addon_name_to_plugin[addon_path] = ep; add_editor_plugin(ep, p_config_changed); _update_addon_config(); } bool EditorNode::is_addon_plugin_enabled(const String &p_addon) const { - return addon_name_to_plugin.has(p_addon); + if (p_addon.begins_with("res://")) { + return addon_name_to_plugin.has(p_addon); + } + + return addon_name_to_plugin.has("res://addons/" + p_addon + "/plugin.cfg"); } void EditorNode::_remove_edited_scene(bool p_change_tab) { @@ -4863,7 +4893,7 @@ bool EditorNode::has_scenes_in_session() { bool EditorNode::ensure_main_scene(bool p_from_native) { pick_main_scene->set_meta("from_native", p_from_native); // Whether from play button or native run. - String main_scene = GLOBAL_DEF("application/run/main_scene", ""); + String main_scene = GLOBAL_DEF_BASIC("application/run/main_scene", ""); if (main_scene.is_empty()) { current_menu_option = -1; @@ -4929,12 +4959,20 @@ bool EditorNode::is_run_playing() const { String EditorNode::get_run_playing_scene() const { String run_filename = editor_run.get_running_scene(); if (run_filename.is_empty() && is_run_playing()) { - run_filename = GLOBAL_DEF("application/run/main_scene", ""); // Must be the main scene then. + run_filename = GLOBAL_DEF_BASIC("application/run/main_scene", ""); // Must be the main scene then. } return run_filename; } +void EditorNode::_update_write_movie_icon() { + if (write_movie_button->is_pressed()) { + write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWriteEnabled"), SNAME("EditorIcons"))); + } else { + write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWrite"), SNAME("EditorIcons"))); + } +} + void EditorNode::_immediate_dialog_confirmed() { immediate_dialog_confirmed = true; } @@ -6690,6 +6728,23 @@ EditorNode::EditorNode() { ED_SHORTCUT_OVERRIDE("editor/play_custom_scene", "macos", KeyModifierMask::CMD | KeyModifierMask::SHIFT | Key::R); play_custom_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_custom_scene")); + write_movie_button = memnew(Button); + write_movie_button->set_flat(true); + write_movie_button->set_toggle_mode(true); + play_hb->add_child(write_movie_button); + write_movie_button->set_pressed(false); + write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWrite"), SNAME("EditorIcons"))); + write_movie_button->set_focus_mode(Control::FOCUS_NONE); + write_movie_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_WRITE_MOVIE)); + write_movie_button->set_tooltip(TTR("Enable Movie Maker mode.\nThe project will run at stable FPS and the visual and audio output will be recorded to a video file.")); + // Restore these values to something more useful so it ignores the theme + write_movie_button->add_theme_color_override("icon_normal_color", Color(1, 1, 1, 0.4)); + write_movie_button->add_theme_color_override("icon_pressed_color", Color(1, 1, 1, 1)); + write_movie_button->add_theme_color_override("icon_hover_color", Color(1.2, 1.2, 1.2, 0.4)); + write_movie_button->add_theme_color_override("icon_hover_pressed_color", Color(1.2, 1.2, 1.2, 1)); + write_movie_button->add_theme_color_override("icon_focus_color", Color(1, 1, 1, 1)); + write_movie_button->add_theme_color_override("icon_disabled_color", Color(1, 1, 1, 0.4)); + HBoxContainer *right_menu_hb = memnew(HBoxContainer); menu_hb->add_child(right_menu_hb); @@ -7040,7 +7095,6 @@ EditorNode::EditorNode() { add_editor_plugin(VersionControlEditorPlugin::get_singleton()); add_editor_plugin(memnew(ShaderEditorPlugin)); add_editor_plugin(memnew(ShaderFileEditorPlugin)); - add_editor_plugin(memnew(VisualShaderEditorPlugin)); add_editor_plugin(memnew(Camera3DEditorPlugin)); add_editor_plugin(memnew(ThemeEditorPlugin)); diff --git a/editor/editor_node.h b/editor/editor_node.h index 48df767562..89f80baeb9 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -173,6 +173,7 @@ private: RUN_PLAY_CUSTOM_SCENE, RUN_SETTINGS, RUN_USER_DATA_FOLDER, + RUN_WRITE_MOVIE, RELOAD_CURRENT_PROJECT, RUN_PROJECT_MANAGER, RUN_VCS_METADATA, @@ -333,6 +334,7 @@ private: Button *play_scene_button = nullptr; Button *play_custom_scene_button = nullptr; Button *search_button = nullptr; + Button *write_movie_button = nullptr; TextureProgressBar *audio_vu = nullptr; Timer *screenshot_timer = nullptr; @@ -667,7 +669,7 @@ private: void _pick_main_scene_custom_action(const String &p_custom_action_name); void _immediate_dialog_confirmed(); - + void _update_write_movie_icon(); void _select_default_main_screen_plugin(); void _bottom_panel_switch(bool p_enable, int p_idx); diff --git a/editor/editor_path.cpp b/editor/editor_path.cpp index 8747128962..6453db3b0b 100644 --- a/editor/editor_path.cpp +++ b/editor/editor_path.cpp @@ -72,7 +72,7 @@ void EditorPath::_add_children_to_popup(Object *p_obj, int p_depth) { int index = sub_objects_menu->get_item_count(); sub_objects_menu->add_icon_item(icon, proper_name, objects.size()); - sub_objects_menu->set_item_h_offset(index, p_depth * 10 * EDSCALE); + sub_objects_menu->set_item_horizontal_offset(index, p_depth * 10 * EDSCALE); objects.push_back(obj->get_instance_id()); _add_children_to_popup(obj, p_depth + 1); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 521f237fb1..61b434a240 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1259,12 +1259,13 @@ void EditorPropertyInteger::update_property() { void EditorPropertyInteger::_bind_methods() { } -void EditorPropertyInteger::setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser) { +void EditorPropertyInteger::setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser, const String &p_suffix) { spin->set_min(p_min); spin->set_max(p_max); spin->set_step(p_step); spin->set_allow_greater(p_allow_greater); spin->set_allow_lesser(p_allow_lesser); + spin->set_suffix(p_suffix); } EditorPropertyInteger::EditorPropertyInteger() { @@ -1596,6 +1597,18 @@ void EditorPropertyVector2::_value_changed(double val, const String &p_name) { return; } + if (linked->is_pressed()) { + setting = true; + if (p_name == "x") { + spin[1]->set_value(spin[0]->get_value() * ratio_yx); + } + + if (p_name == "y") { + spin[0]->set_value(spin[1]->get_value() * ratio_xy); + } + setting = false; + } + Vector2 v2; v2.x = spin[0]->get_value(); v2.y = spin[1]->get_value(); @@ -1608,12 +1621,28 @@ void EditorPropertyVector2::update_property() { spin[0]->set_value(val.x); spin[1]->set_value(val.y); setting = false; + _update_ratio(); +} + +void EditorPropertyVector2::_update_ratio() { + linked->set_modulate(Color(1, 1, 1, linked->is_pressed() ? 1.0 : 0.5)); + + if (spin[0]->get_value() != 0 && spin[1]->get_value() != 0) { + ratio_xy = spin[0]->get_value() / spin[1]->get_value(); + ratio_yx = spin[1]->get_value() / spin[0]->get_value(); + } else { + ratio_xy = 1.0; + ratio_yx = 1.0; + } } void EditorPropertyVector2::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { + linked->set_normal_texture(get_theme_icon(SNAME("Unlinked"), SNAME("EditorIcons"))); + linked->set_pressed_texture(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); + const Color *colors = _get_property_colors(); for (int i = 0; i < 2; i++) { spin[i]->add_theme_color_override("label_color", colors[i]); @@ -1622,10 +1651,7 @@ void EditorPropertyVector2::_notification(int p_what) { } } -void EditorPropertyVector2::_bind_methods() { -} - -void EditorPropertyVector2::setup(double p_min, double p_max, double p_step, bool p_no_slider, const String &p_suffix) { +void EditorPropertyVector2::setup(double p_min, double p_max, double p_step, bool p_no_slider, bool p_link, const String &p_suffix) { for (int i = 0; i < 2; i++) { spin[i]->set_min(p_min); spin[i]->set_max(p_max); @@ -1635,24 +1661,34 @@ void EditorPropertyVector2::setup(double p_min, double p_max, double p_step, boo spin[i]->set_allow_lesser(true); spin[i]->set_suffix(p_suffix); } + + if (!p_link) { + linked->hide(); + } else { + linked->set_pressed(true); + } } EditorPropertyVector2::EditorPropertyVector2(bool p_force_wide) { bool horizontal = p_force_wide || bool(EDITOR_GET("interface/inspector/horizontal_vector2_editing")); + HBoxContainer *hb = memnew(HBoxContainer); + hb->set_h_size_flags(SIZE_EXPAND_FILL); + BoxContainer *bc; if (p_force_wide) { bc = memnew(HBoxContainer); - add_child(bc); + hb->add_child(bc); } else if (horizontal) { bc = memnew(HBoxContainer); - add_child(bc); - set_bottom_editor(bc); + hb->add_child(bc); + set_bottom_editor(hb); } else { bc = memnew(VBoxContainer); - add_child(bc); + hb->add_child(bc); } + bc->set_h_size_flags(SIZE_EXPAND_FILL); static const char *desc[2] = { "x", "y" }; for (int i = 0; i < 2; i++) { @@ -1667,6 +1703,13 @@ EditorPropertyVector2::EditorPropertyVector2(bool p_force_wide) { } } + linked = memnew(TextureButton); + linked->set_toggle_mode(true); + linked->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED); + linked->connect(SNAME("pressed"), callable_mp(this, &EditorPropertyVector2::_update_ratio)); + hb->add_child(linked); + + add_child(hb); if (!horizontal) { set_label_reference(spin[0]); //show text and buttons around this } @@ -1788,6 +1831,25 @@ void EditorPropertyVector3::_value_changed(double val, const String &p_name) { return; } + if (linked->is_pressed()) { + setting = true; + if (p_name == "x") { + spin[1]->set_value(spin[0]->get_value() * ratio_yx); + spin[2]->set_value(spin[0]->get_value() * ratio_zx); + } + + if (p_name == "y") { + spin[0]->set_value(spin[1]->get_value() * ratio_xy); + spin[2]->set_value(spin[1]->get_value() * ratio_zy); + } + + if (p_name == "z") { + spin[0]->set_value(spin[2]->get_value() * ratio_xz); + spin[1]->set_value(spin[2]->get_value() * ratio_yz); + } + setting = false; + } + Vector3 v3; v3.x = spin[0]->get_value(); v3.y = spin[1]->get_value(); @@ -1802,6 +1864,27 @@ void EditorPropertyVector3::_value_changed(double val, const String &p_name) { void EditorPropertyVector3::update_property() { update_using_vector(get_edited_object()->get(get_edited_property())); + _update_ratio(); +} + +void EditorPropertyVector3::_update_ratio() { + linked->set_modulate(Color(1, 1, 1, linked->is_pressed() ? 1.0 : 0.5)); + + if (spin[0]->get_value() != 0 && spin[1]->get_value() != 0) { + ratio_yx = spin[1]->get_value() / spin[0]->get_value(); + ratio_zx = spin[2]->get_value() / spin[0]->get_value(); + ratio_xy = spin[0]->get_value() / spin[1]->get_value(); + ratio_zy = spin[2]->get_value() / spin[1]->get_value(); + ratio_xz = spin[0]->get_value() / spin[2]->get_value(); + ratio_yz = spin[1]->get_value() / spin[2]->get_value(); + } else { + ratio_yx = 1.0; + ratio_zx = 1.0; + ratio_xy = 1.0; + ratio_zy = 1.0; + ratio_xz = 1.0; + ratio_yz = 1.0; + } } void EditorPropertyVector3::update_using_vector(Vector3 p_vector) { @@ -1835,6 +1918,9 @@ void EditorPropertyVector3::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { + linked->set_normal_texture(get_theme_icon(SNAME("Unlinked"), SNAME("EditorIcons"))); + linked->set_pressed_texture(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); + const Color *colors = _get_property_colors(); for (int i = 0; i < 3; i++) { spin[i]->add_theme_color_override("label_color", colors[i]); @@ -1846,7 +1932,7 @@ void EditorPropertyVector3::_notification(int p_what) { void EditorPropertyVector3::_bind_methods() { } -void EditorPropertyVector3::setup(double p_min, double p_max, double p_step, bool p_no_slider, const String &p_suffix, bool p_angle_in_radians) { +void EditorPropertyVector3::setup(double p_min, double p_max, double p_step, bool p_no_slider, bool p_link, const String &p_suffix, bool p_angle_in_radians) { angle_in_radians = p_angle_in_radians; for (int i = 0; i < 3; i++) { spin[i]->set_min(p_min); @@ -1857,24 +1943,34 @@ void EditorPropertyVector3::setup(double p_min, double p_max, double p_step, boo spin[i]->set_allow_lesser(true); spin[i]->set_suffix(p_suffix); } + + if (!p_link) { + linked->hide(); + } else { + linked->set_pressed(true); + } } EditorPropertyVector3::EditorPropertyVector3(bool p_force_wide) { bool horizontal = p_force_wide || bool(EDITOR_GET("interface/inspector/horizontal_vector_types_editing")); + HBoxContainer *hb = memnew(HBoxContainer); + hb->set_h_size_flags(SIZE_EXPAND_FILL); + BoxContainer *bc; if (p_force_wide) { bc = memnew(HBoxContainer); - add_child(bc); + hb->add_child(bc); } else if (horizontal) { bc = memnew(HBoxContainer); - add_child(bc); - set_bottom_editor(bc); + hb->add_child(bc); + set_bottom_editor(hb); } else { bc = memnew(VBoxContainer); - add_child(bc); + hb->add_child(bc); } + bc->set_h_size_flags(SIZE_EXPAND_FILL); static const char *desc[3] = { "x", "y", "z" }; for (int i = 0; i < 3; i++) { @@ -1889,6 +1985,13 @@ EditorPropertyVector3::EditorPropertyVector3(bool p_force_wide) { } } + linked = memnew(TextureButton); + linked->set_toggle_mode(true); + linked->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED); + linked->connect(SNAME("pressed"), callable_mp(this, &EditorPropertyVector3::_update_ratio)); + hb->add_child(linked); + + add_child(hb); if (!horizontal) { set_label_reference(spin[0]); //show text and buttons around this } @@ -1907,6 +2010,18 @@ void EditorPropertyVector2i::_value_changed(double val, const String &p_name) { return; } + if (linked->is_pressed()) { + setting = true; + if (p_name == "x") { + spin[1]->set_value(spin[0]->get_value() * ratio_yx); + } + + if (p_name == "y") { + spin[0]->set_value(spin[1]->get_value() * ratio_xy); + } + setting = false; + } + Vector2i v2; v2.x = spin[0]->get_value(); v2.y = spin[1]->get_value(); @@ -1919,12 +2034,28 @@ void EditorPropertyVector2i::update_property() { spin[0]->set_value(val.x); spin[1]->set_value(val.y); setting = false; + _update_ratio(); +} + +void EditorPropertyVector2i::_update_ratio() { + linked->set_modulate(Color(1, 1, 1, linked->is_pressed() ? 1.0 : 0.5)); + + if (spin[0]->get_value() != 0 && spin[1]->get_value() != 0) { + ratio_xy = spin[0]->get_value() / spin[1]->get_value(); + ratio_yx = spin[1]->get_value() / spin[0]->get_value(); + } else { + ratio_xy = 1.0; + ratio_yx = 1.0; + } } void EditorPropertyVector2i::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { + linked->set_normal_texture(get_theme_icon(SNAME("Unlinked"), SNAME("EditorIcons"))); + linked->set_pressed_texture(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); + const Color *colors = _get_property_colors(); for (int i = 0; i < 2; i++) { spin[i]->add_theme_color_override("label_color", colors[i]); @@ -1933,10 +2064,7 @@ void EditorPropertyVector2i::_notification(int p_what) { } } -void EditorPropertyVector2i::_bind_methods() { -} - -void EditorPropertyVector2i::setup(int p_min, int p_max, bool p_no_slider, const String &p_suffix) { +void EditorPropertyVector2i::setup(int p_min, int p_max, bool p_no_slider, bool p_link, const String &p_suffix) { for (int i = 0; i < 2; i++) { spin[i]->set_min(p_min); spin[i]->set_max(p_max); @@ -1946,24 +2074,34 @@ void EditorPropertyVector2i::setup(int p_min, int p_max, bool p_no_slider, const spin[i]->set_allow_lesser(true); spin[i]->set_suffix(p_suffix); } + + if (!p_link) { + linked->hide(); + } else { + linked->set_pressed(true); + } } EditorPropertyVector2i::EditorPropertyVector2i(bool p_force_wide) { bool horizontal = p_force_wide || bool(EDITOR_GET("interface/inspector/horizontal_vector2_editing")); + HBoxContainer *hb = memnew(HBoxContainer); + hb->set_h_size_flags(SIZE_EXPAND_FILL); + BoxContainer *bc; if (p_force_wide) { bc = memnew(HBoxContainer); - add_child(bc); + hb->add_child(bc); } else if (horizontal) { bc = memnew(HBoxContainer); - add_child(bc); - set_bottom_editor(bc); + hb->add_child(bc); + set_bottom_editor(hb); } else { bc = memnew(VBoxContainer); - add_child(bc); + hb->add_child(bc); } + bc->set_h_size_flags(SIZE_EXPAND_FILL); static const char *desc[2] = { "x", "y" }; for (int i = 0; i < 2; i++) { @@ -1978,6 +2116,13 @@ EditorPropertyVector2i::EditorPropertyVector2i(bool p_force_wide) { } } + linked = memnew(TextureButton); + linked->set_toggle_mode(true); + linked->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED); + linked->connect(SNAME("pressed"), callable_mp(this, &EditorPropertyVector2i::_update_ratio)); + hb->add_child(linked); + + add_child(hb); if (!horizontal) { set_label_reference(spin[0]); //show text and buttons around this } @@ -2099,6 +2244,25 @@ void EditorPropertyVector3i::_value_changed(double val, const String &p_name) { return; } + if (linked->is_pressed()) { + setting = true; + if (p_name == "x") { + spin[1]->set_value(spin[0]->get_value() * ratio_yx); + spin[2]->set_value(spin[0]->get_value() * ratio_zx); + } + + if (p_name == "y") { + spin[0]->set_value(spin[1]->get_value() * ratio_xy); + spin[2]->set_value(spin[1]->get_value() * ratio_zy); + } + + if (p_name == "z") { + spin[0]->set_value(spin[2]->get_value() * ratio_xz); + spin[1]->set_value(spin[2]->get_value() * ratio_yz); + } + setting = false; + } + Vector3i v3; v3.x = spin[0]->get_value(); v3.y = spin[1]->get_value(); @@ -2113,12 +2277,36 @@ void EditorPropertyVector3i::update_property() { spin[1]->set_value(val.y); spin[2]->set_value(val.z); setting = false; + _update_ratio(); +} + +void EditorPropertyVector3i::_update_ratio() { + linked->set_modulate(Color(1, 1, 1, linked->is_pressed() ? 1.0 : 0.5)); + + if (spin[0]->get_value() != 0 && spin[1]->get_value() != 0) { + ratio_yx = spin[1]->get_value() / spin[0]->get_value(); + ratio_zx = spin[2]->get_value() / spin[0]->get_value(); + ratio_xy = spin[0]->get_value() / spin[1]->get_value(); + ratio_zy = spin[2]->get_value() / spin[1]->get_value(); + ratio_xz = spin[0]->get_value() / spin[2]->get_value(); + ratio_yz = spin[1]->get_value() / spin[2]->get_value(); + } else { + ratio_yx = 1.0; + ratio_zx = 1.0; + ratio_xy = 1.0; + ratio_zy = 1.0; + ratio_xz = 1.0; + ratio_yz = 1.0; + } } void EditorPropertyVector3i::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: case NOTIFICATION_THEME_CHANGED: { + linked->set_normal_texture(get_theme_icon(SNAME("Unlinked"), SNAME("EditorIcons"))); + linked->set_pressed_texture(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons"))); + const Color *colors = _get_property_colors(); for (int i = 0; i < 3; i++) { spin[i]->add_theme_color_override("label_color", colors[i]); @@ -2130,7 +2318,7 @@ void EditorPropertyVector3i::_notification(int p_what) { void EditorPropertyVector3i::_bind_methods() { } -void EditorPropertyVector3i::setup(int p_min, int p_max, bool p_no_slider, const String &p_suffix) { +void EditorPropertyVector3i::setup(int p_min, int p_max, bool p_no_slider, bool p_link, const String &p_suffix) { for (int i = 0; i < 3; i++) { spin[i]->set_min(p_min); spin[i]->set_max(p_max); @@ -2140,22 +2328,31 @@ void EditorPropertyVector3i::setup(int p_min, int p_max, bool p_no_slider, const spin[i]->set_allow_lesser(true); spin[i]->set_suffix(p_suffix); } + + if (!p_link) { + linked->hide(); + } else { + linked->set_pressed(true); + } } EditorPropertyVector3i::EditorPropertyVector3i(bool p_force_wide) { bool horizontal = p_force_wide || bool(EDITOR_GET("interface/inspector/horizontal_vector_types_editing")); + HBoxContainer *hb = memnew(HBoxContainer); + hb->set_h_size_flags(SIZE_EXPAND_FILL); + BoxContainer *bc; if (p_force_wide) { bc = memnew(HBoxContainer); - add_child(bc); + hb->add_child(bc); } else if (horizontal) { bc = memnew(HBoxContainer); - add_child(bc); - set_bottom_editor(bc); + hb->add_child(bc); + set_bottom_editor(hb); } else { bc = memnew(VBoxContainer); - add_child(bc); + hb->add_child(bc); } static const char *desc[3] = { "x", "y", "z" }; @@ -2170,7 +2367,15 @@ EditorPropertyVector3i::EditorPropertyVector3i(bool p_force_wide) { spin[i]->set_h_size_flags(SIZE_EXPAND_FILL); } } + bc->set_h_size_flags(SIZE_EXPAND_FILL); + + linked = memnew(TextureButton); + linked->set_toggle_mode(true); + linked->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED); + linked->connect(SNAME("pressed"), callable_mp(this, &EditorPropertyVector3i::_update_ratio)); + hb->add_child(linked); + add_child(hb); if (!horizontal) { set_label_reference(spin[0]); //show text and buttons around this } @@ -3492,7 +3697,7 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ EditorPropertyInteger *editor = memnew(EditorPropertyInteger); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1); - editor->setup(hint.min, hint.max, hint.step, hint.greater, hint.lesser); + editor->setup(hint.min, hint.max, hint.step, hint.greater, hint.lesser, hint.suffix); return editor; } @@ -3542,11 +3747,11 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ EditorPropertyLocale *editor = memnew(EditorPropertyLocale); editor->setup(p_hint_text); return editor; - } else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) { + } else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) { Vector<String> extensions = p_hint_text.split(","); - bool global = p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE; + bool global = p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE; bool folder = p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_GLOBAL_DIR; - bool save = p_hint == PROPERTY_HINT_SAVE_FILE; + bool save = p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE; EditorPropertyPath *editor = memnew(EditorPropertyPath); editor->setup(extensions, folder, global); if (save) { @@ -3607,14 +3812,14 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ EditorPropertyVector2 *editor = memnew(EditorPropertyVector2(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, default_float_step); - editor->setup(hint.min, hint.max, hint.step, hint.hide_slider, hint.suffix); + editor->setup(hint.min, hint.max, hint.step, hint.hide_slider, p_hint == PROPERTY_HINT_LINK, hint.suffix); return editor; } break; case Variant::VECTOR2I: { EditorPropertyVector2i *editor = memnew(EditorPropertyVector2i(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1); - editor->setup(hint.min, hint.max, hint.hide_slider, hint.suffix); + editor->setup(hint.min, hint.max, hint.hide_slider, p_hint == PROPERTY_HINT_LINK, hint.suffix); return editor; } break; @@ -3634,14 +3839,14 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_ case Variant::VECTOR3: { EditorPropertyVector3 *editor = memnew(EditorPropertyVector3(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, default_float_step); - editor->setup(hint.min, hint.max, hint.step, hint.hide_slider, hint.suffix, hint.radians); + editor->setup(hint.min, hint.max, hint.step, hint.hide_slider, p_hint == PROPERTY_HINT_LINK, hint.suffix, hint.radians); return editor; } break; case Variant::VECTOR3I: { EditorPropertyVector3i *editor = memnew(EditorPropertyVector3i(p_wide)); EditorPropertyRangeHint hint = _parse_range_hint(p_hint, p_hint_text, 1); - editor->setup(hint.min, hint.max, hint.hide_slider, hint.suffix); + editor->setup(hint.min, hint.max, hint.hide_slider, p_hint == PROPERTY_HINT_LINK, hint.suffix); return editor; } break; diff --git a/editor/editor_properties.h b/editor/editor_properties.h index a3990db678..a3b98b7724 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -368,7 +368,7 @@ protected: public: virtual void update_property() override; - void setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser); + void setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser, const String &p_suffix = String()); EditorPropertyInteger(); }; @@ -451,16 +451,19 @@ class EditorPropertyVector2 : public EditorProperty { GDCLASS(EditorPropertyVector2, EditorProperty); EditorSpinSlider *spin[2]; bool setting = false; + double ratio_xy = 1.0; + double ratio_yx = 1.0; + TextureButton *linked = nullptr; + void _update_ratio(); void _value_changed(double p_val, const String &p_name); protected: virtual void _set_read_only(bool p_read_only) override; void _notification(int p_what); - static void _bind_methods(); public: virtual void update_property() override; - void setup(double p_min, double p_max, double p_step, bool p_no_slider, const String &p_suffix = String()); + void setup(double p_min, double p_max, double p_step, bool p_no_slider, bool p_link = false, const String &p_suffix = String()); EditorPropertyVector2(bool p_force_wide = false); }; @@ -486,6 +489,14 @@ class EditorPropertyVector3 : public EditorProperty { EditorSpinSlider *spin[3]; bool setting = false; bool angle_in_radians = false; + double ratio_yx = 1.0; + double ratio_zx = 1.0; + double ratio_xy = 1.0; + double ratio_zy = 1.0; + double ratio_xz = 1.0; + double ratio_yz = 1.0; + TextureButton *linked = nullptr; + void _update_ratio(); void _value_changed(double p_val, const String &p_name); protected: @@ -497,7 +508,7 @@ public: virtual void update_property() override; virtual void update_using_vector(Vector3 p_vector); virtual Vector3 get_vector(); - void setup(double p_min, double p_max, double p_step, bool p_no_slider, const String &p_suffix = String(), bool p_angle_in_radians = false); + void setup(double p_min, double p_max, double p_step, bool p_no_slider, bool p_link = false, const String &p_suffix = String(), bool p_angle_in_radians = false); EditorPropertyVector3(bool p_force_wide = false); }; @@ -505,16 +516,19 @@ class EditorPropertyVector2i : public EditorProperty { GDCLASS(EditorPropertyVector2i, EditorProperty); EditorSpinSlider *spin[2]; bool setting = false; + double ratio_xy = 1.0; + double ratio_yx = 1.0; + TextureButton *linked = nullptr; + void _update_ratio(); void _value_changed(double p_val, const String &p_name); protected: virtual void _set_read_only(bool p_read_only) override; void _notification(int p_what); - static void _bind_methods(); public: virtual void update_property() override; - void setup(int p_min, int p_max, bool p_no_slider, const String &p_suffix = String()); + void setup(int p_min, int p_max, bool p_no_slider, bool p_link = false, const String &p_suffix = String()); EditorPropertyVector2i(bool p_force_wide = false); }; @@ -539,6 +553,14 @@ class EditorPropertyVector3i : public EditorProperty { GDCLASS(EditorPropertyVector3i, EditorProperty); EditorSpinSlider *spin[3]; bool setting = false; + double ratio_yx = 1.0; + double ratio_zx = 1.0; + double ratio_xy = 1.0; + double ratio_zy = 1.0; + double ratio_xz = 1.0; + double ratio_yz = 1.0; + TextureButton *linked = nullptr; + void _update_ratio(); void _value_changed(double p_val, const String &p_name); protected: @@ -548,7 +570,7 @@ protected: public: virtual void update_property() override; - void setup(int p_min, int p_max, bool p_no_slider, const String &p_suffix = String()); + void setup(int p_min, int p_max, bool p_no_slider, bool p_link = false, const String &p_suffix = String()); EditorPropertyVector3i(bool p_force_wide = false); }; diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index f47c6e298b..f1a3fe0c57 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -347,6 +347,7 @@ void EditorPropertyArray::update_property() { prop->set_object_and_property(object.ptr(), prop_name); prop->set_label(itos(i + offset)); prop->set_selectable(false); + prop->set_use_folding(is_using_folding()); prop->connect("property_changed", callable_mp(this, &EditorPropertyArray::_property_changed)); prop->connect("object_id_selected", callable_mp(this, &EditorPropertyArray::_object_id_selected)); prop->set_h_size_flags(SIZE_EXPAND_FILL); @@ -1006,6 +1007,7 @@ void EditorPropertyDictionary::update_property() { } else { EditorPropertyResource *editor = memnew(EditorPropertyResource); editor->setup(object.ptr(), prop_name, "Resource"); + editor->set_use_folding(is_using_folding()); prop = editor; } diff --git a/editor/editor_property_name_processor.cpp b/editor/editor_property_name_processor.cpp index 1e7638bf72..397afc0653 100644 --- a/editor/editor_property_name_processor.cpp +++ b/editor/editor_property_name_processor.cpp @@ -213,6 +213,7 @@ EditorPropertyNameProcessor::EditorPropertyNameProcessor() { capitalize_string_remaps["stdout"] = "stdout"; capitalize_string_remaps["sv"] = "SV"; capitalize_string_remaps["svg"] = "SVG"; + capitalize_string_remaps["taa"] = "TAA"; capitalize_string_remaps["tcp"] = "TCP"; capitalize_string_remaps["ui"] = "UI"; capitalize_string_remaps["url"] = "URL"; diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp index 6a2ff50ee0..04a3bf2915 100644 --- a/editor/editor_run.cpp +++ b/editor/editor_run.cpp @@ -43,7 +43,7 @@ String EditorRun::get_running_scene() const { return running_scene; } -Error EditorRun::run(const String &p_scene) { +Error EditorRun::run(const String &p_scene, const String &p_write_movie) { List<String> args; String resource_path = ProjectSettings::get_singleton()->get_resource_path(); @@ -68,6 +68,16 @@ Error EditorRun::run(const String &p_scene) { args.push_back("--debug-navigation"); } + if (p_write_movie != "") { + args.push_back("--write-movie"); + args.push_back(p_write_movie); + args.push_back("--fixed-fps"); + args.push_back(itos(GLOBAL_GET("editor/movie_writer/fps"))); + if (bool(GLOBAL_GET("editor/movie_writer/disable_vsync"))) { + args.push_back("--disable-vsync"); + } + } + int screen = EditorSettings::get_singleton()->get("run/window_placement/screen"); if (screen == 0) { // Same as editor diff --git a/editor/editor_run.h b/editor/editor_run.h index 50604ff032..4cbc6838e4 100644 --- a/editor/editor_run.h +++ b/editor/editor_run.h @@ -50,7 +50,7 @@ private: public: Status get_status() const; String get_running_scene() const; - Error run(const String &p_scene); + Error run(const String &p_scene, const String &p_write_movie = ""); void run_native_notify() { status = STATUS_PLAY; } void stop(); diff --git a/editor/editor_toaster.cpp b/editor/editor_toaster.cpp index 7ca88bd2a2..4986bccc35 100644 --- a/editor/editor_toaster.cpp +++ b/editor/editor_toaster.cpp @@ -234,6 +234,16 @@ void EditorToaster::_auto_hide_or_free_toasts() { to_delete[i]->queue_delete(); toasts.erase(to_delete[i]); } + + if (toasts.is_empty()) { + main_button->set_tooltip(TTR("No notifications.")); + main_button->set_modulate(Color(0.5, 0.5, 0.5)); + main_button->set_disabled(true); + } else { + main_button->set_tooltip(TTR("Show notifications.")); + main_button->set_modulate(Color(1, 1, 1)); + main_button->set_disabled(false); + } } void EditorToaster::_draw_button() { @@ -508,6 +518,9 @@ EditorToaster::EditorToaster() { // Main button. main_button = memnew(Button); + main_button->set_tooltip(TTR("No notifications.")); + main_button->set_modulate(Color(0.5, 0.5, 0.5)); + main_button->set_disabled(true); main_button->set_flat(true); main_button->connect("pressed", callable_mp(this, &EditorToaster::_set_notifications_enabled), varray(true)); main_button->connect("pressed", callable_mp(this, &EditorToaster::_repop_old)); @@ -521,6 +534,7 @@ EditorToaster::EditorToaster() { add_child(disable_notifications_panel); disable_notifications_button = memnew(Button); + disable_notifications_button->set_tooltip(TTR("Silence the notifications.")); disable_notifications_button->set_flat(true); disable_notifications_button->connect("pressed", callable_mp(this, &EditorToaster::_set_notifications_enabled), varray(false)); disable_notifications_panel->add_child(disable_notifications_button); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index f3129db65e..5dc81f623d 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -559,7 +559,7 @@ GroupDialog::GroupDialog() { group_empty->set_text(TTR("Empty groups will be automatically removed.")); group_empty->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); group_empty->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - group_empty->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + group_empty->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); group_empty->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); nodes_to_remove->add_child(group_empty); group_empty->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); diff --git a/editor/icons/MainMovieWrite.svg b/editor/icons/MainMovieWrite.svg new file mode 100644 index 0000000000..21464bb57c --- /dev/null +++ b/editor/icons/MainMovieWrite.svg @@ -0,0 +1 @@ +<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 4-1.535V14h.002a2 2 0 0 0 .266 1A2 2 0 0 0 14 16h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 0 0-6-6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1zm3.441 2a1 1 0 0 1 .89.5 1 1 0 0 1-.366 1.365 1 1 0 0 1-1.367-.365 1 1 0 0 1 .367-1.365A1 1 0 0 1 11.44 5zm-6.953.002a1 1 0 0 1 .547.133A1 1 0 0 1 5.402 6.5a1 1 0 0 1-1.367.365A1 1 0 0 1 3.67 5.5a1 1 0 0 1 .818-.498zM4.512 9a1 1 0 0 1 .89.5 1 1 0 0 1-.367 1.365A1 1 0 0 1 3.67 10.5a1 1 0 0 1 .365-1.365A1 1 0 0 1 4.512 9zm6.904.002a1 1 0 0 1 .549.133 1 1 0 0 1 .365 1.365 1 1 0 0 1-1.365.365 1 1 0 0 1-.367-1.365 1 1 0 0 1 .818-.498zM8 11a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg> diff --git a/editor/icons/MainMovieWriteEnabled.svg b/editor/icons/MainMovieWriteEnabled.svg new file mode 100644 index 0000000000..b12ea38bed --- /dev/null +++ b/editor/icons/MainMovieWriteEnabled.svg @@ -0,0 +1 @@ +<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 4-1.535V14h.002a2 2 0 0 0 .266 1A2 2 0 0 0 14 16h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 0 0-6-6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1zm3.441 2a1 1 0 0 1 .89.5 1 1 0 0 1-.366 1.365 1 1 0 0 1-1.367-.365 1 1 0 0 1 .367-1.365A1 1 0 0 1 11.44 5zm-6.953.002a1 1 0 0 1 .547.133A1 1 0 0 1 5.402 6.5a1 1 0 0 1-1.367.365A1 1 0 0 1 3.67 5.5a1 1 0 0 1 .818-.498zM4.512 9a1 1 0 0 1 .89.5 1 1 0 0 1-.367 1.365A1 1 0 0 1 3.67 10.5a1 1 0 0 1 .365-1.365A1 1 0 0 1 4.512 9zm6.904.002a1 1 0 0 1 .549.133 1 1 0 0 1 .365 1.365 1 1 0 0 1-1.365.365 1 1 0 0 1-.367-1.365 1 1 0 0 1 .818-.498zM8 11a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1z" fill="#e0e0e0" style="fill:#ee5353;fill-opacity:1"/></svg> diff --git a/editor/icons/NavigationAgent2D.svg b/editor/icons/NavigationAgent2D.svg index 3f1d571a7e..05aeb95e12 100644 --- a/editor/icons/NavigationAgent2D.svg +++ b/editor/icons/NavigationAgent2D.svg @@ -1 +1 @@ -<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3 0-5 2-5 5s3 6 5 9c2-3 5.007-6.03 5-9 0-3-2-5-5-5zm0 2.5c1.371 0 2.5 1.129 2.5 2.5s-1.129 2.5-2.5 2.5-2.5-1.129-2.5-2.5 1.129-2.5 2.5-2.5z" fill="#e0e0e0" fill-rule="nonzero"/></svg> +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1v2.5c1.371 0 2.5 1.129 2.5 2.5s-1.129 2.5-2.5 2.5v6.5c2-3 5.007-6.03 5-9 0-3-2-5-5-5z" fill="#8da5f3" fill-opacity=".988235"/><path d="m8 1c-3 0-5 2-5 5s3 6 5 9v-6.5c-1.371 0-2.5-1.129-2.5-2.5s1.129-2.5 2.5-2.5z" fill="#e0e0e0"/></svg> diff --git a/editor/icons/NavigationAgent3D.svg b/editor/icons/NavigationAgent3D.svg index 947b2129c3..5a2d8b3489 100644 --- a/editor/icons/NavigationAgent3D.svg +++ b/editor/icons/NavigationAgent3D.svg @@ -1 +1 @@ -<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m9 1c-1.371 0-2.308.429-2.939 1.074-.668.663-1.34 1.324-2.01 1.985-.046 1.741.757 4.327 2.365 4.843.178.317.384.649.584.977v5.121l2-2c2-3 4-6 4-8s-1-4-4-4z" fill="#fff" fill-opacity=".39"/><path d="m7 3c-3 0-4 2-4 4s2 5 4 8c2-3 4-6 4-8s-1-4-4-4zm0 2c1.097 0 2 .903 2 2s-.903 2-2 2-2-.903-2-2 .903-2 2-2z" fill="#e0e0e0"/></g></svg> +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m8 1.0859375c-.8454344.1560829-1.4755929.5141293-1.9394531.9882813-.668.663-1.3397656 1.323375-2.0097657 1.984375-.046 1.7409999.7572344 4.32775 2.3652344 4.84375.178.317.3839844.6485624.5839844.9765624v5.1210938l1-1z" fill="#e0e0e0" fill-opacity=".501961"/><path d="m7 3c-3 0-4 2-4 4s2 5 4 8c.3378629-.506794.671779-1.011698 1-1.513672v-4.7597655c-.2952789.1727801-.6361816.2734375-1 .2734375-1.097 0-2-.903-2-2s.903-2 2-2c.3638184 0 .7047211.1006574 1 .2734375v-2.1894531c-.3055959-.054762-.6378835-.0839844-1-.0839844z" fill="#e0e0e0"/><g fill="#fc7f7f"><path d="m9 1c-.3631515 0-.6953702.0296972-1 .0859375v12.9140625l1-1c2-3 4-6 4-8s-1-4-4-4z" fill-opacity=".501961"/><path d="m8 3.0839844v2.1894531c.5950581.3481936 1 .9933809 1 1.7265625s-.4049419 1.3783689-1 1.7265625v4.7597655c1.6147033-2.469489 3-4.8241909 3-6.486328 0-1.758589-.773848-3.5170952-3-3.9160156z"/></g></g></svg> diff --git a/editor/icons/NavigationObstacle2D.svg b/editor/icons/NavigationObstacle2D.svg index 8fcb5617dd..a5073898f4 100644 --- a/editor/icons/NavigationObstacle2D.svg +++ b/editor/icons/NavigationObstacle2D.svg @@ -1 +1 @@ -<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .875c-.625 0-1.25.375-1.5 1.125l-3 10h9l-3-10c-.25-.75-.875-1.125-1.5-1.125zm-1.5 4.125h3l1 4h-5zm-4.5 8c-1 0-1 2 0 2h12c1 0 1-2 0-2z" fill="#e0e0e0" fill-rule="nonzero"/></svg> +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .875c-.625 0-1.25.375-1.5 1.125l-3 10h4.5v-3h-2.5l1-4h1.5zm-6 12.125c-1 0-1 2 0 2h6v-2z" fill="#e0e0e0"/><path d="m8 .875v4.125h1.5l1 4h-2.5v3h4.5l-3-10c-.25-.75-.875-1.125-1.5-1.125zm0 12.125v2h6c1 0 1-2 0-2z" fill="#8da5f3" fill-opacity=".988235"/></svg> diff --git a/editor/icons/NavigationObstacle3D.svg b/editor/icons/NavigationObstacle3D.svg index c5e58eebf7..d8ccd3a646 100644 --- a/editor/icons/NavigationObstacle3D.svg +++ b/editor/icons/NavigationObstacle3D.svg @@ -1 +1 @@ -<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m4.607 8.379c-1.798.928-3.607 2.072-3.607 2.621 0 1 6 4 7 4s7-3 7-4c0-.549-1.809-1.693-3.607-2.621l.607 1.621c2 4-10 4-8 0z" fill="#fff" fill-opacity=".39"/><path d="m8 .875c-.375 0-.75.375-1 1.125l-3 8c-2 4 10 4 8 0l-3-8c-.25-.75-.625-1.125-1-1.125zm-1.5 4.125c1 .5 2 .5 3 0l1 3.5c-1.5 1-3.5 1-5 0z" fill="#e0e0e0"/></g></svg> +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m4.6074219 8.3789062c-1.798.9280001-3.6074219 2.0720938-3.6074219 2.6210938 0 1 6 4 7 4v-2c-2.5 0-5-1-4-3z" fill="#e0e0e0" fill-opacity=".501961"/><path d="m8 .875c-.375 0-.75.375-1 1.125l-3 8c-1 2 1.5 3 4 3v-3.75c-.875 0-1.75-.25-2.5-.75l1-3.5c.5.25 1 .375 1.5.375z" fill="#e0e0e0"/><g fill="#fc7f7f"><path d="m11.392578 8.3789062.607422 1.6210938c1.002342 2.004685-1.511742 3.004696-4.0175781 3v1.998047c.0053893.000157.0124503.001953.0175781.001953 1 0 7-3 7-4 0-.549-1.809422-1.6930938-3.607422-2.6210938z" fill-opacity=".501961"/><path d="m8 .875c-.00585 0-.011729.001771-.017578.001953v4.498047c.5058535.0029611 1.0117243-.1220732 1.517578-.375l1 3.5c-.7550159.5033439-1.6367318.7533663-2.5175781.75v3.75c2.5058361.004696 5.0199201-.995315 4.0175781-3l-3-8c-.25-.75-.625-1.125-1-1.125z"/></g></g></svg> diff --git a/editor/icons/SkeletonIK3D.svg b/editor/icons/SkeletonIK3D.svg index 45697a1b42..7210019749 100644 --- a/editor/icons/SkeletonIK3D.svg +++ b/editor/icons/SkeletonIK3D.svg @@ -1 +1 @@ -<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 .26562v.001953h4v-.001953a2 2 0 0 0 1-.26562 2 2 0 0 0 1-1.7324v-3.5469a4 4 0 0 0 2-3.4531 4 4 0 0 0 -4-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-4 2h2v1h-2zm-2 2h1v1h1v-1h1 1v1h1v-1h1v.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-.86914z" fill="#e0e0e0"/></svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.453125v3.546875a2 2 0 0 0 1 1.732422 2 2 0 0 0 1 .265625v.001953h2v-2h-1v-1h-1v1h-1v-3.1308594-.8691406h1v1h1v-1h1v-1h-1v-1h1v-5zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/><path d="m8 2v5h1v1h-1v1h1v1h1v-1h1v.8671875 3.1328125h-1v-1h-1v1h-1v2h2v-.001953a2 2 0 0 0 1-.265625 2 2 0 0 0 1-1.732422v-3.546875a4 4 0 0 0 2-3.453125 4 4 0 0 0 -4-4zm3 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#fc7f7f"/></svg> diff --git a/editor/icons/TerrainConnect.svg b/editor/icons/TerrainConnect.svg new file mode 100644 index 0000000000..3b6b8fd5a2 --- /dev/null +++ b/editor/icons/TerrainConnect.svg @@ -0,0 +1 @@ +<svg height="32" viewBox="0 0 16 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="8" cy="8" r="2.000028" stroke-width="1.09711"/><g stroke-width=".5" transform="translate(0 -1036.4)"><path d="m7 1039.9h-1l2-2.5 2 2.5h-1v2h-2z"/><path d="m3.5606601 1041.3748-.7071068.707-.3535533-3.1818 3.1819804.3535-.7071067.7071.7071067.7071-1.4142135 1.4142z"/><path d="m11.0252 1039.9606-.707-.7071 3.1818-.3535-.3535 3.1819-.7071-.7071-.7071.7071-1.4142-1.4142z"/><path d="m12.43934 1047.4252.707107-.707.353553 3.1818-3.18198-.3535.707106-.7071-.707106-.7071 1.414214-1.4142z"/><path d="m4.9748005 1048.8394.707.7071-3.1818.3535.3535-3.1819.7071.7071.7071-.7071 1.4142 1.4142z"/><path d="m12.5 1043.4v-1l2.5 2-2.5 2v-1h-2v-2z"/><path d="m9 1048.9h1l-2 2.5-2-2.5h1v-2h2z"/><path d="m3.5 1045.4v1l-2.5-2 2.5-2v1h2v2z"/></g></g></svg> diff --git a/editor/icons/TerrainPath.svg b/editor/icons/TerrainPath.svg new file mode 100644 index 0000000000..6352bbd37e --- /dev/null +++ b/editor/icons/TerrainPath.svg @@ -0,0 +1 @@ +<svg height="32" viewBox="0 0 16 16" width="32" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><circle cx="3" cy="1049.4" r="2.000028" stroke-width="1.09711"/><circle cx="13" cy="1039.4" r="2.000028" stroke-width="1.09711"/><path d="m7 1038.4v10h-4v2h4 2v-2-8h4v-2h-4z" stroke-width=".46291"/></g></svg> diff --git a/editor/icons/Unlinked.svg b/editor/icons/Unlinked.svg new file mode 100644 index 0000000000..6c831eacad --- /dev/null +++ b/editor/icons/Unlinked.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><defs><clipPath id="a"><path d="M0 0h16v16H0z"/></clipPath></defs><g clip-path="url(#a)" fill="#e0e0e0"><path d="M1.136 12.036a3.994 3.994 0 0 1-.137-1.047 4.007 4.007 0 0 1 2.965-3.853 1 1 0 0 1 1.225.707 1 1 0 0 1 .034.25 1 1 0 0 1-.741.975 2 2 0 0 0-1.483 1.926 1.994 1.994 0 0 0 .068.523 2 2 0 0 0 2.45 1.415 2 2 0 0 0 1.484-1.931 2 2 0 0 0-.068-.523 1 1 0 0 1-.034-.25 1 1 0 0 1 .742-.975 1 1 0 0 1 1.225.707 3.991 3.991 0 0 1 .137 1.046 4.007 4.007 0 0 1-2.965 3.852 3.993 3.993 0 0 1-1.035.137 4.006 4.006 0 0 1-3.867-2.959zM9.965 8.863a1 1 0 0 1-.742-.975 1 1 0 0 1 .034-.25 1 1 0 0 1 1.225-.706 2 2 0 0 0 2.449-1.415A1.994 1.994 0 0 0 13 4.994a2 2 0 0 0-1.483-1.926 2 2 0 0 0-2.45 1.414 1 1 0 0 1-1.224.707 1 1 0 0 1-.742-.975 1 1 0 0 1 .034-.25 4 4 0 0 1 4.9-2.829A4.008 4.008 0 0 1 15 4.988a3.993 3.993 0 0 1-.137 1.047 4.006 4.006 0 0 1-3.862 2.966 3.989 3.989 0 0 1-1.036-.138zM5.5 4a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5zM4.5 5a.5.5 0 0 1-.354-.146l-2-2a.5.5 0 0 1 0-.707.5.5 0 0 1 .707 0l2 2A.5.5 0 0 1 4.5 5zM3.5 6h-2a.5.5 0 0 1-.5-.5.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 .5.5.5.5 0 0 1-.5.5z"/></g></svg> diff --git a/editor/icons/VideoPlayer.svg b/editor/icons/VideoStreamPlayer.svg index 092a26b955..092a26b955 100644 --- a/editor/icons/VideoPlayer.svg +++ b/editor/icons/VideoStreamPlayer.svg diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp index b361dcd036..f7fe334828 100644 --- a/editor/import/dynamic_font_import_settings.cpp +++ b/editor/import/dynamic_font_import_settings.cpp @@ -454,7 +454,11 @@ void DynamicFontImportSettings::_add_glyph_range_item(int32_t p_start, int32_t p void DynamicFontImportSettings::_main_prop_changed(const String &p_edited_property) { // Update font preview. - if (p_edited_property == "antialiased") { + if (p_edited_property == "face_index") { + if (font_preview->get_data_count() > 0) { + font_preview->get_data(0)->set_face_index(import_settings_data->get("face_index")); + } + } else if (p_edited_property == "antialiased") { if (font_preview->get_data_count() > 0) { font_preview->get_data(0)->set_antialiased(import_settings_data->get("antialiased")); } @@ -945,6 +949,7 @@ void DynamicFontImportSettings::_notification(int p_what) { void DynamicFontImportSettings::_re_import() { HashMap<StringName, Variant> main_settings; + main_settings["face_index"] = import_settings_data->get("face_index"); main_settings["antialiased"] = import_settings_data->get("antialiased"); main_settings["generate_mipmaps"] = import_settings_data->get("generate_mipmaps"); main_settings["multichannel_signed_distance_field"] = import_settings_data->get("multichannel_signed_distance_field"); @@ -1299,6 +1304,7 @@ void DynamicFontImportSettings::open_settings(const String &p_path) { import_settings_data->notify_property_list_changed(); if (font_preview->get_data_count() > 0) { + font_preview->get_data(0)->set_face_index(import_settings_data->get("face_index")); font_preview->get_data(0)->set_antialiased(import_settings_data->get("antialiased")); font_preview->get_data(0)->set_multichannel_signed_distance_field(import_settings_data->get("multichannel_signed_distance_field")); font_preview->get_data(0)->set_msdf_pixel_range(import_settings_data->get("msdf_pixel_range")); @@ -1360,6 +1366,7 @@ DynamicFontImportSettings *DynamicFontImportSettings::get_singleton() { DynamicFontImportSettings::DynamicFontImportSettings() { singleton = this; + options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::INT, "face_index"), 0)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "antialiased"), true)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "generate_mipmaps"), false)); options_general.push_back(ResourceImporter::ImportOption(PropertyInfo(Variant::BOOL, "multichannel_signed_distance_field", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true)); @@ -1448,7 +1455,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() { font_preview_label->add_theme_font_size_override("font_size", 200 * EDSCALE); font_preview_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); font_preview_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); - font_preview_label->set_autowrap_mode(Label::AUTOWRAP_ARBITRARY); + font_preview_label->set_autowrap_mode(TextServer::AUTOWRAP_ARBITRARY); font_preview_label->set_clip_text(true); font_preview_label->set_v_size_flags(Control::SIZE_EXPAND_FILL); font_preview_label->set_h_size_flags(Control::SIZE_EXPAND_FILL); @@ -1468,7 +1475,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() { page2_description = memnew(Label); page2_description->set_text(TTR("Add font size, variation coordinates, and extra spacing combinations to pre-render:")); page2_description->set_h_size_flags(Control::SIZE_EXPAND_FILL); - page2_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + page2_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); page2_vb->add_child(page2_description); HSplitContainer *page2_hb = memnew(HSplitContainer); @@ -1520,7 +1527,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() { page3_description = memnew(Label); page3_description->set_text(TTR("Enter a text to shape and add all required glyphs to pre-render list:")); page3_description->set_h_size_flags(Control::SIZE_EXPAND_FILL); - page3_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + page3_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); page3_vb->add_child(page3_description); HBoxContainer *ot_hb = memnew(HBoxContainer); @@ -1577,7 +1584,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() { page4_description = memnew(Label); page4_description->set_text(TTR("Add or remove additional glyphs from the character map to pre-render list:\nNote: Some stylistic alternatives and glyph variants do not have one-to-one correspondence to character, and not shown in this map, use \"Glyphs from the text\" to add these.")); page4_description->set_h_size_flags(Control::SIZE_EXPAND_FILL); - page4_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + page4_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); page4_vb->add_child(page4_description); HSplitContainer *glyphs_split = memnew(HSplitContainer); @@ -1628,7 +1635,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() { page5_description = memnew(Label); page5_description->set_text(TTR("Add or remove language and script support overrides, to control fallback font selection order:")); page5_description->set_h_size_flags(Control::SIZE_EXPAND_FILL); - page5_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + page5_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); page5_vb->add_child(page5_description); HBoxContainer *hb_lang = memnew(HBoxContainer); diff --git a/editor/import/resource_importer_dynamic_font.cpp b/editor/import/resource_importer_dynamic_font.cpp index 04f6a0b7af..a92b0fe280 100644 --- a/editor/import/resource_importer_dynamic_font.cpp +++ b/editor/import/resource_importer_dynamic_font.cpp @@ -50,7 +50,9 @@ void ResourceImporterDynamicFont::get_recognized_extensions(List<String> *p_exte if (p_extensions) { #ifdef MODULE_FREETYPE_ENABLED p_extensions->push_back("ttf"); + p_extensions->push_back("ttc"); p_extensions->push_back("otf"); + p_extensions->push_back("otc"); p_extensions->push_back("woff"); p_extensions->push_back("woff2"); p_extensions->push_back("pfb"); @@ -101,6 +103,8 @@ String ResourceImporterDynamicFont::get_preset_name(int p_idx) const { void ResourceImporterDynamicFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const { bool msdf = p_preset == PRESET_MSDF; + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "face_index"), 0)); + r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "antialiased"), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_mipmaps"), false)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "multichannel_signed_distance_field", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), (msdf) ? true : false)); @@ -179,6 +183,8 @@ void ResourceImporterDynamicFont::show_advanced_options(const String &p_path) { Error ResourceImporterDynamicFont::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) { print_verbose("Importing dynamic font from: " + p_source_file); + int face_index = p_options["face_index"]; + bool antialiased = p_options["antialiased"]; bool generate_mipmaps = p_options["generate_mipmaps"]; bool msdf = p_options["multichannel_signed_distance_field"]; @@ -200,6 +206,7 @@ Error ResourceImporterDynamicFont::import(const String &p_source_file, const Str Ref<FontData> font; font.instantiate(); font->set_data(data); + font->set_face_index(face_index); font->set_antialiased(antialiased); font->set_generate_mipmaps(generate_mipmaps); font->set_multichannel_signed_distance_field(msdf); diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 80230bc316..f2975b1d7a 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -658,6 +658,44 @@ Node *ResourceImporterScene::_pre_fix_node(Node *p_node, Node *p_root, HashMap<R } } } + } else if (_teststr(name, "vehicle")) { + if (isroot) { + return p_node; + } + + Node *owner = p_node->get_owner(); + Node3D *s = Object::cast_to<Node3D>(p_node); + VehicleBody3D *bv = memnew(VehicleBody3D); + String n = _fixstr(p_node->get_name(), "vehicle"); + bv->set_name(n); + p_node->replace_by(bv); + p_node->set_name(n); + bv->add_child(p_node); + bv->set_owner(owner); + p_node->set_owner(owner); + bv->set_transform(s->get_transform()); + s->set_transform(Transform3D()); + + p_node = bv; + } else if (_teststr(name, "wheel")) { + if (isroot) { + return p_node; + } + + Node *owner = p_node->get_owner(); + Node3D *s = Object::cast_to<Node3D>(p_node); + VehicleWheel3D *bv = memnew(VehicleWheel3D); + String n = _fixstr(p_node->get_name(), "wheel"); + bv->set_name(n); + p_node->replace_by(bv); + p_node->set_name(n); + bv->add_child(p_node); + bv->set_owner(owner); + p_node->set_owner(owner); + bv->set_transform(s->get_transform()); + s->set_transform(Transform3D()); + + p_node = bv; } else if (Object::cast_to<ImporterMeshInstance3D>(p_node)) { //last attempt, maybe collision inside the mesh data diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp index 71b8c54422..deb3047864 100644 --- a/editor/import/resource_importer_texture.cpp +++ b/editor/import/resource_importer_texture.cpp @@ -104,13 +104,13 @@ void ResourceImporterTexture::update_imports() { bool changed = false; if (E.value.flags & MAKE_NORMAL_FLAG && int(cf->get_value("params", "compress/normal_map")) == 0) { - print_line(vformat("%s: Texture detected as used as a normal map in 3D. Enabling red-green texture compression to reduce memory usage (blue channel is discarded).", String(E.key))); + print_line(vformat(TTR("%s: Texture detected as used as a normal map in 3D. Enabling red-green texture compression to reduce memory usage (blue channel is discarded)."), String(E.key))); cf->set_value("params", "compress/normal_map", 1); changed = true; } if (E.value.flags & MAKE_ROUGHNESS_FLAG && int(cf->get_value("params", "roughness/mode")) == 0) { - print_line(vformat("%s: Texture detected as used as a roughness map in 3D. Enabling roughness limiter based on the detected associated normal map at %s.", String(E.key), E.value.normal_path_for_roughness)); + print_line(vformat(TTR("%s: Texture detected as used as a roughness map in 3D. Enabling roughness limiter based on the detected associated normal map at %s."), String(E.key), E.value.normal_path_for_roughness)); cf->set_value("params", "roughness/mode", E.value.channel_for_roughness + 2); cf->set_value("params", "roughness/src_normal", E.value.normal_path_for_roughness); changed = true; @@ -127,7 +127,7 @@ void ResourceImporterTexture::update_imports() { cf->set_value("params", "compress/mode", COMPRESS_BASIS_UNIVERSAL); compress_string = "Basis Universal"; } - print_line(vformat("%s: Texture detected as used in 3D. Enabling mipmap generation and setting the texture compression mode to %s.", String(E.key), compress_string)); + print_line(vformat(TTR("%s: Texture detected as used in 3D. Enabling mipmap generation and setting the texture compression mode to %s."), String(E.key), compress_string)); cf->set_value("params", "mipmaps/generate", true); changed = true; } diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 9eb2706d8a..6bb71ff491 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -685,7 +685,7 @@ ImportDock::ImportDock() { select_a_resource = memnew(Label); select_a_resource->set_text(TTR("Select a resource file in the filesystem or in the inspector to adjust import settings.")); - select_a_resource->set_autowrap_mode(Label::AUTOWRAP_WORD); + select_a_resource->set_autowrap_mode(TextServer::AUTOWRAP_WORD); select_a_resource->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); select_a_resource->set_v_size_flags(SIZE_EXPAND_FILL); select_a_resource->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index 18545d3c9a..986370f537 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -134,7 +134,7 @@ NodeDock::NodeDock() { select_a_node->set_v_size_flags(SIZE_EXPAND_FILL); select_a_node->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); select_a_node->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - select_a_node->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + select_a_node->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); add_child(select_a_node); } diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index ed908e413c..cae33edecb 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -419,12 +419,12 @@ void AnimationLibraryEditor::_item_renamed() { } } -void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int p_button) { +void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int p_id, MouseButton p_button) { if (p_item->get_parent() == tree->get_root()) { // Library StringName lib_name = p_item->get_metadata(0); Ref<AnimationLibrary> al = player->call("get_animation_library", lib_name); - switch (p_button) { + switch (p_id) { case LIB_BUTTON_ADD: { add_library_dialog->set_title(TTR("Animation Name:")); add_library_name->set_text(""); @@ -519,7 +519,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int Ref<AnimationLibrary> al = player->call("get_animation_library", lib_name); Ref<Animation> anim = al->get_animation(anim_name); ERR_FAIL_COND(!anim.is_valid()); - switch (p_button) { + switch (p_id) { case ANIM_BUTTON_COPY: { if (anim->get_name() == "") { anim->set_name(anim_name); // Keep the name around diff --git a/editor/plugins/animation_library_editor.h b/editor/plugins/animation_library_editor.h index 5bd4e8d9e2..bf89508321 100644 --- a/editor/plugins/animation_library_editor.h +++ b/editor/plugins/animation_library_editor.h @@ -99,7 +99,7 @@ class AnimationLibraryEditor : public AcceptDialog { void _load_file(String p_path); void _item_renamed(); - void _button_pressed(TreeItem *p_item, int p_column, int p_button); + void _button_pressed(TreeItem *p_item, int p_column, int p_id, MouseButton p_button); void _file_popup_selected(int p_id); diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 98ccc1fdbe..e5ca5d66e8 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -1053,7 +1053,7 @@ void AnimationPlayerEditor::_animation_duplicate() { _update_name_dialog_library_dropdown(); name_dialog_op = TOOL_DUPLICATE_ANIM; - name_dialog->set_title("Duplicate Animation"); + name_dialog->set_title(TTR("Duplicate Animation")); name_title->set_text(TTR("Duplicated Animation Name:")); name->set_text(new_name); name_dialog->popup_centered(Size2(300, 90)); diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 2ba2466646..00cc5a6ca0 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -817,11 +817,11 @@ bool AnimationNodeStateMachineEditor::_create_submenu(PopupMenu *p_menu, Ref<Ani Vector<Ref<AnimationNodeStateMachine>> parents = p_parents; if (from_root) { - Ref<AnimationNodeStateMachine> prev = p_nodesm->get_prev_state_machine(); + AnimationNodeStateMachine *prev = p_nodesm->get_prev_state_machine(); - while (prev.is_valid()) { + while (prev != nullptr) { parents.push_back(prev); - p_nodesm = prev; + p_nodesm = Ref<AnimationNodeStateMachine>(prev); prev_path += "../"; prev = prev->get_prev_state_machine(); } diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index bfe9e202d6..1ea0299d4e 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -1289,7 +1289,7 @@ void CanvasItemEditor::_zoom_callback(Vector2 p_scroll_vec, Vector2 p_origin, bo zoom_widget->set_zoom_by_increments(-scroll_sign, p_alt); if (!Math::is_equal_approx(ABS(p_scroll_vec.y), (real_t)1.0)) { // Handle high-precision (analog) scrolling. - zoom_widget->set_zoom(zoom * ((zoom_widget->get_zoom() / zoom - 1.f) * p_scroll_vec.y + 1.f)); + zoom_widget->set_zoom(zoom * ((zoom_widget->get_zoom() / zoom - 1.f) * ABS(p_scroll_vec.y) + 1.f)); } _zoom_on_position(zoom_widget->get_zoom(), p_origin); } @@ -4089,6 +4089,8 @@ void CanvasItemEditor::_button_tool_select(int p_index) { void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation, bool p_scale, bool p_on_existing) { const HashMap<Node *, Object *> &selection = editor_selection->get_selection(); + AnimationTrackEditor *te = AnimationPlayerEditor::get_singleton()->get_track_editor(); + te->make_insert_queue(); for (const KeyValue<Node *, Object *> &E : selection) { CanvasItem *canvas_item = Object::cast_to<CanvasItem>(E.key); if (!canvas_item || !canvas_item->is_visible_in_tree()) { @@ -4103,13 +4105,13 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation, Node2D *n2d = Object::cast_to<Node2D>(canvas_item); if (key_pos && p_location) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), p_on_existing); + te->insert_node_value_key(n2d, "position", n2d->get_position(), p_on_existing); } if (key_rot && p_rotation) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "rotation", n2d->get_rotation(), p_on_existing); + te->insert_node_value_key(n2d, "rotation", n2d->get_rotation(), p_on_existing); } if (key_scale && p_scale) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(n2d, "scale", n2d->get_scale(), p_on_existing); + te->insert_node_value_key(n2d, "scale", n2d->get_scale(), p_on_existing); } if (n2d->has_meta("_edit_bone_") && n2d->get_parent_item()) { @@ -4135,13 +4137,13 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation, if (has_chain && ik_chain.size()) { for (Node2D *&F : ik_chain) { if (key_pos) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F, "position", F->get_position(), p_on_existing); + te->insert_node_value_key(F, "position", F->get_position(), p_on_existing); } if (key_rot) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F, "rotation", F->get_rotation(), p_on_existing); + te->insert_node_value_key(F, "rotation", F->get_rotation(), p_on_existing); } if (key_scale) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(F, "scale", F->get_scale(), p_on_existing); + te->insert_node_value_key(F, "scale", F->get_scale(), p_on_existing); } } } @@ -4151,16 +4153,17 @@ void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation, Control *ctrl = Object::cast_to<Control>(canvas_item); if (key_pos) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), p_on_existing); + te->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), p_on_existing); } if (key_rot) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation(), p_on_existing); + te->insert_node_value_key(ctrl, "rect_rotation", ctrl->get_rotation(), p_on_existing); } if (key_scale) { - AnimationPlayerEditor::get_singleton()->get_track_editor()->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), p_on_existing); + te->insert_node_value_key(ctrl, "rect_size", ctrl->get_size(), p_on_existing); } } } + te->commit_insert_queue(); } void CanvasItemEditor::_update_override_camera_button(bool p_game_running) { diff --git a/editor/plugins/control_editor_plugin.cpp b/editor/plugins/control_editor_plugin.cpp index ebb0da1ad7..3adaf8f601 100644 --- a/editor/plugins/control_editor_plugin.cpp +++ b/editor/plugins/control_editor_plugin.cpp @@ -120,7 +120,7 @@ ControlPositioningWarning::ControlPositioningWarning() { grid->add_child(title_icon); title_label = memnew(Label); - title_label->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD); + title_label->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD); title_label->set_h_size_flags(Control::SIZE_EXPAND_FILL); title_label->set_vertical_alignment(VerticalAlignment::VERTICAL_ALIGNMENT_CENTER); grid->add_child(title_label); @@ -135,7 +135,7 @@ ControlPositioningWarning::ControlPositioningWarning() { grid->add_child(hint_filler_left); hint_label = memnew(Label); - hint_label->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD); + hint_label->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD); hint_label->set_h_size_flags(Control::SIZE_EXPAND_FILL); hint_label->set_vertical_alignment(VerticalAlignment::VERTICAL_ALIGNMENT_CENTER); hint_label->hide(); diff --git a/editor/plugins/input_event_editor_plugin.cpp b/editor/plugins/input_event_editor_plugin.cpp index fb0e260388..153eab32d2 100644 --- a/editor/plugins/input_event_editor_plugin.cpp +++ b/editor/plugins/input_event_editor_plugin.cpp @@ -80,12 +80,11 @@ void InputEventConfigContainer::set_event(const Ref<InputEvent> &p_event) { InputEventConfigContainer::InputEventConfigContainer() { input_event_text = memnew(Label); input_event_text->set_h_size_flags(SIZE_EXPAND_FILL); - input_event_text->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD_SMART); + input_event_text->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD_SMART); input_event_text->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); add_child(input_event_text); - open_config_button = memnew(Button); - open_config_button->set_text(TTR("Configure")); + open_config_button = EditorInspector::create_inspector_action_button(TTR("Configure")); open_config_button->connect("pressed", callable_mp(this, &InputEventConfigContainer::_configure_pressed)); add_child(open_config_button); diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp index d85087b5ea..d1f858315c 100644 --- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp @@ -350,8 +350,8 @@ struct MeshInstance3DEditorEdgeSort { Vector2 b; static uint32_t hash(const MeshInstance3DEditorEdgeSort &p_edge) { - uint32_t h = hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.a)); - return hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.b), h); + uint32_t h = hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.a)); + return hash_fmix32(hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.b), h)); } bool operator==(const MeshInstance3DEditorEdgeSort &p_b) const { diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 9f4842a5a1..815d0a2425 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -2412,6 +2412,18 @@ void Node3DEditorViewport::_project_settings_changed() { const float mesh_lod_threshold = GLOBAL_GET("rendering/mesh_lod/lod_change/threshold_pixels"); viewport->set_mesh_lod_threshold(mesh_lod_threshold); + + const Viewport::Scaling3DMode scaling_3d_mode = Viewport::Scaling3DMode(int(GLOBAL_GET("rendering/scaling_3d/mode"))); + viewport->set_scaling_3d_mode(scaling_3d_mode); + + const float scaling_3d_scale = GLOBAL_GET("rendering/scaling_3d/scale"); + viewport->set_scaling_3d_scale(scaling_3d_scale); + + const float fsr_sharpness = GLOBAL_GET("rendering/scaling_3d/fsr_sharpness"); + viewport->set_fsr_sharpness(fsr_sharpness); + + const float fsr_mipmap_bias = GLOBAL_GET("rendering/scaling_3d/fsr_mipmap_bias"); + viewport->set_fsr_mipmap_bias(fsr_mipmap_bias); } void Node3DEditorViewport::_notification(int p_what) { diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index b9d99fcc93..6ab2366a44 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -3547,7 +3547,7 @@ void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_numb ShaderEditorPlugin *shader_editor = Object::cast_to<ShaderEditorPlugin>(EditorNode::get_singleton()->get_editor_data().get_editor("Shader")); shader_editor->edit(res.ptr()); shader_editor->make_visible(true); - shader_editor->get_shader_editor()->goto_line_selection(line_number - 1, begin, end); + shader_editor->get_shader_editor(res)->goto_line_selection(line_number - 1, begin, end); return; } else if (fpath.get_extension() == "tscn") { EditorNode::get_singleton()->load_scene(fpath); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index c13d0dc197..04b407ce65 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -38,8 +38,12 @@ #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" +#include "editor/filesystem_dock.h" +#include "editor/plugins/visual_shader_editor_plugin.h" #include "editor/project_settings_editor.h" #include "editor/property_editor.h" +#include "editor/shader_create_dialog.h" +#include "scene/gui/split_container.h" #include "servers/display_server.h" #include "servers/rendering/shader_types.h" @@ -836,50 +840,216 @@ ShaderEditor::ShaderEditor() { _editor_settings_changed(); } +void ShaderEditorPlugin::_update_shader_list() { + shader_list->clear(); + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + String text; + String path = edited_shaders[i].shader->get_path(); + String _class = edited_shaders[i].shader->get_class(); + + if (path.is_resource_file()) { + text = path.get_file(); + } else if (edited_shaders[i].shader->get_name() != "") { + text = edited_shaders[i].shader->get_name(); + } else { + text = _class + ":" + itos(edited_shaders[i].shader->get_instance_id()); + } + + if (!shader_list->has_theme_icon(_class, SNAME("EditorIcons"))) { + _class = "Resource"; + } + Ref<Texture2D> icon = shader_list->get_theme_icon(_class, SNAME("EditorIcons")); + + shader_list->add_item(text, icon); + shader_list->set_item_tooltip(shader_list->get_item_count() - 1, path); + } + + if (shader_tabs->get_tab_count()) { + shader_list->select(shader_tabs->get_current_tab()); + } + + for (int i = 1; i < FILE_MAX; i++) { + file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(i), edited_shaders.size() == 0); + } +} + void ShaderEditorPlugin::edit(Object *p_object) { Shader *s = Object::cast_to<Shader>(p_object); - shader_editor->edit(s); + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + if (edited_shaders[i].shader.ptr() == s) { + // Exists, select. + shader_tabs->set_current_tab(i); + shader_list->select(i); + return; + } + } + // Add. + EditedShader es; + es.shader = Ref<Shader>(s); + Ref<VisualShader> vs = es.shader; + if (vs.is_valid()) { + es.visual_shader_editor = memnew(VisualShaderEditor); + es.visual_shader_editor->edit(vs.ptr()); + shader_tabs->add_child(es.visual_shader_editor); + } else { + es.shader_editor = memnew(ShaderEditor); + es.shader_editor->edit(s); + shader_tabs->add_child(es.shader_editor); + } + shader_tabs->set_current_tab(shader_tabs->get_tab_count() - 1); + edited_shaders.push_back(es); + _update_shader_list(); } bool ShaderEditorPlugin::handles(Object *p_object) const { - Shader *shader = Object::cast_to<Shader>(p_object); - return shader != nullptr && shader->is_text_shader(); + return Object::cast_to<Shader>(p_object) != nullptr; } void ShaderEditorPlugin::make_visible(bool p_visible) { if (p_visible) { - button->show(); - EditorNode::get_singleton()->make_bottom_panel_item_visible(shader_editor); - - } else { - button->hide(); - if (shader_editor->is_visible_in_tree()) { - EditorNode::get_singleton()->hide_bottom_panel(); - } - shader_editor->apply_shaders(); + EditorNode::get_singleton()->make_bottom_panel_item_visible(main_split); } } void ShaderEditorPlugin::selected_notify() { - shader_editor->ensure_select_current(); +} + +ShaderEditor *ShaderEditorPlugin::get_shader_editor(const Ref<Shader> &p_for_shader) { + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + if (edited_shaders[i].shader == p_for_shader) { + return edited_shaders[i].shader_editor; + } + } + return nullptr; } void ShaderEditorPlugin::save_external_data() { - shader_editor->save_external_data(); + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + if (edited_shaders[i].shader_editor) { + edited_shaders[i].shader_editor->save_external_data(); + } + } } void ShaderEditorPlugin::apply_changes() { - shader_editor->apply_shaders(); + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + if (edited_shaders[i].shader_editor) { + edited_shaders[i].shader_editor->apply_shaders(); + } + } +} + +void ShaderEditorPlugin::_shader_selected(int p_index) { + shader_tabs->set_current_tab(p_index); +} + +void ShaderEditorPlugin::_close_shader(int p_index) { + int index = shader_tabs->get_current_tab(); + ERR_FAIL_INDEX(index, shader_tabs->get_tab_count()); + Control *c = shader_tabs->get_tab_control(index); + memdelete(c); + edited_shaders.remove_at(index); + _update_shader_list(); +} + +void ShaderEditorPlugin::_resource_saved(Object *obj) { + // May have been renamed on save. + for (uint32_t i = 0; i < edited_shaders.size(); i++) { + if (edited_shaders[i].shader.ptr() == obj) { + _update_shader_list(); + return; + } + } +} + +void ShaderEditorPlugin::_menu_item_pressed(int p_index) { + switch (p_index) { + case FILE_NEW: { + String base_path = FileSystemDock::get_singleton()->get_current_path(); + shader_create_dialog->config(base_path.plus_file("new_shader"), false, false, 0); + shader_create_dialog->popup_centered(); + } break; + case FILE_OPEN: { + InspectorDock::get_singleton()->open_resource("Shader"); + } break; + case FILE_SAVE: { + int index = shader_tabs->get_current_tab(); + ERR_FAIL_INDEX(index, shader_tabs->get_tab_count()); + EditorNode::get_singleton()->save_resource(edited_shaders[index].shader); + } break; + case FILE_SAVE_AS: { + int index = shader_tabs->get_current_tab(); + ERR_FAIL_INDEX(index, shader_tabs->get_tab_count()); + String path = edited_shaders[index].shader->get_path(); + if (!path.is_resource_file()) { + path = ""; + } + EditorNode::get_singleton()->save_resource_as(edited_shaders[index].shader, path); + } break; + case FILE_INSPECT: { + int index = shader_tabs->get_current_tab(); + ERR_FAIL_INDEX(index, shader_tabs->get_tab_count()); + EditorNode::get_singleton()->push_item(edited_shaders[index].shader.ptr()); + } break; + case FILE_CLOSE: { + _close_shader(shader_tabs->get_current_tab()); + } break; + } +} + +void ShaderEditorPlugin::_shader_created(Ref<Shader> p_shader) { + EditorNode::get_singleton()->push_item(p_shader.ptr()); } ShaderEditorPlugin::ShaderEditorPlugin() { - shader_editor = memnew(ShaderEditor); + main_split = memnew(HSplitContainer); + + VBoxContainer *vb = memnew(VBoxContainer); + + HBoxContainer *file_hb = memnew(HBoxContainer); + vb->add_child(file_hb); + file_menu = memnew(MenuButton); + file_menu->set_text(TTR("File")); + file_menu->get_popup()->add_item(TTR("New Shader"), FILE_NEW); + file_menu->get_popup()->add_separator(); + file_menu->get_popup()->add_item(TTR("Load Shader"), FILE_OPEN); + file_menu->get_popup()->add_item(TTR("Save Shader"), FILE_SAVE); + file_menu->get_popup()->add_item(TTR("Save Shader As"), FILE_SAVE_AS); + file_menu->get_popup()->add_separator(); + file_menu->get_popup()->add_item(TTR("Open Shader in Inspector"), FILE_INSPECT); + file_menu->get_popup()->add_separator(); + file_menu->get_popup()->add_item(TTR("Close Shader"), FILE_CLOSE); + file_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditorPlugin::_menu_item_pressed)); + file_hb->add_child(file_menu); + + for (int i = 1; i < FILE_MAX; i++) { + file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(i), true); + } + + shader_list = memnew(ItemList); + shader_list->set_v_size_flags(Control::SIZE_EXPAND_FILL); + vb->add_child(shader_list); + shader_list->connect("item_selected", callable_mp(this, &ShaderEditorPlugin::_shader_selected)); + + main_split->add_child(vb); + vb->set_custom_minimum_size(Size2(200, 300) * EDSCALE); + + shader_tabs = memnew(TabContainer); + shader_tabs->set_tabs_visible(false); + shader_tabs->set_h_size_flags(Control::SIZE_EXPAND_FILL); + main_split->add_child(shader_tabs); + Ref<StyleBoxEmpty> empty; + empty.instantiate(); + shader_tabs->add_theme_style_override("panel", empty); + + button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Shader Editor"), main_split); - shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE); - button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Shader"), shader_editor); - button->hide(); + // Defer connect because Editor class is not in the binding system yet. + EditorNode::get_singleton()->call_deferred("connect", "resource_saved", callable_mp(this, &ShaderEditorPlugin::_resource_saved), varray(), CONNECT_DEFERRED); - _2d = false; + shader_create_dialog = memnew(ShaderCreateDialog); + vb->add_child(shader_create_dialog); + shader_create_dialog->connect("shader_created", callable_mp(this, &ShaderEditorPlugin::_shader_created)); } ShaderEditorPlugin::~ShaderEditorPlugin() { diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index bd0c2db824..e1e815f939 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -42,6 +42,11 @@ #include "scene/resources/shader.h" #include "servers/rendering/shader_warnings.h" +class ItemList; +class VisualShaderEditor; +class HSplitContainer; +class ShaderCreateDialog; + class ShaderTextEditor : public CodeTextEditor { GDCLASS(ShaderTextEditor, CodeTextEditor); @@ -160,9 +165,40 @@ public: class ShaderEditorPlugin : public EditorPlugin { GDCLASS(ShaderEditorPlugin, EditorPlugin); - bool _2d; - ShaderEditor *shader_editor = nullptr; + struct EditedShader { + Ref<Shader> shader; + ShaderEditor *shader_editor = nullptr; + VisualShaderEditor *visual_shader_editor = nullptr; + }; + + LocalVector<EditedShader> edited_shaders; + + enum { + FILE_NEW, + FILE_OPEN, + FILE_SAVE, + FILE_SAVE_AS, + FILE_INSPECT, + FILE_CLOSE, + FILE_MAX + }; + + HSplitContainer *main_split = nullptr; + ItemList *shader_list = nullptr; + TabContainer *shader_tabs = nullptr; + Button *button = nullptr; + MenuButton *file_menu = nullptr; + + ShaderCreateDialog *shader_create_dialog = nullptr; + + void _update_shader_list(); + void _shader_selected(int p_index); + void _menu_item_pressed(int p_index); + void _resource_saved(Object *obj); + void _close_shader(int p_index); + + void _shader_created(Ref<Shader> p_shader); public: virtual String get_name() const override { return "Shader"; } @@ -172,7 +208,7 @@ public: virtual void make_visible(bool p_visible) override; virtual void selected_notify() override; - ShaderEditor *get_shader_editor() const { return shader_editor; } + ShaderEditor *get_shader_editor(const Ref<Shader> &p_for_shader); virtual void save_external_data() override; virtual void apply_changes() override; diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 418115c041..c7dc61b3a8 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -1119,7 +1119,7 @@ ThemeItemImportTree::ThemeItemImportTree() { select_icons_warning = memnew(Label); select_icons_warning->set_text(TTR("Caution: Adding icon data may considerably increase the size of your Theme resource.")); - select_icons_warning->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + select_icons_warning->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); select_icons_warning->set_h_size_flags(Control::SIZE_EXPAND_FILL); select_icons_warning_hb->add_child(select_icons_warning); } @@ -2021,7 +2021,7 @@ ThemeItemEditorDialog::ThemeItemEditorDialog(ThemeTypeEditor *p_theme_type_edito edit_items_message->set_mouse_filter(Control::MOUSE_FILTER_STOP); edit_items_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); edit_items_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); - edit_items_message->set_autowrap_mode(Label::AUTOWRAP_WORD); + edit_items_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD); edit_items_tree->add_child(edit_items_message); edit_theme_item_dialog = memnew(ConfirmationDialog); @@ -3443,7 +3443,7 @@ ThemeTypeEditor::ThemeTypeEditor() { type_variation_locked = memnew(Label); type_variation_vb->add_child(type_variation_locked); type_variation_locked->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - type_variation_locked->set_autowrap_mode(Label::AUTOWRAP_WORD); + type_variation_locked->set_autowrap_mode(TextServer::AUTOWRAP_WORD); type_variation_locked->set_text(TTR("A type associated with a built-in class cannot be marked as a variation of another type.")); type_variation_locked->hide(); diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp index d035c038d3..468681c967 100644 --- a/editor/plugins/tiles/tile_data_editors.cpp +++ b/editor/plugins/tiles/tile_data_editors.cpp @@ -1147,7 +1147,7 @@ void TileDataDefaultEditor::setup_property_editor(Variant::Type p_type, String p property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, p_type, p_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT); property_editor->set_object_and_property(dummy_object, p_property); if (p_label.is_empty()) { - property_editor->set_label(p_property); + property_editor->set_label(EditorPropertyNameProcessor::get_singleton()->process_name(p_property, EditorPropertyNameProcessor::get_default_inspector_style())); } else { property_editor->set_label(p_label); } @@ -1173,6 +1173,7 @@ TileDataDefaultEditor::TileDataDefaultEditor() { label = memnew(Label); label->set_text(TTR("Painting:")); + label->set_theme_type_variation("HeaderSmall"); add_child(label); toolbar->add_child(memnew(VSeparator)); @@ -1676,10 +1677,15 @@ void TileDataTerrainsEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas Vector<Color> color; color.push_back(Color(1.0, 1.0, 1.0, 0.5)); + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) { + p_canvas_item->draw_set_transform_matrix(p_transform * xform); + p_canvas_item->draw_polygon(polygon, color); + } for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) { p_canvas_item->draw_set_transform_matrix(p_transform * xform); p_canvas_item->draw_polygon(polygon, color); @@ -1806,10 +1812,19 @@ void TileDataTerrainsEditor::forward_draw_over_atlas(TileAtlasView *p_tile_atlas Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + for (int j = 0; j < polygon.size(); j++) { + polygon.write[j] += position; + } + if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).is_empty()) { + // Draw terrain. + p_canvas_item->draw_polygon(polygon, color); + } + for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); for (int j = 0; j < polygon.size(); j++) { polygon.write[j] += position; } @@ -1850,10 +1865,16 @@ void TileDataTerrainsEditor::forward_draw_over_alternatives(TileAtlasView *p_til Vector<Color> color; color.push_back(Color(1.0, 1.0, 1.0, 0.5)); + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) { + p_canvas_item->draw_set_transform_matrix(p_transform * xform); + p_canvas_item->draw_polygon(polygon, color); + } + for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(xform.affine_inverse().xform(mouse_pos), polygon)) { p_canvas_item->draw_set_transform_matrix(p_transform * xform); p_canvas_item->draw_polygon(polygon, color); @@ -1926,10 +1947,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t if (!drag_modified.has(cell)) { Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -1958,10 +1980,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t if (!drag_modified.has(cell)) { Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -1970,12 +1993,17 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t // Set the terrains bits. Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(tile_data->get_terrain_set()); + if (Geometry2D::is_segment_intersecting_polygon(mm->get_position() - position, drag_last_pos - position, polygon)) { + tile_data->set_terrain(terrain); + } for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - if (tile_data->is_valid_peering_bit_terrain(bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(tile_data->get_terrain_set(), bit); + if (tile_data->is_valid_terrain_peering_bit(bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(tile_data->get_terrain_set(), bit); if (Geometry2D::is_segment_intersecting_polygon(mm->get_position() - position, drag_last_pos - position, polygon)) { - tile_data->set_peering_bit_terrain(bit, terrain); + tile_data->set_terrain_peering_bit(bit, terrain); } } } @@ -2000,12 +2028,17 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); dummy_object->set("terrain_set", terrain_set); dummy_object->set("terrain", -1); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { + dummy_object->set("terrain", tile_data->get_terrain()); + } for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { - dummy_object->set("terrain", tile_data->get_peering_bit_terrain(bit)); + dummy_object->set("terrain", tile_data->get_terrain_peering_bit(bit)); } } } @@ -2044,10 +2077,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t // Save the old terrain_set and terrains bits. Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2085,10 +2119,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t // Save the old terrain_set and terrains bits. Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2097,12 +2132,16 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { + tile_data->set_terrain(terrain); + } for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { - tile_data->set_peering_bit_terrain(bit, terrain); + tile_data->set_terrain_peering_bit(bit, terrain); } } } @@ -2138,10 +2177,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t TileData *tile_data = p_tile_set_atlas_source->get_tile_data(coords, 0); undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.alternative_tile), tile_data->get_terrain_set()); undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.alternative_tile), drag_painted_value); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.alternative_tile), tile_data->get_terrain()); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_data->is_valid_peering_bit_terrain(bit)) { - undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_peering_bit_terrain(bit)); + if (tile_data->is_valid_terrain_peering_bit(bit)) { + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_terrain_peering_bit(bit)); } } } @@ -2154,10 +2194,11 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t Vector2i coords = E.key.get_atlas_coords(); undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), drag_painted_value); undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), dict["terrain_set"]); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), dict["terrain"]); Array array = dict["terrain_peering_bits"]; for (int i = 0; i < array.size(); i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(dict["terrain_set"], bit)) { + if (tile_set->is_valid_terrain_peering_bit(dict["terrain_set"], bit)) { undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), array[i]); } } @@ -2172,13 +2213,15 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t for (KeyValue<TileMapCell, Variant> &E : drag_modified) { Dictionary dict = E.value; Vector2i coords = E.key.get_atlas_coords(); + undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), terrain); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), dict["terrain"]); Array array = dict["terrain_peering_bits"]; for (int i = 0; i < array.size(); i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), terrain); } - if (tile_set->is_valid_peering_bit_terrain(dict["terrain_set"], bit)) { + if (tile_set->is_valid_terrain_peering_bit(dict["terrain_set"], bit)) { undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), array[i]); } } @@ -2224,20 +2267,30 @@ void TileDataTerrainsEditor::forward_painting_atlas_gui_input(TileAtlasView *p_t Vector2i coords = E.get_atlas_coords(); TileData *tile_data = p_tile_set_atlas_source->get_tile_data(coords, 0); + Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); + Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + for (int j = 0; j < polygon.size(); j++) { + polygon.write[j] += position; + } + if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).is_empty()) { + // Draw terrain. + undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.alternative_tile), terrain); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.alternative_tile), tile_data->get_terrain()); + } + for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Rect2i texture_region = p_tile_set_atlas_source->get_tile_texture_region(coords); - Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, 0); - - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); for (int j = 0; j < polygon.size(); j++) { polygon.write[j] += position; } if (!Geometry2D::intersect_polygons(polygon, mouse_pos_rect_polygon).is_empty()) { // Draw bit. undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), terrain); - undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_peering_bit_terrain(bit)); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.alternative_tile), tile_data->get_terrain_peering_bit(bit)); } } } @@ -2267,10 +2320,11 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi if (!drag_modified.has(cell)) { Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2300,10 +2354,11 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi if (!drag_modified.has(cell)) { Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2312,12 +2367,18 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi // Set the terrains bits. Rect2i texture_region = p_tile_atlas_view->get_alternative_tile_rect(coords, alternative_tile); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, alternative_tile); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(tile_data->get_terrain_set()); + if (Geometry2D::is_segment_intersecting_polygon(mm->get_position() - position, drag_last_pos - position, polygon)) { + tile_data->set_terrain(terrain); + } + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); - if (tile_data->is_valid_peering_bit_terrain(bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(tile_data->get_terrain_set(), bit); + if (tile_data->is_valid_terrain_peering_bit(bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(tile_data->get_terrain_set(), bit); if (Geometry2D::is_segment_intersecting_polygon(mm->get_position() - position, drag_last_pos - position, polygon)) { - tile_data->set_peering_bit_terrain(bit, terrain); + tile_data->set_terrain_peering_bit(bit, terrain); } } } @@ -2343,12 +2404,18 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, alternative_tile); dummy_object->set("terrain_set", terrain_set); dummy_object->set("terrain", -1); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { + dummy_object->set("terrain", tile_data->get_terrain()); + } + for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { - dummy_object->set("terrain", tile_data->get_peering_bit_terrain(bit)); + dummy_object->set("terrain", tile_data->get_terrain_peering_bit(bit)); } } } @@ -2380,7 +2447,7 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi Array array; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2405,10 +2472,11 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi // Save the old terrain_set and terrains bits. Dictionary dict; dict["terrain_set"] = tile_data->get_terrain_set(); + dict["terrain"] = tile_data->get_terrain(); Array array; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - array.push_back(tile_data->is_valid_peering_bit_terrain(bit) ? tile_data->get_peering_bit_terrain(bit) : -1); + array.push_back(tile_data->is_valid_terrain_peering_bit(bit) ? tile_data->get_terrain_peering_bit(bit) : -1); } dict["terrain_peering_bits"] = array; drag_modified[cell] = dict; @@ -2416,12 +2484,17 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi // Set the terrain bit. Rect2i texture_region = p_tile_atlas_view->get_alternative_tile_rect(coords, alternative_tile); Vector2i position = texture_region.get_center() + p_tile_set_atlas_source->get_tile_effective_texture_offset(coords, alternative_tile); + + Vector<Vector2> polygon = tile_set->get_terrain_polygon(terrain_set); + if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { + tile_data->set_terrain(terrain); + } for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - Vector<Vector2> polygon = tile_set->get_terrain_bit_polygon(terrain_set, bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + polygon = tile_set->get_terrain_peering_bit_polygon(terrain_set, bit); if (Geometry2D::is_point_in_polygon(mb->get_position() - position, polygon)) { - tile_data->set_peering_bit_terrain(bit, terrain); + tile_data->set_terrain_peering_bit(bit, terrain); } } } @@ -2437,6 +2510,7 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi Vector2i coords = E.key.get_atlas_coords(); undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), dict["terrain_set"]); undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain_set", coords.x, coords.y, E.key.alternative_tile), drag_painted_value); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), dict["terrain"]); Array array = dict["terrain_peering_bits"]; for (int i = 0; i < array.size(); i++) { undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), array[i]); @@ -2452,13 +2526,15 @@ void TileDataTerrainsEditor::forward_painting_alternatives_gui_input(TileAtlasVi for (KeyValue<TileMapCell, Variant> &E : drag_modified) { Dictionary dict = E.value; Vector2i coords = E.key.get_atlas_coords(); + undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), terrain); + undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrain", coords.x, coords.y, E.key.alternative_tile), dict["terrain"]); Array array = dict["terrain_peering_bits"]; for (int i = 0; i < array.size(); i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { undo_redo->add_do_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), terrain); } - if (tile_set->is_valid_peering_bit_terrain(dict["terrain_set"], bit)) { + if (tile_set->is_valid_terrain_peering_bit(dict["terrain_set"], bit)) { undo_redo->add_undo_property(p_tile_set_atlas_source, vformat("%d:%d/%d/terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]), coords.x, coords.y, E.key.alternative_tile), array[i]); } } @@ -2491,7 +2567,8 @@ TileDataTerrainsEditor::TileDataTerrainsEditor() { undo_redo = EditorNode::get_undo_redo(); label = memnew(Label); - label->set_text("Painting:"); + label->set_text(TTR("Painting:")); + label->set_theme_type_variation("HeaderSmall"); add_child(label); // Toolbar diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp index cd8aca2a8e..77a3c07548 100644 --- a/editor/plugins/tiles/tile_map_editor.cpp +++ b/editor/plugins/tiles/tile_map_editor.cpp @@ -2028,7 +2028,6 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { // --- Toolbar --- toolbar = memnew(HBoxContainer); - toolbar->set_h_size_flags(Control::SIZE_EXPAND_FILL); HBoxContainer *tilemap_tiles_tools_buttons = memnew(HBoxContainer); @@ -2321,7 +2320,7 @@ Vector<TileMapEditorPlugin::TabData> TileMapEditorTerrainsPlugin::get_tabs() con return tabs; } -HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const HashMap<Vector2i, TileSet::TerrainsPattern> &p_to_paint, int p_terrain_set) const { +HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrain_path_or_connect(const Vector<Vector2i> &p_to_paint, int p_terrain_set, int p_terrain, bool p_connect) const { TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id)); if (!tile_map) { return HashMap<Vector2i, TileMapCell>(); @@ -2332,105 +2331,87 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrains(const return HashMap<Vector2i, TileMapCell>(); } - HashMap<Vector2i, TileMapCell> output; - - // Add the constraints from the added tiles. - RBSet<TileMap::TerrainConstraint> added_tiles_constraints_set; - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) { - Vector2i coords = E_to_paint.key; - TileSet::TerrainsPattern terrains_pattern = E_to_paint.value; - - RBSet<TileMap::TerrainConstraint> cell_constraints = tile_map->get_terrain_constraints_from_added_tile(coords, p_terrain_set, terrains_pattern); - for (const TileMap::TerrainConstraint &E : cell_constraints) { - added_tiles_constraints_set.insert(E); - } - } - - // Build the list of potential tiles to replace. - RBSet<Vector2i> potential_to_replace; - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) { - Vector2i coords = E_to_paint.key; - for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - if (tile_map->is_existing_neighbor(TileSet::CellNeighbor(i))) { - Vector2i neighbor = tile_map->get_neighbor_cell(coords, TileSet::CellNeighbor(i)); - if (!p_to_paint.has(neighbor)) { - potential_to_replace.insert(neighbor); - } - } - } + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_output; + if (p_connect) { + terrain_fill_output = tile_map->terrain_fill_connect(tile_map_layer, p_to_paint, p_terrain_set, p_terrain, false); + } else { + terrain_fill_output = tile_map->terrain_fill_path(tile_map_layer, p_to_paint, p_terrain_set, p_terrain, false); } - // Set of tiles to replace - RBSet<Vector2i> to_replace; - - // Add the central tiles to the one to replace. - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) { - to_replace.insert(E_to_paint.key); + // Make the painted path a set for faster lookups + HashSet<Vector2i> painted_set; + for (Vector2i coords : p_to_paint) { + painted_set.insert(coords); } - // Add the constraints from the surroundings of the modified areas. - RBSet<TileMap::TerrainConstraint> removed_cells_constraints_set; - bool to_replace_modified = true; - while (to_replace_modified) { - // Get the constraints from the removed cells. - removed_cells_constraints_set = tile_map->get_terrain_constraints_from_removed_cells_list(tile_map_layer, to_replace, p_terrain_set, false); - - // Filter the sources to make sure they are in the potential_to_replace. - RBMap<TileMap::TerrainConstraint, RBSet<Vector2i>> per_constraint_tiles; - for (const TileMap::TerrainConstraint &E : removed_cells_constraints_set) { - HashMap<Vector2i, TileSet::CellNeighbor> sources_of_constraint = E.get_overlapping_coords_and_peering_bits(); - for (const KeyValue<Vector2i, TileSet::CellNeighbor> &E_source_tile_of_constraint : sources_of_constraint) { - if (potential_to_replace.has(E_source_tile_of_constraint.key)) { - per_constraint_tiles[E].insert(E_source_tile_of_constraint.key); - } - } - } - - to_replace_modified = false; - for (const TileMap::TerrainConstraint &E : added_tiles_constraints_set) { - TileMap::TerrainConstraint c = E; - // Check if we have a conflict in constraints. - if (removed_cells_constraints_set.has(c) && removed_cells_constraints_set.find(c)->get().get_terrain() != c.get_terrain()) { - // If we do, we search for a neighbor to remove. - if (per_constraint_tiles.has(c) && !per_constraint_tiles[c].is_empty()) { - // Remove it. - Vector2i to_add_to_remove = per_constraint_tiles[c].front()->get(); - potential_to_replace.erase(to_add_to_remove); - to_replace.insert(to_add_to_remove); - to_replace_modified = true; - for (KeyValue<TileMap::TerrainConstraint, RBSet<Vector2i>> &E_source_tiles_of_constraint : per_constraint_tiles) { - E_source_tiles_of_constraint.value.erase(to_add_to_remove); + HashMap<Vector2i, TileMapCell> output; + for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : terrain_fill_output) { + if (painted_set.has(E.key)) { + // Paint a random tile with the correct terrain for the painted path. + output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + } else { + // Avoids updating the painted path from the output if the new pattern is the same as before. + bool keep_old = false; + TileMapCell cell = tile_map->get_cell(tile_map_layer, E.key); + if (cell.source_id != TileSet::INVALID_SOURCE) { + TileSetSource *source = *tile_set->get_source(cell.source_id); + TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source); + if (atlas_source) { + // Get tile data. + TileData *tile_data = atlas_source->get_tile_data(cell.get_atlas_coords(), cell.alternative_tile); + if (tile_data && tile_data->get_terrains_pattern() == E.value) { + keep_old = true; } - break; } } + if (!keep_old) { + output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + } } } + return output; +} - // Combine all constraints together. - RBSet<TileMap::TerrainConstraint> constraints = removed_cells_constraints_set; - for (const TileMap::TerrainConstraint &E : added_tiles_constraints_set) { - constraints.insert(E); +HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_terrain_pattern(const Vector<Vector2i> &p_to_paint, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const { + TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id)); + if (!tile_map) { + return HashMap<Vector2i, TileMapCell>(); } - // Remove the central tiles from the ones to replace. - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) { - to_replace.erase(E_to_paint.key); + Ref<TileSet> tile_set = tile_map->get_tileset(); + if (!tile_set.is_valid()) { + return HashMap<Vector2i, TileMapCell>(); } - // Run WFC to fill the holes with the constraints. - HashMap<Vector2i, TileSet::TerrainsPattern> wfc_output = tile_map->terrain_wave_function_collapse(to_replace, p_terrain_set, constraints); + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_output = tile_map->terrain_fill_pattern(tile_map_layer, p_to_paint, p_terrain_set, p_terrains_pattern, false); - // Actually paint the tiles. - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E_to_paint : p_to_paint) { - output[E_to_paint.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E_to_paint.value); + // Make the painted path a set for faster lookups + HashSet<Vector2i> painted_set; + for (Vector2i coords : p_to_paint) { + painted_set.insert(coords); } - // Use the WFC run for the output. - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : wfc_output) { - output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + HashMap<Vector2i, TileMapCell> output; + for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : terrain_fill_output) { + if (painted_set.has(E.key)) { + // Paint a random tile with the correct terrain for the painted path. + output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + } else { + // Avoids updating the painted path from the output if the new pattern is the same as before. + TileMapCell cell = tile_map->get_cell(tile_map_layer, E.key); + if (cell.source_id != TileSet::INVALID_SOURCE) { + TileSetSource *source = *tile_set->get_source(cell.source_id); + TileSetAtlasSource *atlas_source = Object::cast_to<TileSetAtlasSource>(source); + if (atlas_source) { + // Get tile data. + TileData *tile_data = atlas_source->get_tile_data(cell.get_atlas_coords(), cell.alternative_tile); + if (tile_data && !(tile_data->get_terrains_pattern() == E.value)) { + output[E.key] = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + } + } + } + } } - return output; } @@ -2445,19 +2426,21 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_line(Vector2i return HashMap<Vector2i, TileMapCell>(); } - TileSet::TerrainsPattern terrains_pattern; - if (p_erase) { - terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); - } else { - terrains_pattern = selected_terrains_pattern; - } + if (selected_type == SELECTED_TYPE_CONNECT) { + return _draw_terrain_path_or_connect(TileMapEditor::get_line(tile_map, p_start_cell, p_end_cell), selected_terrain_set, selected_terrain, true); + } else if (selected_type == SELECTED_TYPE_PATH) { + return _draw_terrain_path_or_connect(TileMapEditor::get_line(tile_map, p_start_cell, p_end_cell), selected_terrain_set, selected_terrain, false); + } else { // SELECTED_TYPE_PATTERN + TileSet::TerrainsPattern terrains_pattern; + if (p_erase) { + terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); + } else { + terrains_pattern = selected_terrains_pattern; + } - Vector<Vector2i> line = TileMapEditor::get_line(tile_map, p_start_cell, p_end_cell); - HashMap<Vector2i, TileSet::TerrainsPattern> to_draw; - for (int i = 0; i < line.size(); i++) { - to_draw[line[i]] = terrains_pattern; + Vector<Vector2i> line = TileMapEditor::get_line(tile_map, p_start_cell, p_end_cell); + return _draw_terrain_pattern(line, selected_terrain_set, terrains_pattern); } - return _draw_terrains(to_draw, selected_terrain_set); } HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase) { @@ -2471,25 +2454,29 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_rect(Vector2i return HashMap<Vector2i, TileMapCell>(); } - TileSet::TerrainsPattern terrains_pattern; - if (p_erase) { - terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); - } else { - terrains_pattern = selected_terrains_pattern; - } - Rect2i rect; rect.set_position(p_start_cell); rect.set_end(p_end_cell); rect = rect.abs(); - HashMap<Vector2i, TileSet::TerrainsPattern> to_draw; + Vector<Vector2i> to_draw; for (int x = rect.position.x; x <= rect.get_end().x; x++) { for (int y = rect.position.y; y <= rect.get_end().y; y++) { - to_draw[Vector2i(x, y)] = terrains_pattern; + to_draw.append(Vector2i(x, y)); } } - return _draw_terrains(to_draw, selected_terrain_set); + + if (selected_type == SELECTED_TYPE_CONNECT || selected_type == SELECTED_TYPE_PATH) { + return _draw_terrain_path_or_connect(to_draw, selected_terrain_set, selected_terrain, true); + } else { // SELECTED_TYPE_PATTERN + TileSet::TerrainsPattern terrains_pattern; + if (p_erase) { + terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); + } else { + terrains_pattern = selected_terrains_pattern; + } + return _draw_terrain_pattern(to_draw, selected_terrain_set, terrains_pattern); + } } RBSet<Vector2i> TileMapEditorTerrainsPlugin::_get_cells_for_bucket_fill(Vector2i p_coords, bool p_contiguous) { @@ -2614,20 +2601,23 @@ HashMap<Vector2i, TileMapCell> TileMapEditorTerrainsPlugin::_draw_bucket_fill(Ve return HashMap<Vector2i, TileMapCell>(); } - TileSet::TerrainsPattern terrains_pattern; - if (p_erase) { - terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); - } else { - terrains_pattern = selected_terrains_pattern; - } - RBSet<Vector2i> cells_to_draw = _get_cells_for_bucket_fill(p_coords, p_contiguous); - HashMap<Vector2i, TileSet::TerrainsPattern> to_draw; - for (const Vector2i &coords : cells_to_draw) { - to_draw[coords] = terrains_pattern; + Vector<Vector2i> cells_to_draw_as_vector; + for (Vector2i cell : cells_to_draw) { + cells_to_draw_as_vector.append(cell); } - return _draw_terrains(to_draw, selected_terrain_set); + if (selected_type == SELECTED_TYPE_CONNECT || selected_type == SELECTED_TYPE_PATH) { + return _draw_terrain_path_or_connect(cells_to_draw_as_vector, selected_terrain_set, selected_terrain, true); + } else { // SELECTED_TYPE_PATTERN + TileSet::TerrainsPattern terrains_pattern; + if (p_erase) { + terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); + } else { + terrains_pattern = selected_terrains_pattern; + } + return _draw_terrain_pattern(cells_to_draw_as_vector, selected_terrain_set, terrains_pattern); + } } void TileMapEditorTerrainsPlugin::_stop_dragging() { @@ -2696,11 +2686,13 @@ void TileMapEditorTerrainsPlugin::_stop_dragging() { if (tree_item) { for (int i = 0; i < terrains_tile_list->get_item_count(); i++) { Dictionary metadata_dict = terrains_tile_list->get_item_metadata(i); - TileSet::TerrainsPattern in_meta_terrains_pattern(*tile_set, new_terrain_set); - in_meta_terrains_pattern.set_terrains_from_array(metadata_dict["terrains_pattern"]); - if (in_meta_terrains_pattern == terrains_pattern) { - terrains_tile_list->select(i); - break; + if (int(metadata_dict["type"]) == SELECTED_TYPE_PATTERN) { + TileSet::TerrainsPattern in_meta_terrains_pattern(*tile_set, new_terrain_set); + in_meta_terrains_pattern.from_array(metadata_dict["terrains_pattern"]); + if (in_meta_terrains_pattern == terrains_pattern) { + terrains_tile_list->select(i); + break; + } } } } else { @@ -2773,22 +2765,33 @@ void TileMapEditorTerrainsPlugin::_update_selection() { } // Get the selected terrain. - selected_terrains_pattern = TileSet::TerrainsPattern(); selected_terrain_set = -1; + selected_terrains_pattern = TileSet::TerrainsPattern(); TreeItem *selected_tree_item = terrains_tree->get_selected(); if (selected_tree_item && selected_tree_item->get_metadata(0)) { Dictionary metadata_dict = selected_tree_item->get_metadata(0); // Selected terrain selected_terrain_set = metadata_dict["terrain_set"]; + selected_terrain = metadata_dict["terrain_id"]; - // Selected tile + // Selected mode/terrain pattern if (erase_button->is_pressed()) { + selected_type = SELECTED_TYPE_PATTERN; selected_terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); } else if (terrains_tile_list->is_anything_selected()) { metadata_dict = terrains_tile_list->get_item_metadata(terrains_tile_list->get_selected_items()[0]); - selected_terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); - selected_terrains_pattern.set_terrains_from_array(metadata_dict["terrains_pattern"]); + if (int(metadata_dict["type"]) == SELECTED_TYPE_CONNECT) { + selected_type = SELECTED_TYPE_CONNECT; + } else if (int(metadata_dict["type"]) == SELECTED_TYPE_PATH) { + selected_type = SELECTED_TYPE_PATH; + } else if (int(metadata_dict["type"]) == SELECTED_TYPE_PATTERN) { + selected_type = SELECTED_TYPE_PATTERN; + selected_terrains_pattern = TileSet::TerrainsPattern(*tile_set, selected_terrain_set); + selected_terrains_pattern.from_array(metadata_dict["terrains_pattern"]); + } else { + ERR_FAIL(); + } } } } @@ -2865,7 +2868,7 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent> } else { // Paint otherwise. if (tool_buttons_group->get_pressed_button() == paint_tool_button && !Input::get_singleton()->is_key_pressed(Key::CTRL) && !Input::get_singleton()->is_key_pressed(Key::SHIFT)) { - if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) { + if (selected_terrain_set < 0 || selected_terrain < 0 || (selected_type == SELECTED_TYPE_PATTERN && !selected_terrains_pattern.is_valid())) { return true; } @@ -2880,21 +2883,21 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent> tile_map->set_cell(tile_map_layer, E.key, E.value.source_id, E.value.get_atlas_coords(), E.value.alternative_tile); } } else if (tool_buttons_group->get_pressed_button() == line_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && !Input::get_singleton()->is_key_pressed(Key::CTRL))) { - if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) { + if (selected_terrain_set < 0 || selected_terrain < 0 || (selected_type == SELECTED_TYPE_PATTERN && !selected_terrains_pattern.is_valid())) { return true; } drag_type = DRAG_TYPE_LINE; drag_start_mouse_pos = mpos; drag_modified.clear(); } else if (tool_buttons_group->get_pressed_button() == rect_tool_button || (tool_buttons_group->get_pressed_button() == paint_tool_button && Input::get_singleton()->is_key_pressed(Key::SHIFT) && Input::get_singleton()->is_key_pressed(Key::CTRL))) { - if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) { + if (selected_terrain_set < 0 || selected_terrain < 0 || (selected_type == SELECTED_TYPE_PATTERN && !selected_terrains_pattern.is_valid())) { return true; } drag_type = DRAG_TYPE_RECT; drag_start_mouse_pos = mpos; drag_modified.clear(); } else if (tool_buttons_group->get_pressed_button() == bucket_tool_button) { - if (selected_terrain_set < 0 || !selected_terrains_pattern.is_valid()) { + if (selected_terrain_set < 0 || selected_terrain < 0 || (selected_type == SELECTED_TYPE_PATTERN && !selected_terrains_pattern.is_valid())) { return true; } drag_type = DRAG_TYPE_BUCKET; @@ -3105,11 +3108,18 @@ void TileMapEditorTerrainsPlugin::_update_terrains_cache() { cell.alternative_tile = alternative_id; TileSet::TerrainsPattern terrains_pattern = tile_data->get_terrains_pattern(); + + // Terrain center bit + int terrain = terrains_pattern.get_terrain(); + if (terrain >= 0 && terrain < (int)per_terrain_terrains_patterns[terrain_set].size()) { + per_terrain_terrains_patterns[terrain_set][terrain].insert(terrains_pattern); + } + // Terrain bits. for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(terrain_set, bit)) { - int terrain = terrains_pattern.get_terrain(bit); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, bit)) { + terrain = terrains_pattern.get_terrain_peering_bit(bit); if (terrain >= 0 && terrain < (int)per_terrain_terrains_patterns[terrain_set].size()) { per_terrain_terrains_patterns[terrain_set][terrain].insert(terrains_pattern); } @@ -3191,6 +3201,19 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() { ERR_FAIL_INDEX(selected_terrain_set, tile_set->get_terrain_sets_count()); ERR_FAIL_INDEX(selected_terrain_id, tile_set->get_terrains_count(selected_terrain_set)); + // Add the two first generic modes + int item_index = terrains_tile_list->add_icon_item(main_vbox_container->get_theme_icon(SNAME("TerrainConnect"), SNAME("EditorIcons"))); + terrains_tile_list->set_item_tooltip(item_index, TTR("Connect mode: paints a terrain, then connects it with the surrounding tiles with the same terrain.")); + Dictionary list_metadata_dict; + list_metadata_dict["type"] = SELECTED_TYPE_CONNECT; + terrains_tile_list->set_item_metadata(item_index, list_metadata_dict); + + item_index = terrains_tile_list->add_icon_item(main_vbox_container->get_theme_icon(SNAME("TerrainPath"), SNAME("EditorIcons"))); + terrains_tile_list->set_item_tooltip(item_index, TTR("Path mode: paints a terrain, thens connects it to the previous tile painted withing the same stroke.")); + list_metadata_dict = Dictionary(); + list_metadata_dict["type"] = SELECTED_TYPE_PATH; + terrains_tile_list->set_item_metadata(item_index, list_metadata_dict); + // Sort the items in a map by the number of corresponding terrains. RBMap<int, RBSet<TileSet::TerrainsPattern>> sorted; @@ -3200,7 +3223,7 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() { for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(selected_terrain_set, bit) && E.get_terrain(bit) == selected_terrain_id) { + if (tile_set->is_valid_terrain_peering_bit(selected_terrain_set, bit) && E.get_terrain_peering_bit(bit) == selected_terrain_id) { count++; } } @@ -3241,12 +3264,13 @@ void TileMapEditorTerrainsPlugin::_update_tiles_list() { } // Create the ItemList's item. - int item_index = terrains_tile_list->add_item(""); + item_index = terrains_tile_list->add_item(""); terrains_tile_list->set_item_icon(item_index, icon); terrains_tile_list->set_item_icon_region(item_index, region); terrains_tile_list->set_item_icon_transposed(item_index, transpose); - Dictionary list_metadata_dict; - list_metadata_dict["terrains_pattern"] = terrains_pattern.get_terrains_as_array(); + list_metadata_dict = Dictionary(); + list_metadata_dict["type"] = SELECTED_TYPE_PATTERN; + list_metadata_dict["terrains_pattern"] = terrains_pattern.as_array(); terrains_tile_list->set_item_metadata(item_index, list_metadata_dict); } } @@ -3264,6 +3288,8 @@ void TileMapEditorTerrainsPlugin::_update_theme() { picker_button->set_icon(main_vbox_container->get_theme_icon(SNAME("ColorPick"), SNAME("EditorIcons"))); erase_button->set_icon(main_vbox_container->get_theme_icon(SNAME("Eraser"), SNAME("EditorIcons"))); + + _update_tiles_list(); } void TileMapEditorTerrainsPlugin::edit(ObjectID p_tile_map_id, int p_tile_map_layer) { @@ -3303,7 +3329,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { terrains_tile_list->set_h_size_flags(Control::SIZE_EXPAND_FILL); terrains_tile_list->set_max_columns(0); terrains_tile_list->set_same_column_width(true); - terrains_tile_list->set_fixed_icon_size(Size2(30, 30) * EDSCALE); + terrains_tile_list->set_fixed_icon_size(Size2(32, 32) * EDSCALE); terrains_tile_list->set_texture_filter(CanvasItem::TEXTURE_FILTER_NEAREST); tilemap_tab_terrains->add_child(terrains_tile_list); @@ -3396,7 +3422,7 @@ void TileMapEditor::_notification(int p_what) { advanced_menu_button->set_icon(get_theme_icon(SNAME("Tools"), SNAME("EditorIcons"))); toggle_grid_button->set_icon(get_theme_icon(SNAME("Grid"), SNAME("EditorIcons"))); toggle_grid_button->set_pressed(EditorSettings::get_singleton()->get("editors/tiles_editor/display_grid")); - toogle_highlight_selected_layer_button->set_icon(get_theme_icon(SNAME("TileMapHighlightSelected"), SNAME("EditorIcons"))); + toggle_highlight_selected_layer_button->set_icon(get_theme_icon(SNAME("TileMapHighlightSelected"), SNAME("EditorIcons"))); } break; case NOTIFICATION_INTERNAL_PROCESS: { @@ -3431,64 +3457,13 @@ void TileMapEditor::_on_grid_toggled(bool p_pressed) { CanvasItemEditor::get_singleton()->update_viewport(); } -void TileMapEditor::_layers_selection_button_draw() { - if (!has_theme_icon(SNAME("arrow"), SNAME("OptionButton"))) { +void TileMapEditor::_layers_selection_item_selected(int p_index) { + TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id)); + if (!tile_map || tile_map->get_layers_count() <= 0) { return; } - RID ci = layers_selection_button->get_canvas_item(); - Ref<Texture2D> arrow = Control::get_theme_icon(SNAME("arrow"), SNAME("OptionButton")); - - Color clr = Color(1, 1, 1); - if (get_theme_constant(SNAME("modulate_arrow"))) { - switch (layers_selection_button->get_draw_mode()) { - case BaseButton::DRAW_PRESSED: - clr = get_theme_color(SNAME("font_pressed_color")); - break; - case BaseButton::DRAW_HOVER: - clr = get_theme_color(SNAME("font_hover_color")); - break; - case BaseButton::DRAW_DISABLED: - clr = get_theme_color(SNAME("font_disabled_color")); - break; - default: - if (layers_selection_button->has_focus()) { - clr = get_theme_color(SNAME("font_focus_color")); - } else { - clr = get_theme_color(SNAME("font_color")); - } - } - } - - Size2 size = layers_selection_button->get_size(); - - Point2 ofs; - if (is_layout_rtl()) { - ofs = Point2(get_theme_constant(SNAME("arrow_margin"), SNAME("OptionButton")), int(Math::abs((size.height - arrow->get_height()) / 2))); - } else { - ofs = Point2(size.width - arrow->get_width() - get_theme_constant(SNAME("arrow_margin"), SNAME("OptionButton")), int(Math::abs((size.height - arrow->get_height()) / 2))); - } - Rect2 dst_rect = Rect2(ofs, arrow->get_size()); - if (!layers_selection_button->is_pressed()) { - dst_rect.size = -dst_rect.size; - } - arrow->draw_rect(ci, dst_rect, false, clr); -} - -void TileMapEditor::_layers_selection_button_pressed() { - if (!layers_selection_popup->is_visible()) { - Size2 size = layers_selection_popup->get_contents_minimum_size(); - size.x = MAX(size.x, layers_selection_button->get_size().x); - layers_selection_popup->set_position(layers_selection_button->get_screen_position() - Size2(0, size.y * get_global_transform().get_scale().y)); - layers_selection_popup->set_size(size); - layers_selection_popup->popup(); - } else { - layers_selection_popup->hide(); - } -} - -void TileMapEditor::_layers_selection_id_pressed(int p_id) { - tile_map_layer = p_id; + tile_map_layer = p_index; _update_layers_selection(); } @@ -3671,8 +3646,6 @@ void TileMapEditor::_layers_select_next_or_previous(bool p_next) { } void TileMapEditor::_update_layers_selection() { - layers_selection_popup->clear(); - TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id)); if (!tile_map) { return; @@ -3699,32 +3672,23 @@ void TileMapEditor::_update_layers_selection() { } else { tile_map_layer = -1; } - tile_map->set_selected_layer(toogle_highlight_selected_layer_button->is_pressed() ? tile_map_layer : -1); + tile_map->set_selected_layer(toggle_highlight_selected_layer_button->is_pressed() ? tile_map_layer : -1); - // Build the list of layers. - for (int i = 0; i < tile_map->get_layers_count(); i++) { - String name = tile_map->get_layer_name(i); - layers_selection_popup->add_item(name.is_empty() ? vformat(TTR("Layer #%d"), i) : name, i); - layers_selection_popup->set_item_as_radio_checkable(i, true); - layers_selection_popup->set_item_disabled(i, !tile_map->is_layer_enabled(i)); - layers_selection_popup->set_item_checked(i, i == tile_map_layer); - } + layers_selection_button->clear(); + if (tile_map->get_layers_count() > 0) { + // Build the list of layers. + for (int i = 0; i < tile_map->get_layers_count(); i++) { + String name = tile_map->get_layer_name(i); + layers_selection_button->add_item(name.is_empty() ? vformat(TTR("Layer %d"), i) : name, i); + layers_selection_button->set_item_disabled(i, !tile_map->is_layer_enabled(i)); + } - // Update the button label. - if (tile_map_layer >= 0) { - layers_selection_button->set_text(layers_selection_popup->get_item_text(tile_map_layer)); + layers_selection_button->set_disabled(false); + layers_selection_button->select(tile_map_layer); } else { - layers_selection_button->set_text(TTR("Select a layer")); - } - - // Set button minimum width. - Size2 min_button_size = Size2(layers_selection_popup->get_contents_minimum_size().x, 0); - if (has_theme_icon(SNAME("arrow"), SNAME("OptionButton"))) { - Ref<Texture2D> arrow = Control::get_theme_icon(SNAME("arrow"), SNAME("OptionButton")); - min_button_size.x += arrow->get_size().x; + layers_selection_button->set_disabled(true); + layers_selection_button->set_text(TTR("No Layers")); } - layers_selection_button->set_custom_minimum_size(min_button_size); - layers_selection_button->update(); tabs_plugins[tabs_bar->get_current_tab()]->edit(tile_map_id, tile_map_layer); } @@ -4001,7 +3965,6 @@ TileMapEditor::TileMapEditor() { // TabBar. tabs_bar = memnew(TabBar); - tabs_bar->set_tab_alignment(TabBar::ALIGNMENT_CENTER); tabs_bar->set_clip_tabs(false); for (int plugin_index = 0; plugin_index < tile_map_editor_plugins.size(); plugin_index++) { Vector<TileMapEditorPlugin::TabData> tabs_vector = tile_map_editor_plugins[plugin_index]->get_tabs(); @@ -4030,31 +3993,23 @@ TileMapEditor::TileMapEditor() { } // Wide empty separation control. - Control *h_empty_space = memnew(Control); - h_empty_space->set_h_size_flags(SIZE_EXPAND_FILL); - tile_map_toolbar->add_child(h_empty_space); + tile_map_toolbar->add_spacer(); // Layer selector. - layers_selection_popup = memnew(PopupMenu); - layers_selection_popup->connect("id_pressed", callable_mp(this, &TileMapEditor::_layers_selection_id_pressed)); - layers_selection_popup->set_flag(Window::FLAG_POPUP, false); - - layers_selection_button = memnew(Button); - layers_selection_button->set_toggle_mode(true); - layers_selection_button->connect("draw", callable_mp(this, &TileMapEditor::_layers_selection_button_draw)); - layers_selection_button->connect("pressed", callable_mp(this, &TileMapEditor::_layers_selection_button_pressed)); - layers_selection_button->connect("hidden", callable_mp((Window *)layers_selection_popup, &Popup::hide)); - layers_selection_button->set_tooltip(TTR("Tile Map Layer")); - layers_selection_button->add_child(layers_selection_popup); + layers_selection_button = memnew(OptionButton); + layers_selection_button->set_custom_minimum_size(Size2(200, 0)); + layers_selection_button->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS); + layers_selection_button->set_tooltip(TTR("TileMap Layers")); + layers_selection_button->connect("item_selected", callable_mp(this, &TileMapEditor::_layers_selection_item_selected)); tile_map_toolbar->add_child(layers_selection_button); - toogle_highlight_selected_layer_button = memnew(Button); - toogle_highlight_selected_layer_button->set_flat(true); - toogle_highlight_selected_layer_button->set_toggle_mode(true); - toogle_highlight_selected_layer_button->set_pressed(true); - toogle_highlight_selected_layer_button->connect("pressed", callable_mp(this, &TileMapEditor::_update_layers_selection)); - toogle_highlight_selected_layer_button->set_tooltip(TTR("Highlight Selected TileMap Layer")); - tile_map_toolbar->add_child(toogle_highlight_selected_layer_button); + toggle_highlight_selected_layer_button = memnew(Button); + toggle_highlight_selected_layer_button->set_flat(true); + toggle_highlight_selected_layer_button->set_toggle_mode(true); + toggle_highlight_selected_layer_button->set_pressed(true); + toggle_highlight_selected_layer_button->connect("pressed", callable_mp(this, &TileMapEditor::_update_layers_selection)); + toggle_highlight_selected_layer_button->set_tooltip(TTR("Highlight Selected TileMap Layer")); + tile_map_toolbar->add_child(toggle_highlight_selected_layer_button); tile_map_toolbar->add_child(memnew(VSeparator)); diff --git a/editor/plugins/tiles/tile_map_editor.h b/editor/plugins/tiles/tile_map_editor.h index 7158ebff59..ff586ebbfe 100644 --- a/editor/plugins/tiles/tile_map_editor.h +++ b/editor/plugins/tiles/tile_map_editor.h @@ -40,6 +40,7 @@ #include "scene/gui/check_box.h" #include "scene/gui/item_list.h" #include "scene/gui/menu_button.h" +#include "scene/gui/option_button.h" #include "scene/gui/separator.h" #include "scene/gui/spin_box.h" #include "scene/gui/split_container.h" @@ -268,14 +269,22 @@ private: HashMap<Vector2i, TileMapCell> drag_modified; // Painting - HashMap<Vector2i, TileMapCell> _draw_terrains(const HashMap<Vector2i, TileSet::TerrainsPattern> &p_to_paint, int p_terrain_set) const; + HashMap<Vector2i, TileMapCell> _draw_terrain_path_or_connect(const Vector<Vector2i> &p_to_paint, int p_terrain_set, int p_terrain, bool p_connect) const; + HashMap<Vector2i, TileMapCell> _draw_terrain_pattern(const Vector<Vector2i> &p_to_paint, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const; HashMap<Vector2i, TileMapCell> _draw_line(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase); HashMap<Vector2i, TileMapCell> _draw_rect(Vector2i p_start_cell, Vector2i p_end_cell, bool p_erase); RBSet<Vector2i> _get_cells_for_bucket_fill(Vector2i p_coords, bool p_contiguous); HashMap<Vector2i, TileMapCell> _draw_bucket_fill(Vector2i p_coords, bool p_contiguous, bool p_erase); void _stop_dragging(); + enum SelectedType { + SELECTED_TYPE_CONNECT = 0, + SELECTED_TYPE_PATH, + SELECTED_TYPE_PATTERN, + }; + SelectedType selected_type; int selected_terrain_set = -1; + int selected_terrain = -1; TileSet::TerrainsPattern selected_terrains_pattern; void _update_selection(); @@ -319,12 +328,9 @@ private: // Toolbar. HBoxContainer *tile_map_toolbar = nullptr; - PopupMenu *layers_selection_popup = nullptr; - Button *layers_selection_button = nullptr; - Button *toogle_highlight_selected_layer_button = nullptr; - void _layers_selection_button_draw(); - void _layers_selection_button_pressed(); - void _layers_selection_id_pressed(int p_id); + OptionButton *layers_selection_button = nullptr; + Button *toggle_highlight_selected_layer_button = nullptr; + void _layers_selection_item_selected(int p_index); Button *toggle_grid_button = nullptr; void _on_grid_toggled(bool p_pressed); diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index b87aedcf60..37ccc6ad45 100644 --- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp +++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp @@ -97,9 +97,9 @@ bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get(const StringN void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, "")); p_list->push_back(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D")); - p_list->push_back(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "")); - p_list->push_back(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, "")); - p_list->push_back(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, "")); + p_list->push_back(PropertyInfo(Variant::VECTOR2I, "margins", PROPERTY_HINT_NONE, "suffix:px")); + p_list->push_back(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, "suffix:px")); + p_list->push_back(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, "suffix:px")); p_list->push_back(PropertyInfo(Variant::BOOL, "use_texture_padding", PROPERTY_HINT_NONE, "")); } @@ -401,15 +401,15 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro if (all_alternatve_id_zero) { p_list->push_back(PropertyInfo(Variant::NIL, "Animation", PROPERTY_HINT_NONE, "animation_", PROPERTY_USAGE_GROUP)); p_list->push_back(PropertyInfo(Variant::INT, "animation_columns", PROPERTY_HINT_NONE, "")); - p_list->push_back(PropertyInfo(Variant::VECTOR2I, "animation_separation", PROPERTY_HINT_NONE, "")); + p_list->push_back(PropertyInfo(Variant::VECTOR2I, "animation_separation", PROPERTY_HINT_NONE, "suffix:px")); p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_speed", PROPERTY_HINT_NONE, "")); p_list->push_back(PropertyInfo(Variant::INT, "animation_frames_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_ARRAY, "Frames,animation_frame_")); // Not optimal, but returns value for the first tile. This is similar to what MultiNodeEdit does. if (tile_set_atlas_source->get_tile_animation_frames_count(tiles.front()->get().tile) == 1) { - p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_frame_0/duration", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_READ_ONLY)); + p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_frame_0/duration", PROPERTY_HINT_NONE, "suffix:s", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_READ_ONLY)); } else { for (int i = 0; i < tile_set_atlas_source->get_tile_animation_frames_count(tiles.front()->get().tile); i++) { - p_list->push_back(PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, "")); + p_list->push_back(PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, "suffix:s")); } } } @@ -2071,9 +2071,10 @@ void TileSetAtlasSourceEditor::_undo_redo_inspector_callback(Object *p_undo_redo } } else if (p_property == "terrain_set") { int current_terrain_set = tile_data_proxy->get("terrain_set"); + ADD_UNDO(tile_data_proxy, "terrain"); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(current_terrain_set, bit)) { + if (tile_set->is_valid_terrain_peering_bit(current_terrain_set, bit)) { ADD_UNDO(tile_data_proxy, "terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i])); } } @@ -2334,6 +2335,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { // Tile inspector. tile_inspector_label = memnew(Label); tile_inspector_label->set_text(TTR("Tile Properties:")); + tile_inspector_label->set_theme_type_variation("HeaderSmall"); middle_vbox_container->add_child(tile_inspector_label); tile_proxy_object = memnew(AtlasTileProxyObject(this)); @@ -2349,7 +2351,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { tile_inspector_no_tile_selected_label = memnew(Label); tile_inspector_no_tile_selected_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - tile_inspector_no_tile_selected_label->set_text(TTR("No tile selected.")); + tile_inspector_no_tile_selected_label->set_text(TTR("No tiles selected.")); middle_vbox_container->add_child(tile_inspector_no_tile_selected_label); // Property values palette. @@ -2357,6 +2359,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { tile_data_editors_label = memnew(Label); tile_data_editors_label->set_text(TTR("Paint Properties:")); + tile_data_editors_label->set_theme_type_variation("HeaderSmall"); middle_vbox_container->add_child(tile_data_editors_label); tile_data_editor_dropdown_button = memnew(Button); @@ -2380,6 +2383,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { // Atlas source inspector. atlas_source_inspector_label = memnew(Label); atlas_source_inspector_label->set_text(TTR("Atlas Properties:")); + atlas_source_inspector_label->set_theme_type_variation("HeaderSmall"); middle_vbox_container->add_child(atlas_source_inspector_label); atlas_source_proxy_object = memnew(TileSetAtlasSourceProxyObject()); diff --git a/editor/plugins/tiles/tile_set_editor.cpp b/editor/plugins/tiles/tile_set_editor.cpp index fb4a563992..de373e121b 100644 --- a/editor/plugins/tiles/tile_set_editor.cpp +++ b/editor/plugins/tiles/tile_set_editor.cpp @@ -505,7 +505,7 @@ void TileSetEditor::_move_tile_set_array_element(Object *p_undo_redo, Object *p_ for (int terrain_set_index = begin; terrain_set_index < end; terrain_set_index++) { for (int l = 0; l < TileSet::CELL_NEIGHBOR_MAX; l++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(l); - if (tile_data->is_valid_peering_bit_terrain(bit)) { + if (tile_data->is_valid_terrain_peering_bit(bit)) { ADD_UNDO(tile_data, "terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[l])); } } @@ -513,7 +513,7 @@ void TileSetEditor::_move_tile_set_array_element(Object *p_undo_redo, Object *p_ } else if (components.size() >= 2 && components[0].begins_with("terrain_set_") && components[0].trim_prefix("terrain_set_").is_valid_int() && components[1] == "terrain_") { for (int terrain_index = 0; terrain_index < TileSet::CELL_NEIGHBOR_MAX; terrain_index++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(terrain_index); - if (tile_data->is_valid_peering_bit_terrain(bit)) { + if (tile_data->is_valid_terrain_peering_bit(bit)) { ADD_UNDO(tile_data, "terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[terrain_index])); } } @@ -607,9 +607,10 @@ void TileSetEditor::_undo_redo_inspector_callback(Object *p_undo_redo, Object *p if (components.size() == 2 && components[0].begins_with("terrain_set_") && components[0].trim_prefix("terrain_set_").is_valid_int() && components[1] == "mode") { ADD_UNDO(tile_data, "terrain_set"); + ADD_UNDO(tile_data, "terrain"); for (int l = 0; l < TileSet::CELL_NEIGHBOR_MAX; l++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(l); - if (tile_data->is_valid_peering_bit_terrain(bit)) { + if (tile_data->is_valid_terrain_peering_bit(bit)) { ADD_UNDO(tile_data, "terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[l])); } } diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index ecf1bea6bb..8c72a886ea 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -1102,27 +1102,6 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) { if (!visual_shader->is_connected("changed", ce)) { visual_shader->connect("changed", ce); } -#ifndef DISABLE_DEPRECATED - Dictionary engine_version = Engine::get_singleton()->get_version_info(); - static Array components; - if (components.is_empty()) { - components.push_back("major"); - components.push_back("minor"); - } - const Dictionary vs_version = visual_shader->get_engine_version(); - if (!vs_version.has_all(components)) { - visual_shader->update_engine_version(engine_version); - print_line(vformat(TTR("The shader (\"%s\") has been updated to correspond Godot %s.%s version."), visual_shader->get_path(), engine_version["major"], engine_version["minor"])); - } else { - for (int i = 0; i < components.size(); i++) { - if (vs_version[components[i]] != engine_version[components[i]]) { - visual_shader->update_engine_version(engine_version); - print_line(vformat(TTR("The shader (\"%s\") has been updated to correspond Godot %s.%s version."), visual_shader->get_path(), engine_version["major"], engine_version["minor"])); - break; - } - } - } -#endif visual_shader->set_graph_offset(graph->get_scroll_ofs() / EDSCALE); _set_mode(visual_shader->get_mode()); } else { @@ -4851,7 +4830,7 @@ VisualShaderEditor::VisualShaderEditor() { error_label = memnew(Label); error_panel->add_child(error_label); - error_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + error_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); /////////////////////////////////////// // POPUP MENU @@ -5008,7 +4987,7 @@ VisualShaderEditor::VisualShaderEditor() { } alert = memnew(AcceptDialog); - alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD); + alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD); alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); alert->get_label()->set_custom_minimum_size(Size2(400, 60) * EDSCALE); @@ -5666,48 +5645,6 @@ VisualShaderEditor::VisualShaderEditor() { property_editor->connect("variant_changed", callable_mp(this, &VisualShaderEditor::_port_edited)); } -///////////////// - -void VisualShaderEditorPlugin::edit(Object *p_object) { - visual_shader_editor->edit(Object::cast_to<VisualShader>(p_object)); -} - -bool VisualShaderEditorPlugin::handles(Object *p_object) const { - return p_object->is_class("VisualShader"); -} - -void VisualShaderEditorPlugin::make_visible(bool p_visible) { - if (p_visible) { - //editor->hide_animation_player_editors(); - //editor->animation_panel_make_visible(true); - button->show(); - EditorNode::get_singleton()->make_bottom_panel_item_visible(visual_shader_editor); - visual_shader_editor->update_nodes(); - visual_shader_editor->set_process_input(true); - //visual_shader_editor->set_process(true); - } else { - if (visual_shader_editor->is_visible_in_tree()) { - EditorNode::get_singleton()->hide_bottom_panel(); - } - button->hide(); - visual_shader_editor->set_process_input(false); - //visual_shader_editor->set_process(false); - } -} - -VisualShaderEditorPlugin::VisualShaderEditorPlugin() { - visual_shader_editor = memnew(VisualShaderEditor); - visual_shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE); - - button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("VisualShader"), visual_shader_editor); - button->hide(); -} - -VisualShaderEditorPlugin::~VisualShaderEditorPlugin() { -} - -//////////////// - class VisualShaderNodePluginInputEditor : public OptionButton { GDCLASS(VisualShaderNodePluginInputEditor, OptionButton); diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index 1b56892ebf..b8da266ed7 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -493,23 +493,6 @@ public: VisualShaderEditor(); }; -class VisualShaderEditorPlugin : public EditorPlugin { - GDCLASS(VisualShaderEditorPlugin, EditorPlugin); - - VisualShaderEditor *visual_shader_editor = nullptr; - Button *button = nullptr; - -public: - virtual String get_name() const override { return "VisualShader"; } - bool has_main_screen() const override { return false; } - virtual void edit(Object *p_object) override; - virtual bool handles(Object *p_object) const override; - virtual void make_visible(bool p_visible) override; - - VisualShaderEditorPlugin(); - ~VisualShaderEditorPlugin(); -}; - class VisualShaderNodePluginDefault : public VisualShaderNodePlugin { GDCLASS(VisualShaderNodePluginDefault, VisualShaderNodePlugin); diff --git a/editor/project_converter_3_to_4.cpp b/editor/project_converter_3_to_4.cpp new file mode 100644 index 0000000000..dfe40f9d4f --- /dev/null +++ b/editor/project_converter_3_to_4.cpp @@ -0,0 +1,3813 @@ +/*************************************************************************/ +/* project_converter_3_to_4.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "project_converter_3_to_4.h" + +#include "modules/modules_enabled.gen.h" + +const int ERROR_CODE = 77; + +#ifdef MODULE_REGEX_ENABLED + +#include "modules/regex/regex.h" + +#include "core/os/time.h" +#include "core/templates/hash_map.h" +#include "core/templates/list.h" + +const int CONVERSION_MAX_FILE_SIZE = 1024 * 1024 * 4; // 4 MB + +static const char *enum_renames[][2] = { + //// constants + { "TYPE_COLOR_ARRAY", "TYPE_PACKED_COLOR_ARRAY" }, + { "TYPE_FLOAT64_ARRAY", "TYPE_PACKED_FLOAT64_ARRAY" }, + { "TYPE_INT64_ARRAY", "TYPE_PACKED_INT64_ARRAY" }, + { "TYPE_INT_ARRAY", "TYPE_PACKED_INT32_ARRAY" }, + { "TYPE_QUAT", "TYPE_QUATERNION" }, + { "TYPE_RAW_ARRAY", "TYPE_PACKED_BYTE_ARRAY" }, + { "TYPE_REAL", "TYPE_FLOAT" }, + { "TYPE_REAL_ARRAY", "TYPE_PACKED_FLOAT32_ARRAY" }, + { "TYPE_STRING_ARRAY", "TYPE_PACKED_STRING_ARRAY" }, + { "TYPE_TRANSFORM", "TYPE_TRANSFORM3D" }, + { "TYPE_VECTOR2_ARRAY", "TYPE_PACKED_VECTOR2_ARRAY" }, + { "TYPE_VECTOR3_ARRAY", "TYPE_PACKED_VECTOR3_ARRAY" }, + + // {"FLAG_MAX", "PARTICLE_FLAG_MAX"}, // CPUParticles2D - used in more classes + { "ALIGN_BEGIN", "ALIGNMENT_BEGIN" }, //AspectRatioContainer + { "ALIGN_CENTER", "ALIGNMENT_CENTER" }, //AspectRatioContainer + { "ALIGN_END", "ALIGNMENT_END" }, //AspectRatioContainer + { "ARRAY_COMPRESS_BASE", "ARRAY_COMPRESS_FLAGS_BASE" }, // Mesh + { "ARVR_AR", "XR_AR" }, // XRInterface + { "ARVR_EXCESSIVE_MOTION", "XR_EXCESSIVE_MOTION" }, // XRInterface + { "ARVR_EXTERNAL", "XR_EXTERNAL" }, // XRInterface + { "ARVR_INSUFFICIENT_FEATURES", "XR_INSUFFICIENT_FEATURES" }, // XRInterface + { "ARVR_MONO", "XR_MONO" }, // XRInterface + { "ARVR_NONE", "XR_NONE" }, // XRInterface + { "ARVR_NORMAL_TRACKING", "XR_NORMAL_TRACKING" }, // XRInterface + { "ARVR_NOT_TRACKING", "XR_NOT_TRACKING" }, // XRInterface + { "ARVR_STEREO", "XR_STEREO" }, // XRInterface + { "ARVR_UNKNOWN_TRACKING", "XR_UNKNOWN_TRACKING" }, // XRInterface + { "BAKE_ERROR_INVALID_MESH", "BAKE_ERROR_MESHES_INVALID" }, // LightmapGI + { "BODY_MODE_CHARACTER", "BODY_MODE_DYNAMIC" }, // PhysicsServer2D + { "BODY_MODE_DYNAMIC_LOCKED", "BODY_MODE_DYNAMIC_LINEAR" }, // PhysicsServer3D + { "BUTTON_LEFT", "MOUSE_BUTTON_LEFT" }, // Globals + { "BUTTON_MASK_LEFT", "MOUSE_BUTTON_MASK_LEFT" }, // Globals + { "BUTTON_MASK_MIDDLE", "MOUSE_BUTTON_MASK_MIDDLE" }, // Globals + { "BUTTON_MASK_RIGHT", "MOUSE_BUTTON_MASK_RIGHT" }, // Globals + { "BUTTON_MASK_XBUTTON1", "MOUSE_BUTTON_MASK_XBUTTON1" }, // Globals + { "BUTTON_MASK_XBUTTON2", "MOUSE_BUTTON_MASK_XBUTTON2" }, // Globals + { "BUTTON_MIDDLE", "MOUSE_BUTTON_MIDDLE" }, // Globals + { "BUTTON_RIGHT", "MOUSE_BUTTON_RIGHT" }, // Globals + { "BUTTON_WHEEL_DOWN", "MOUSE_BUTTON_WHEEL_DOWN" }, // Globals + { "BUTTON_WHEEL_LEFT", "MOUSE_BUTTON_WHEEL_LEFT" }, // Globals + { "BUTTON_WHEEL_RIGHT", "MOUSE_BUTTON_WHEEL_RIGHT" }, // Globals + { "BUTTON_WHEEL_UP", "MOUSE_BUTTON_WHEEL_UP" }, // Globals + { "BUTTON_XBUTTON1", "MOUSE_BUTTON_XBUTTON1" }, // Globals + { "BUTTON_XBUTTON2", "MOUSE_BUTTON_XBUTTON2" }, // Globals + { "CLEAR_MODE_ONLY_NEXT_FRAME", "CLEAR_MODE_ONCE" }, // SubViewport + { "COMPRESS_PVRTC4", "COMPRESS_PVRTC1_4" }, // Image + { "CUBEMAP_BACK", "CUBEMAP_LAYER_BACK" }, // RenderingServer + { "CUBEMAP_BOTTOM", "CUBEMAP_LAYER_BOTTOM" }, // RenderingServer + { "CUBEMAP_FRONT", "CUBEMAP_LAYER_FRONT" }, // RenderingServer + { "CUBEMAP_LEFT", "CUBEMAP_LAYER_LEFT" }, // RenderingServer + { "CUBEMAP_RIGHT", "CUBEMAP_LAYER_RIGHT" }, // RenderingServer + { "CUBEMAP_TOP", "CUBEMAP_LAYER_TOP" }, // RenderingServer + { "DAMPED_STRING_DAMPING", "DAMPED_SPRING_DAMPING" }, // PhysicsServer2D + { "DAMPED_STRING_REST_LENGTH", "DAMPED_SPRING_REST_LENGTH" }, // PhysicsServer2D + { "DAMPED_STRING_STIFFNESS", "DAMPED_SPRING_STIFFNESS" }, // PhysicsServer2D + { "FLAG_ALIGN_Y_TO_VELOCITY", "PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY" }, // CPUParticles2D + { "FLAG_DISABLE_Z", "PARTICLE_FLAG_DISABLE_Z" }, // CPUParticles2D + { "FLAG_ROTATE_Y", "PARTICLE_FLAG_ROTATE_Y" }, // CPUParticles2D + { "FLAG_USE_BAKED_LIGHT", "GI_MODE_BAKED" }, // GeometryInstance3D + { "FORMAT_PVRTC2", "FORMAT_PVRTC1_2" }, // Image + { "FORMAT_PVRTC2A", "FORMAT_PVRTC1_2A" }, // Image + { "FORMAT_PVRTC4", "FORMAT_PVRTC1_4" }, // Image + { "FORMAT_PVRTC4A", "FORMAT_PVRTC1_4A" }, // Image + { "INSTANCE_LIGHTMAP_CAPTURE", "INSTANCE_LIGHTMAP" }, // RenderingServer + { "JOINT_6DOF", "JOINT_TYPE_6DOF" }, // PhysicsServer3D + { "JOINT_CONE_TWIST", "JOINT_TYPE_CONE_TWIST" }, // PhysicsServer3D + { "JOINT_DAMPED_SPRING", "JOINT_TYPE_DAMPED_SPRING" }, // PhysicsServer2D + { "JOINT_GROOVE", "JOINT_TYPE_GROOVE" }, // PhysicsServer2D + { "JOINT_HINGE", "JOINT_TYPE_HINGE" }, // PhysicsServer3D + { "JOINT_PIN", "JOINT_TYPE_PIN" }, // PhysicsServer2D + { "JOINT_SLIDER", "JOINT_TYPE_SLIDER" }, // PhysicsServer3D + { "KEY_CONTROL", "KEY_CTRL" }, // Globals + { "LOOP_PING_PONG", "LOOP_PINGPONG" }, //AudioStreamSample + { "MATH_RAND", "MATH_RANDF_RANGE" }, // VisualScriptBuiltinFunc + { "MATH_RANDOM", "MATH_RANDI_RANGE" }, // VisualScriptBuiltinFunc + { "MATH_STEPIFY", "MATH_STEP_DECIMALS" }, // VisualScriptBuiltinFunc + { "MODE_CHARACTER", "MODE_DYNAMIC_LOCKED" }, // RigidBody2D, RigidBody3D + { "MODE_OPEN_ANY", "FILE_MODE_OPEN_ANY" }, // FileDialog + { "MODE_OPEN_DIR", "FILE_MODE_OPEN_DIR" }, // FileDialog + { "MODE_OPEN_FILE", "FILE_MODE_OPEN_FILE" }, // FileDialog + { "MODE_OPEN_FILES", "FILE_MODE_OPEN_FILES" }, // FileDialog + { "MODE_RIGID", "MODE_DYNAMIC" }, // RigidBody2D, RigidBody3D + { "MODE_SAVE_FILE", "FILE_MODE_SAVE_FILE" }, // FileDialog + { "NOTIFICATION_APP_PAUSED", "NOTIFICATION_APPLICATION_PAUSED" }, // MainLoop + { "NOTIFICATION_APP_RESUMED", "NOTIFICATION_APPLICATION_RESUMED" }, // MainLoop + { "NOTIFICATION_PATH_CHANGED", "NOTIFICATION_PATH_RENAMED" }, //Node + { "NOTIFICATION_WM_FOCUS_IN", "NOTIFICATION_APPLICATION_FOCUS_IN" }, // MainLoop + { "NOTIFICATION_WM_FOCUS_OUT", "NOTIFICATION_APPLICATION_FOCUS_OUT" }, // MainLoop + { "NOTIFICATION_WM_UNFOCUS_REQUEST", "NOTIFICATION_WM_WINDOW_FOCUS_OUT" }, //Node + { "PAUSE_MODE_INHERIT", "PROCESS_MODE_INHERIT" }, // Node + { "PAUSE_MODE_PROCESS", "PROCESS_MODE_ALWAYS" }, // Node + { "PAUSE_MODE_STOP", "PROCESS_MODE_PAUSABLE" }, // Node + { "RENDER_DRAW_CALLS_IN_FRAME", "RENDER_TOTAL_DRAW_CALLS_IN_FRAME" }, // Performance + { "RENDER_OBJECTS_IN_FRAME", "RENDER_TOTAL_OBJECTS_IN_FRAME" }, // Performance + { "SIDE_BOTTOM", "MARGIN_BOTTOM" }, // Globals + { "SIDE_LEFT", "MARGIN_LEFT" }, // Globals + { "SIDE_RIGHT", "MARGIN_RIGHT" }, // Globals + { "SIDE_TOP", "MARGIN_TOP" }, // Globals + { "TEXTURE_TYPE_2D_ARRAY", "TEXTURE_LAYERED_2D_ARRAY" }, // RenderingServer + { "TEXTURE_TYPE_CUBEMAP", "TEXTURE_LAYERED_CUBEMAP_ARRAY" }, // RenderingServer + { "TRACKER_LEFT_HAND", "TRACKER_HAND_LEFT" }, // XRPositionalTracker + { "TRACKER_RIGHT_HAND", "TRACKER_HAND_RIGHT" }, // XRPositionalTracker + { "TYPE_NORMALMAP", "TYPE_NORMAL_MAP" }, // VisualShaderNodeCubemap + + /// enums + { "AlignMode", "AlignmentMode" }, //AspectRatioContainer + { "AnimationProcessMode", "AnimationProcessCallback" }, // AnimationTree, AnimationPlayer + { "Camera2DProcessMode", "Camera2DProcessCallback" }, // Camera2D + { "CubeMapSide", "CubeMapLayer" }, // RenderingServer + { "DampedStringParam", "DampedSpringParam" }, // PhysicsServer2D + { "FFT_Size", "FFTSize" }, // AudioEffectPitchShift,AudioEffectSpectrumAnalyzer + { "PauseMode", "ProcessMode" }, // Node + { "TimerProcessMode", "TimerProcessCallback" }, // Timer + { "Tracking_status", "TrackingStatus" }, // XRInterface + { nullptr, nullptr }, +}; + +static const char *gdscript_function_renames[][2] = { + // { "_set_name", "get_tracker_name"}, // XRPositionalTracker - CameraFeed use this + // { "_unhandled_input", "_unhandled_key_input"}, // BaseButton, ViewportContainer broke Node, FileDialog,SubViewportContainer + // { "create_gizmo", "_create_gizmo"}, // EditorNode3DGizmoPlugin - may be used + // { "get_dependencies", "_get_dependencies" }, // ResourceFormatLoader broke ResourceLoader + // { "get_extents", "get_size" }, // BoxShape, RectangleShape broke Decal, VoxelGI, GPUParticlesCollisionBox, GPUParticlesCollisionSDF, GPUParticlesCollisionHeightField, GPUParticlesAttractorBox, GPUParticlesAttractorVectorField, FogVolume + // { "get_h_offset", "get_drag_horizontal_offset"}, // Camera2D, broke PathFollow, Camera + // { "get_mode", "get_file_mode"}, // FileDialog broke Panel, Shader, CSGPolygon, Tilemap + // { "get_motion", "get_travel"}, // PhysicsTestMotionResult2D broke ParalaxLayer + // { "get_name", "get_tracker_name"}, // XRPositionalTracker broke OS, Node + // { "get_network_connected_peers", "get_peers"}, // MultiplayerAPI broke SceneTree + // { "get_network_peer", "has_multiplayer_peer"}, // MultiplayerAPI broke SceneTree + // { "get_network_unique_id", "get_unique_id"}, // MultiplayerAPI broke SceneTree + // { "get_offset", "get_position_offset" }, // GraphNode broke Gradient + // { "get_peer_port", "get_peer" }, // ENetMultiplayerPeer broke WebSocketServer + // { "get_process_mode", "get_process_callback" }, // ClippedCamera3D broke Node, Sky + // { "get_render_info", "get_rendering_info" }, // RenderingServer broke Viewport + // { "get_type", "get_tracker_type"}, // XRPositionalTracker broke GLTFAccessor, GLTFLight + // { "get_v_offset", "get_drag_vertical_offset"}, // Camera2D, broke PathFollow, Camera + // { "has_network_peer", "has_multiplayer_peer"}, // MultiplayerAPI broke SceneTree + // { "instance", "instantiate" }, // PackedScene, ClassDB - Broke FileSystemDock signal and also tscn files - [instance=ExtResource( 17 )] - this is implemented as custom rule + // { "is_listening", "is_bound"}, // PacketPeerUDP broke TCPServer, UDPServer + // { "is_refusing_new_network_connections", "is_refusing_new_connections"}, // MultiplayerAPI broke SceneTree + // { "is_valid", "has_valid_event" }, // Shortcut broke e.g. Callable + // { "listen", "bound"}, // PacketPeerUDP broke TCPServer, UDPServer + // { "load", "_load"}, // ResourceFormatLoader broke ConfigFile, Image, StreamTexture2D + // { "make_current", "set_current" }, // Camera2D broke Camera3D, Listener2D + // { "process", "_process" }, // AnimationNode - This word is commonly used + // { "save", "_save"}, // ResourceFormatLoader broke ConfigFile, Image, StreamTexture2D + // { "set_autowrap", "set_autowrap_mode" }, // AcceptDialog broke Label - Cyclic Rename + // { "set_color", "surface_set_color"}, // ImmediateMesh broke Light2D, Theme, SurfaceTool + // { "set_event", "set_shortcut" }, // BaseButton - Cyclic Rename + // { "set_extents", "set_size"}, // BoxShape, RectangleShape broke ReflectionProbe + // { "set_flag", "set_particle_flag"}, // ParticlesMaterial broke Window, HingeJoint3D + // { "set_h_offset", "set_drag_horizontal_offset" }, // Camera2D broke Camera3D, PathFollow3D, PathFollow2D + // { "set_margin", "set_offset" }, // Control broke Shape3D, AtlasTexture + // { "set_mode", "set_mode_file_mode" }, // FileDialog broke Panel, Shader, CSGPolygon, Tilemap + // { "set_normal", "surface_set_normal"}, // ImmediateGeometry broke SurfaceTool, WorldMarginShape2D + // { "set_process_mode", "set_process_callback" }, // AnimationTree broke Node, Tween, Sky + // { "set_refuse_new_network_connections", "set_refuse_new_connections"}, // MultiplayerAPI broke SceneTree + // { "set_uv", "surface_set_uv" }, // ImmediateMesh broke Polygon2D + // { "set_v_offset", "set_drag_vertical_offset" }, // Camera2D broke Camera3D, PathFollow3D, PathFollow2D + // {"get_points","get_points_id"},// Astar, broke Line2D, Convexpolygonshape + // {"get_v_scroll","get_v_scroll_bar"},//ItemList, broke TextView + { "RenderingServer", "get_tab_alignment" }, // Tab + { "_about_to_show", "_about_to_popup" }, // ColorPickerButton + { "_get_configuration_warning", "_get_configuration_warnings" }, // Node + { "_set_current", "set_current" }, // Camera2D + { "_set_editor_description", "set_editor_description" }, // Node + { "_toplevel_raise_self", "_top_level_raise_self" }, // CanvasItem + { "_update_wrap_at", "_update_wrap_at_column" }, // TextEdit + { "add_animation", "add_animation_library" }, // AnimationPlayer + { "add_cancel", "add_cancel_button" }, // AcceptDialog + { "add_central_force", "add_constant_central_force" }, //RigidDynamicBody2D + { "add_child_below_node", "add_sibling" }, // Node + { "add_color_override", "add_theme_color_override" }, // Control + { "add_constant_override", "add_theme_constant_override" }, // Control + { "add_font_override", "add_theme_font_override" }, // Control + { "add_force", "add_constant_force" }, //RigidDynamicBody2D + { "add_icon_override", "add_theme_icon_override" }, // Control + { "add_scene_import_plugin", "add_scene_format_importer_plugin" }, //EditorPlugin + { "add_stylebox_override", "add_theme_stylebox_override" }, // Control + { "add_torque", "add_constant_torque" }, //RigidDynamicBody2D + { "bind_child_node_to_bone", "set_bone_children" }, // Skeleton3D + { "bumpmap_to_normalmap", "bump_map_to_normal_map" }, // Image + { "can_be_hidden", "_can_be_hidden" }, // EditorNode3DGizmoPlugin + { "can_drop_data_fw", "_can_drop_data_fw" }, // ScriptEditor + { "can_generate_small_preview", "_can_generate_small_preview" }, // EditorResourcePreviewGenerator + { "can_instance", "can_instantiate" }, // PackedScene, Script + { "canvas_light_set_scale", "canvas_light_set_texture_scale" }, // RenderingServer + { "center_viewport_to_cursor", "center_viewport_to_caret" }, // TextEdit + { "clip_polygons_2d", "clip_polygons" }, // Geometry2D + { "clip_polyline_with_polygon_2d", "clip_polyline_with_polygon" }, //Geometry2D + { "commit_handle", "_commit_handle" }, // EditorNode3DGizmo + { "convex_hull_2d", "convex_hull" }, // Geometry2D + { "cursor_get_blink_speed", "get_caret_blink_speed" }, // TextEdit + { "cursor_get_column", "get_caret_column" }, // TextEdit + { "cursor_get_line", "get_caret_line" }, // TextEdit + { "cursor_set_blink_enabled", "set_caret_blink_enabled" }, // TextEdit + { "cursor_set_blink_speed", "set_caret_blink_speed" }, // TextEdit + { "cursor_set_column", "set_caret_column" }, // TextEdit + { "cursor_set_line", "set_caret_line" }, // TextEdit + { "damped_spring_joint_create", "joint_make_damped_spring" }, // PhysicsServer2D + { "damped_string_joint_get_param", "damped_spring_joint_get_param" }, // PhysicsServer2D + { "damped_string_joint_set_param", "damped_spring_joint_set_param" }, // PhysicsServer2D + { "delete_char_at_cursor", "delete_char_at_caret" }, // LineEdit + { "deselect_items", "deselect_all" }, // FileDialog + { "drop_data_fw", "_drop_data_fw" }, // ScriptEditor + { "exclude_polygons_2d", "exclude_polygons" }, // Geometry2D + { "find_scancode_from_string", "find_keycode_from_string" }, // OS + { "forward_canvas_draw_over_viewport", "_forward_canvas_draw_over_viewport" }, // EditorPlugin + { "forward_canvas_force_draw_over_viewport", "_forward_canvas_force_draw_over_viewport" }, // EditorPlugin + { "forward_canvas_gui_input", "_forward_canvas_gui_input" }, // EditorPlugin + { "forward_spatial_draw_over_viewport", "_forward_3d_draw_over_viewport" }, // EditorPlugin + { "forward_spatial_force_draw_over_viewport", "_forward_3d_force_draw_over_viewport" }, // EditorPlugin + { "forward_spatial_gui_input", "_forward_3d_gui_input" }, // EditorPlugin + { "generate_from_path", "_generate_from_path" }, // EditorResourcePreviewGenerator + { "generate_small_preview_automatically", "_generate_small_preview_automatically" }, // EditorResourcePreviewGenerator + { "get_action_list", "action_get_events" }, // InputMap + { "get_alt", "is_alt_pressed" }, // InputEventWithModifiers + { "get_animation_process_mode", "get_process_callback" }, // AnimationPlayer + { "get_applied_force", "get_constant_force" }, //RigidDynamicBody2D + { "get_applied_torque", "get_constant_torque" }, //RigidDynamicBody2D + { "get_audio_bus", "get_audio_bus_name" }, // Area3D + { "get_bound_child_nodes_to_bone", "get_bone_children" }, // Skeleton3D + { "get_camera", "get_camera_3d" }, // Viewport -> this is also convertable to get_camera_2d, broke GLTFNode + { "get_cancel", "get_cancel_button" }, // ConfirmationDialog + { "get_caption", "_get_caption" }, // AnimationNode + { "get_cast_to", "get_target_position" }, // RayCast2D, RayCast3D + { "get_child_by_name", "_get_child_by_name" }, // AnimationNode + { "get_child_nodes", "_get_child_nodes" }, // AnimationNode + { "get_closest_point_to_segment_2d", "get_closest_point_to_segment" }, // Geometry2D + { "get_closest_point_to_segment_uncapped_2d", "get_closest_point_to_segment_uncapped" }, // Geometry2D + { "get_closest_points_between_segments_2d", "get_closest_point_to_segment" }, // Geometry2D + { "get_collision_layer_bit", "get_collision_layer_value" }, // CSGShape3D and a lot of others like GridMap + { "get_collision_mask_bit", "get_collision_mask_value" }, // CSGShape3D and a lot of others like GridMap + { "get_color_types", "get_color_type_list" }, // Theme + { "get_command", "is_command_pressed" }, // InputEventWithModifiers + { "get_constant_types", "get_constant_type_list" }, // Theme + { "get_control", "is_ctrl_pressed" }, // InputEventWithModifiers + { "get_cull_mask_bit", "get_cull_mask_value" }, // Camera3D + { "get_cursor_position", "get_caret_column" }, // LineEdit + { "get_d", "get_distance" }, // LineShape2D + { "get_drag_data_fw", "_get_drag_data_fw" }, // ScriptEditor + { "get_editor_viewport", "get_viewport" }, // EditorPlugin + { "get_enabled_focus_mode", "get_focus_mode" }, // BaseButton + { "get_endian_swap", "is_big_endian" }, // File + { "get_error_string", "get_error_message" }, // JSON + { "get_focus_neighbour", "get_focus_neighbor" }, // Control + { "get_font_types", "get_font_type_list" }, // Theme + { "get_frame_color", "get_color" }, // ColorRect + { "get_global_rate_scale", "get_playback_speed_scale" }, // AudioServer + { "get_gravity_distance_scale", "get_gravity_point_distance_scale" }, //Area2D + { "get_gravity_vector", "get_gravity_direction" }, //Area2D + { "get_h_scrollbar", "get_h_scroll_bar" }, //ScrollContainer + { "get_hand", "get_tracker_hand" }, // XRPositionalTracker + { "get_handle_name", "_get_handle_name" }, // EditorNode3DGizmo + { "get_handle_value", "_get_handle_value" }, // EditorNode3DGizmo + { "get_icon_align", "get_icon_alignment" }, // Button + { "get_icon_types", "get_icon_type_list" }, // Theme + { "get_idle_frames", "get_process_frames" }, // Engine + { "get_import_options", "_get_import_options" }, // EditorImportPlugin + { "get_import_order", "_get_import_order" }, // EditorImportPlugin + { "get_importer_name", "_get_importer_name" }, // EditorImportPlugin + { "get_interior_ambient", "get_ambient_color" }, // ReflectionProbe + { "get_interior_ambient_energy", "get_ambient_color_energy" }, // ReflectionProbe + { "get_iterations_per_second", "get_physics_ticks_per_second" }, // Engine + { "get_last_mouse_speed", "get_last_mouse_velocity" }, // Input + { "get_layer_mask_bit", "get_layer_mask_value" }, // VisualInstance3D + { "get_len", "get_length" }, // File + { "get_max_atlas_size", "get_max_texture_size" }, // LightmapGI + { "get_metakey", "is_meta_pressed" }, // InputEventWithModifiers + { "get_mid_height", "get_height" }, // CapsuleMesh + { "get_motion_remainder", "get_remainder" }, // PhysicsTestMotionResult2D + { "get_network_connected_peers", "get_peers" }, // Multiplayer API + { "get_network_master", "get_multiplayer_authority" }, // Node + { "get_network_peer", "get_multiplayer_peer" }, // Multiplayer API + { "get_network_unique_id", "get_unique_id" }, // Multiplayer API + { "get_ok", "get_ok_button" }, // AcceptDialog + { "get_option_visibility", "_get_option_visibility" }, // EditorImportPlugin + { "get_parameter_default_value", "_get_parameter_default_value" }, // AnimationNode + { "get_parameter_list", "_get_parameter_list" }, // AnimationNode + { "get_parent_spatial", "get_parent_node_3d" }, // Node3D + { "get_physical_scancode", "get_physical_keycode" }, // InputEventKey + { "get_physical_scancode_with_modifiers", "get_physical_keycode_with_modifiers" }, // InputEventKey + { "get_plugin_icon", "_get_plugin_icon" }, // EditorPlugin + { "get_plugin_name", "_get_plugin_name" }, // EditorPlugin + { "get_preset_count", "_get_preset_count" }, // EditorImportPlugin + { "get_preset_name", "_get_preset_name" }, // EditorImportPlugin + { "get_recognized_extensions", "_get_recognized_extensions" }, // ResourceFormatLoader, EditorImportPlugin broke ResourceSaver + { "get_render_info", "get_rendering_info" }, // RenderingServer + { "get_render_targetsize", "get_render_target_size" }, // XRInterface + { "get_resource_type", "_get_resource_type" }, // ResourceFormatLoader + { "get_result", "get_data" }, //JSON + { "get_rpc_sender_id", "get_remote_sender_id" }, // Multiplayer API + { "get_save_extension", "_get_save_extension" }, // EditorImportPlugin + { "get_scancode", "get_keycode" }, // InputEventKey + { "get_scancode_string", "get_keycode_string" }, // OS + { "get_scancode_with_modifiers", "get_keycode_with_modifiers" }, // InputEventKey + { "get_shift", "is_shift_pressed" }, // InputEventWithModifiers + { "get_size_override", "get_size_2d_override" }, // SubViewport + { "get_slips_on_slope", "get_slide_on_slope" }, // SeparationRayShape2D, SeparationRayShape3D + { "get_space_override_mode", "get_gravity_space_override_mode" }, // Area2D + { "get_speed", "get_velocity" }, // InputEventMouseMotion + { "get_stylebox_types", "get_stylebox_type_list" }, // Theme + { "get_surface_material", "get_surface_override_material" }, // MeshInstance3D broke ImporterMesh + { "get_surface_material_count", "get_surface_override_material_count" }, // MeshInstance3D + { "get_tab_disabled", "is_tab_disabled" }, // Tab + { "get_tab_hidden", "is_tab_hidden" }, // Tab + { "get_text_align", "get_text_alignment" }, // Button + { "get_theme_item_types", "get_theme_item_type_list" }, // Theme + { "get_timer_process_mode", "get_timer_process_callback" }, // Timer + { "get_translation", "get_position" }, // Node3D broke GLTFNode which is used rarely + { "get_use_in_baked_light", "is_baking_navigation" }, // GridMap + { "get_used_cells_by_id", "get_used_cells" }, // TileMap + { "get_v_scrollbar", "get_v_scroll_bar" }, //ScrollContainer + { "get_visible_name", "_get_visible_name" }, // EditorImportPlugin + { "get_window_layout", "_get_window_layout" }, // EditorPlugin + { "get_word_under_cursor", "get_word_under_caret" }, // TextEdit + { "get_world", "get_world_3d" }, // Viewport, Spatial + { "get_zfar", "get_far" }, // Camera3D broke GLTFCamera + { "get_znear", "get_near" }, // Camera3D broke GLTFCamera + { "groove_joint_create", "joint_make_groove" }, // PhysicsServer2D + { "handle_menu_selected", "_handle_menu_selected" }, // EditorResourcePicker + { "handles_type", "_handles_type" }, // ResourceFormatLoader + { "has_color", "has_theme_color" }, // Control broke Theme + { "has_color_override", "has_theme_color_override" }, // Control broke Theme + { "has_constant", "has_theme_constant" }, // Control + { "has_constant_override", "has_theme_constant_override" }, // Control + { "has_filter", "_has_filter" }, // AnimationNode + { "has_font", "has_theme_font" }, // Control broke Theme + { "has_font_override", "has_theme_font_override" }, // Control + { "has_icon", "has_theme_icon" }, // Control broke Theme + { "has_icon_override", "has_theme_icon_override" }, // Control + { "has_main_screen", "_has_main_screen" }, // EditorPlugin + { "has_network_peer", "has_multiplayer_peer" }, // Multiplayer API + { "has_stylebox", "has_theme_stylebox" }, // Control broke Theme + { "has_stylebox_override", "has_theme_stylebox_override" }, // Control + { "http_escape", "uri_encode" }, // String + { "http_unescape", "uri_decode" }, // String + { "import_animation_from_other_importer", "_import_animation" }, //EditorSceneFormatImporter + { "import_scene_from_other_importer", "_import_scene" }, //EditorSceneFormatImporter + { "instance_set_surface_material", "instance_set_surface_override_material" }, // RenderingServer + { "intersect_polygons_2d", "intersect_polygons" }, // Geometry2D + { "intersect_polyline_with_polygon_2d", "intersect_polyline_with_polygon" }, // Geometry2D + { "is_a_parent_of", "is_ancestor_of" }, // Node + { "is_commiting_action", "is_committing_action" }, // UndoRedo + { "is_doubleclick", "is_double_click" }, // InputEventMouseButton + { "is_h_drag_enabled", "is_drag_horizontal_enabled" }, // Camera2D + { "is_handle_highlighted", "_is_handle_highlighted" }, // EditorNode3DGizmo, EditorNode3DGizmoPlugin + { "is_network_master", "is_multiplayer_authority" }, // Node + { "is_network_server", "is_server" }, // Multiplayer API + { "is_normalmap", "is_normal_map" }, // NoiseTexture + { "is_refusing_new_network_connections", "is_refusing_new_connections" }, // Multiplayer API + { "is_region", "is_region_enabled" }, // Sprite2D + { "is_scancode_unicode", "is_keycode_unicode" }, // OS + { "is_selectable_when_hidden", "_is_selectable_when_hidden" }, // EditorNode3DGizmoPlugin + { "is_set_as_toplevel", "is_set_as_top_level" }, // CanvasItem + { "is_shortcut", "matches_event" }, // Shortcut + { "is_size_override_stretch_enabled", "is_size_2d_override_stretch_enabled" }, // SubViewport + { "is_sort_enabled", "is_y_sort_enabled" }, // Node2D + { "is_static_body", "is_able_to_sleep" }, // PhysicalBone3D - TODO - not sure + { "is_v_drag_enabled", "is_drag_vertical_enabled" }, // Camera2D + { "joint_create_cone_twist", "joint_make_cone_twist" }, // PhysicsServer3D + { "joint_create_generic_6dof", "joint_make_generic_6dof" }, // PhysicsServer3D + { "joint_create_hinge", "joint_make_hinge" }, // PhysicsServer3D + { "joint_create_pin", "joint_make_pin" }, // PhysicsServer3D + { "joint_create_slider", "joint_make_slider" }, // PhysicsServer3D + { "line_intersects_line_2d", "line_intersects_line" }, // Geometry2D + { "load_from_globals", "load_from_project_settings" }, // InputMap + { "make_convex_from_brothers", "make_convex_from_siblings" }, // CollisionShape3D + { "merge_polygons_2d", "merge_polygons" }, // Geometry2D + { "mesh_surface_get_format", "mesh_surface_get_format_attribute_stride" }, // RenderingServer + { "mesh_surface_update_region", "mesh_surface_update_attribute_region" }, // RenderingServer + { "move_to_bottom", "move_after" }, // Skeleton3D + { "move_to_top", "move_before" }, // Skeleton3D + { "multimesh_allocate", "multimesh_allocate_data" }, // RenderingServer + { "normalmap_to_xy", "normal_map_to_xy" }, // Image + { "offset_polygon_2d", "offset_polygon" }, // Geometry2D + { "offset_polyline_2d", "offset_polyline" }, // Geometry2D + { "percent_decode", "uri_decode" }, // String + { "percent_encode", "uri_encode" }, // String + { "pin_joint_create", "joint_make_pin" }, // PhysicsServer2D + { "popup_centered_minsize", "popup_centered_clamped" }, // Window + { "post_import", "_post_import" }, // EditorScenePostImport + { "print_stray_nodes", "print_orphan_nodes" }, // Node + { "property_list_changed_notify", "notify_property_list_changed" }, // Object + { "recognize", "_recognize" }, // ResourceFormatLoader + { "regen_normalmaps", "regen_normal_maps" }, // ArrayMesh + { "remove", "remove_at" }, // Array, broke Directory + { "remove_animation", "remove_animation_library" }, // AnimationPlayer + { "remove_color_override", "remove_theme_color_override" }, // Control + { "remove_constant_override", "remove_theme_constant_override" }, // Control + { "remove_font_override", "remove_theme_font_override" }, // Control + { "remove_scene_import_plugin", "remove_scene_format_importer_plugin" }, //EditorPlugin + { "remove_stylebox_override", "remove_theme_stylebox_override" }, // Control + { "rename_animation", "rename_animation_library" }, // AnimationPlayer + { "rename_dependencies", "_rename_dependencies" }, // ResourceFormatLoader + { "save_external_data", "_save_external_data" }, // EditorPlugin + { "segment_intersects_segment_2d", "segment_intersects_segment" }, // Geometry2D + { "set_adjustment_enable", "set_adjustment_enabled" }, // Environment + { "set_alt", "set_alt_pressed" }, // InputEventWithModifiers + { "set_anchor_and_margin", "set_anchor_and_offset" }, // Control + { "set_anchors_and_margins_preset", "set_anchors_and_offsets_preset" }, // Control + { "set_animation_process_mode", "set_process_callback" }, // AnimationPlayer + { "set_as_bulk_array", "set_buffer" }, // MultiMesh + { "set_as_normalmap", "set_as_normal_map" }, // NoiseTexture + { "set_as_toplevel", "set_as_top_level" }, // CanvasItem + { "set_audio_bus", "set_audio_bus_name" }, // Area3D + { "set_autowrap", "set_autowrap_mode" }, // Label broke AcceptDialog + { "set_cast_to", "set_target_position" }, // RayCast2D, RayCast3D + { "set_collision_layer_bit", "set_collision_layer_value" }, // CSGShape3D and a lot of others like GridMap + { "set_collision_mask_bit", "set_collision_mask_value" }, // CSGShape3D and a lot of others like GridMap + { "set_column_min_width", "set_column_custom_minimum_width" }, // Tree + { "set_command", "set_command_pressed" }, // InputEventWithModifiers + { "set_control", "set_ctrl_pressed" }, // InputEventWithModifiers + { "set_create_options", "_set_create_options" }, // EditorResourcePicker + { "set_cull_mask_bit", "set_cull_mask_value" }, // Camera3D + { "set_cursor_position", "set_caret_column" }, // LineEdit + { "set_d", "set_distance" }, // WorldMarginShape2D + { "set_doubleclick", "set_double_click" }, // InputEventMouseButton + { "set_enabled_focus_mode", "set_focus_mode" }, // BaseButton + { "set_endian_swap", "set_big_endian" }, // File + { "set_expand_to_text_length", "set_expand_to_text_length_enabled" }, // LineEdit + { "set_focus_neighbour", "set_focus_neighbor" }, // Control + { "set_frame_color", "set_color" }, // ColorRect + { "set_global_rate_scale", "set_playback_speed_scale" }, // AudioServer + { "set_gravity_distance_scale", "set_gravity_point_distance_scale" }, // Area2D + { "set_gravity_vector", "set_gravity_direction" }, // Area2D + { "set_h_drag_enabled", "set_drag_horizontal_enabled" }, // Camera2D + { "set_icon_align", "set_icon_alignment" }, // Button + { "set_interior_ambient", "set_ambient_color" }, // ReflectionProbe + { "set_interior_ambient_energy", "set_ambient_color_energy" }, // ReflectionProbe + { "set_is_initialized", "_is_initialized" }, // XRInterface + { "set_is_primary", "set_primary" }, // XRInterface + { "set_iterations_per_second", "set_physics_ticks_per_second" }, // Engine + { "set_layer_mask_bit", "set_layer_mask_value" }, // VisualInstance3D + { "set_margins_preset", "set_offsets_preset" }, // Control + { "set_max_atlas_size", "set_max_texture_size" }, // LightmapGI + { "set_metakey", "set_meta_pressed" }, // InputEventWithModifiers + { "set_mid_height", "set_height" }, // CapsuleMesh + { "set_network_master", "set_multiplayer_authority" }, // Node + { "set_network_peer", "set_multiplayer_peer" }, // Multiplayer API + { "set_physical_scancode", "set_physical_keycode" }, // InputEventKey + { "set_refuse_new_network_connections", "set_refuse_new_connections" }, // Multiplayer API + { "set_region", "set_region_enabled" }, // Sprite2D, Sprite broke AtlasTexture + { "set_region_filter_clip", "set_region_filter_clip_enabled" }, // Sprite2D + { "set_rotate", "set_rotates" }, // PathFollow2D + { "set_scancode", "set_keycode" }, // InputEventKey + { "set_shift", "set_shift_pressed" }, // InputEventWithModifiers + { "set_size_override", "set_size_2d_override" }, // SubViewport broke ImageTexture + { "set_size_override_stretch", "set_size_2d_override_stretch" }, // SubViewport + { "set_slips_on_slope", "set_slide_on_slope" }, // SeparationRayShape2D, SeparationRayShape3D + { "set_sort_enabled", "set_y_sort_enabled" }, // Node2D + { "set_space_override_mode", "set_gravity_space_override_mode" }, // Area2D + { "set_speed", "set_velocity" }, // InputEventMouseMotion + { "set_ssao_edge_sharpness", "set_ssao_sharpness" }, // Environment + { "set_surface_material", "set_surface_override_material" }, // MeshInstance3D broke ImporterMesh + { "set_tab_align", "set_tab_alignment" }, //TabContainer + { "set_tangent", "surface_set_tangent" }, // ImmediateGeometry broke SurfaceTool + { "set_text_align", "set_text_alignment" }, // Button + { "set_timer_process_mode", "set_timer_process_callback" }, // Timer + { "set_tonemap_auto_exposure", "set_tonemap_auto_exposure_enabled" }, // Environment + { "set_translation", "set_position" }, // Node3D - this broke GLTFNode which is used rarely + { "set_uv2", "surface_set_uv2" }, // ImmediateMesh broke Surffacetool + { "set_v_drag_enabled", "set_drag_vertical_enabled" }, // Camera2D + { "set_valign", "set_vertical_alignment" }, // Label + { "set_window_layout", "_set_window_layout" }, // EditorPlugin + { "set_zfar", "set_far" }, // Camera3D broke GLTFCamera + { "set_znear", "set_near" }, // Camera3D broke GLTFCamera + { "shortcut_match", "is_match" }, // InputEvent + { "skeleton_allocate", "skeleton_allocate_data" }, // RenderingServer + { "surface_update_region", "surface_update_attribute_region" }, // ArrayMesh + { "targeting_method", "tween_method" }, // Tween + { "targeting_property", "tween_property" }, // Tween + { "track_remove_key_at_position", "track_remove_key_at_time" }, // Animation + { "triangulate_delaunay_2d", "triangulate_delaunay" }, // Geometry2D + { "unbind_child_node_from_bone", "remove_bone_child" }, // Skeleton3D + { "unselect", "deselect" }, // ItemList + { "unselect_all", "deselect_all" }, // ItemList + { "update_configuration_warning", "update_configuration_warnings" }, // Node + { "update_gizmo", "update_gizmos" }, // Node3D + { "viewport_set_use_arvr", "viewport_set_use_xr" }, // RenderingServer + { "warp_mouse_position", "warp_mouse" }, // Input + + // Builtin types + // { "empty", "is_empty" }, // Array - Used as custom rule // Be careful, this will be used everywhere + { "clamped", "clamp" }, // Vector2 // Be careful, this will be used everywhere + { "get_rotation_quat", "get_rotation_quaternion" }, // Basis + { "grow_margin", "grow_side" }, // Rect2 + { "invert", "reverse" }, // Array - TODO check // Be careful, this will be used everywhere + { "is_abs_path", "is_absolute_path" }, // String + { "is_valid_integer", "is_valid_int" }, // String + { "linear_interpolate", "lerp" }, // Color + { "to_ascii", "to_ascii_buffer" }, // String + { "to_utf8", "to_utf8_buffer" }, // String + { "to_wchar", "to_utf32_buffer" }, // String // TODO - utf32 or utf16? + + // Globals + { "rand_range", "randf_range" }, + { "stepify", "snapped" }, + + { nullptr, nullptr }, +}; + +// gdscript_function_renames clone with CamelCase +static const char *csharp_function_renames[][2] = { + // { "_SetName", "GetTrackerName"}, // XRPositionalTracker - CameraFeed use this + // { "_UnhandledInput", "_UnhandledKeyInput"}, // BaseButton, ViewportContainer broke Node, FileDialog,SubViewportContainer + // { "CreateGizmo", "_CreateGizmo"}, // EditorNode3DGizmoPlugin - may be used + // { "GetDependencies", "_GetDependencies" }, // ResourceFormatLoader broke ResourceLoader + // { "GetExtents", "GetSize" }, // BoxShape, RectangleShape broke Decal, VoxelGI, GPUParticlesCollisionBox, GPUParticlesCollisionSDF, GPUParticlesCollisionHeightField, GPUParticlesAttractorBox, GPUParticlesAttractorVectorField, FogVolume + // { "GetHOffset", "GetDragHorizontalOffset"}, // Camera2D, broke PathFollow, Camera + // { "GetMode", "GetFileMode"}, // FileDialog broke Panel, Shader, CSGPolygon, Tilemap + // { "GetMotion", "GetTravel"}, // PhysicsTestMotionResult2D broke ParalaxLayer + // { "GetName", "GetTrackerName"}, // XRPositionalTracker broke OS, Node + // { "GetNetworkConnectedPeers", "GetPeers"}, // MultiplayerAPI broke SceneTree + // { "GetNetworkPeer", "HasMultiplayerPeer"}, // MultiplayerAPI broke SceneTree + // { "GetNetworkUniqueId", "GetUniqueId"}, // MultiplayerAPI broke SceneTree + // { "GetOffset", "GetPositionOffset" }, // GraphNode broke Gradient + // { "GetPeerPort", "GetPeer" }, // ENetMultiplayerPeer broke WebSocketServer + // { "GetProcessMode", "GetProcessCallback" }, // ClippedCamera3D broke Node, Sky + // { "GetRenderInfo", "GetRenderingInfo" }, // RenderingServer broke Viewport + // { "GetType", "GetTrackerType"}, // XRPositionalTracker broke GLTFAccessor, GLTFLight + // { "GetVOffset", "GetDragVerticalOffset"}, // Camera2D, broke PathFollow, Camera + // { "HasNetworkPeer", "HasMultiplayerPeer"}, // MultiplayerAPI broke SceneTree + // { "Instance", "Instantiate" }, // PackedScene, ClassDB - Broke FileSystemDock signal and also tscn files - [instance=ExtResource( 17 )] - this is implemented as custom rule + // { "IsListening", "IsBound"}, // PacketPeerUDP broke TCPServer, UDPServer + // { "IsRefusingNewNetworkConnections", "IsRefusingNewConnections"}, // MultiplayerAPI broke SceneTree + // { "IsValid", "HasValidEvent" }, // Shortcut broke e.g. Callable + // { "Listen", "Bound"}, // PacketPeerUDP broke TCPServer, UDPServer + // { "Load", "_Load"}, // ResourceFormatLoader broke ConfigFile, Image, StreamTexture2D + // { "MakeCurrent", "SetCurrent" }, // Camera2D broke Camera3D, Listener2D + // { "Process", "_Process" }, // AnimationNode - This word is commonly used + // { "Save", "_Save"}, // ResourceFormatLoader broke ConfigFile, Image, StreamTexture2D + // { "SetAutowrap", "SetAutowrapMode" }, // AcceptDialog broke Label - Cyclic Rename + // { "SetColor", "SurfaceSetColor"}, // ImmediateMesh broke Light2D, Theme, SurfaceTool + // { "SetEvent", "SetShortcut" }, // BaseButton - Cyclic Rename + // { "SetExtents", "SetSize"}, // BoxShape, RectangleShape broke ReflectionProbe + // { "SetFlag", "SetParticleFlag"}, // ParticlesMaterial broke Window, HingeJoint3D + // { "SetHOffset", "SetDragHorizontalOffset" }, // Camera2D broke Camera3D, PathFollow3D, PathFollow2D + // { "SetMargin", "SetOffset" }, // Control broke Shape3D, AtlasTexture + // { "SetMode", "SetModeFileMode" }, // FileDialog broke Panel, Shader, CSGPolygon, Tilemap + // { "SetNormal", "SurfaceSetNormal"}, // ImmediateGeometry broke SurfaceTool, WorldMarginShape2D + // { "SetProcessMode", "SetProcessCallback" }, // AnimationTree broke Node, Tween, Sky + // { "SetRefuseNewNetworkConnections", "SetRefuseNewConnections"}, // MultiplayerAPI broke SceneTree + // { "SetUv", "SurfaceSetUv" }, // ImmediateMesh broke Polygon2D + // { "SetVOffset", "SetDragVerticalOffset" }, // Camera2D broke Camera3D, PathFollow3D, PathFollow2D + // {"GetPoints","GetPointsId"},// Astar, broke Line2D, Convexpolygonshape + // {"GetVScroll","GetVScrollBar"},//ItemList, broke TextView + { "RenderingServer", "GetTabAlignment" }, // Tab + { "_AboutToShow", "_AboutToPopup" }, // ColorPickerButton + { "_GetConfigurationWarning", "_GetConfigurationWarnings" }, // Node + { "_SetCurrent", "SetCurrent" }, // Camera2D + { "_SetEditorDescription", "SetEditorDescription" }, // Node + { "_ToplevelRaiseSelf", "_TopLevelRaiseSelf" }, // CanvasItem + { "_UpdateWrapAt", "_UpdateWrapAtColumn" }, // TextEdit + { "AddAnimation", "AddAnimationLibrary" }, // AnimationPlayer + { "AddCancel", "AddCancelButton" }, // AcceptDialog + { "AddCentralForce", "AddConstantCentralForce" }, //RigidDynamicBody2D + { "AddChildBelowNode", "AddSibling" }, // Node + { "AddColorOverride", "AddThemeColorOverride" }, // Control + { "AddConstantOverride", "AddThemeConstantOverride" }, // Control + { "AddFontOverride", "AddThemeFontOverride" }, // Control + { "AddForce", "AddConstantForce" }, //RigidDynamicBody2D + { "AddIconOverride", "AddThemeIconOverride" }, // Control + { "AddSceneImportPlugin", "AddSceneFormatImporterPlugin" }, //EditorPlugin + { "AddStyleboxOverride", "AddThemeStyleboxOverride" }, // Control + { "AddTorque", "AddConstantTorque" }, //RigidDynamicBody2D + { "BindChildNodeToBone", "SetBoneChildren" }, // Skeleton3D + { "BumpmapToNormalmap", "BumpMapToNormalMap" }, // Image + { "CanBeHidden", "_CanBeHidden" }, // EditorNode3DGizmoPlugin + { "CanDropDataFw", "_CanDropDataFw" }, // ScriptEditor + { "CanGenerateSmallPreview", "_CanGenerateSmallPreview" }, // EditorResourcePreviewGenerator + { "CanInstance", "CanInstantiate" }, // PackedScene, Script + { "CanvasLightSetScale", "CanvasLightSetTextureScale" }, // RenderingServer + { "CenterViewportToCursor", "CenterViewportToCaret" }, // TextEdit + { "ClipPolygons2d", "ClipPolygons" }, // Geometry2D + { "ClipPolylineWithPolygon2d", "ClipPolylineWithPolygon" }, //Geometry2D + { "CommitHandle", "_CommitHandle" }, // EditorNode3DGizmo + { "ConvexHull2d", "ConvexHull" }, // Geometry2D + { "CursorGetBlinkSpeed", "GetCaretBlinkSpeed" }, // TextEdit + { "CursorGetColumn", "GetCaretColumn" }, // TextEdit + { "CursorGetLine", "GetCaretLine" }, // TextEdit + { "CursorSetBlinkEnabled", "SetCaretBlinkEnabled" }, // TextEdit + { "CursorSetBlinkSpeed", "SetCaretBlinkSpeed" }, // TextEdit + { "CursorSetColumn", "SetCaretColumn" }, // TextEdit + { "CursorSetLine", "SetCaretLine" }, // TextEdit + { "DampedSpringJointCreate", "JointMakeDampedSpring" }, // PhysicsServer2D + { "DampedStringJointGetParam", "DampedSpringJointGetParam" }, // PhysicsServer2D + { "DampedStringJointSetParam", "DampedSpringJointSetParam" }, // PhysicsServer2D + { "DeleteCharAtCursor", "DeleteCharAtCaret" }, // LineEdit + { "DeselectItems", "DeselectAll" }, // FileDialog + { "DropDataFw", "_DropDataFw" }, // ScriptEditor + { "ExcludePolygons2d", "ExcludePolygons" }, // Geometry2D + { "FindScancodeFromString", "FindKeycodeFromString" }, // OS + { "ForwardCanvasDrawOverViewport", "_ForwardCanvasDrawOverViewport" }, // EditorPlugin + { "ForwardCanvasForceDrawOverViewport", "_ForwardCanvasForceDrawOverViewport" }, // EditorPlugin + { "ForwardCanvasGuiInput", "_ForwardCanvasGuiInput" }, // EditorPlugin + { "ForwardSpatialDrawOverViewport", "_Forward3dDrawOverViewport" }, // EditorPlugin + { "ForwardSpatialForceDrawOverViewport", "_Forward3dForceDrawOverViewport" }, // EditorPlugin + { "ForwardSpatialGuiInput", "_Forward3dGuiInput" }, // EditorPlugin + { "GenerateFromPath", "_GenerateFromPath" }, // EditorResourcePreviewGenerator + { "GenerateSmallPreviewAutomatically", "_GenerateSmallPreviewAutomatically" }, // EditorResourcePreviewGenerator + { "GetActionList", "ActionGetEvents" }, // InputMap + { "GetAlt", "IsAltPressed" }, // InputEventWithModifiers + { "GetAnimationProcessMode", "GetProcessCallback" }, // AnimationPlayer + { "GetAppliedForce", "GetConstantForce" }, //RigidDynamicBody2D + { "GetAppliedTorque", "GetConstantTorque" }, //RigidDynamicBody2D + { "GetAudioBus", "GetAudioBusName" }, // Area3D + { "GetBoundChildNodesToBone", "GetBoneChildren" }, // Skeleton3D + { "GetCamera", "GetCamera3d" }, // Viewport -> this is also convertable to getCamera2d, broke GLTFNode + { "GetCancel", "GetCancelButton" }, // ConfirmationDialog + { "GetCaption", "_GetCaption" }, // AnimationNode + { "GetCastTo", "GetTargetPosition" }, // RayCast2D, RayCast3D + { "GetChildByName", "_GetChildByName" }, // AnimationNode + { "GetChildNodes", "_GetChildNodes" }, // AnimationNode + { "GetClosestPointToSegment2d", "GetClosestPointToSegment" }, // Geometry2D + { "GetClosestPointToSegmentUncapped2d", "GetClosestPointToSegmentUncapped" }, // Geometry2D + { "GetClosestPointsBetweenSegments2d", "GetClosestPointToSegment" }, // Geometry2D + { "GetCollisionLayerBit", "GetCollisionLayerValue" }, // CSGShape3D and a lot of others like GridMap + { "GetCollisionMaskBit", "GetCollisionMaskValue" }, // CSGShape3D and a lot of others like GridMap + { "GetColorTypes", "GetColorTypeList" }, // Theme + { "GetCommand", "IsCommandPressed" }, // InputEventWithModifiers + { "GetConstantTypes", "GetConstantTypeList" }, // Theme + { "GetControl", "IsCtrlPressed" }, // InputEventWithModifiers + { "GetCullMaskBit", "GetCullMaskValue" }, // Camera3D + { "GetCursorPosition", "GetCaretColumn" }, // LineEdit + { "GetD", "GetDistance" }, // LineShape2D + { "GetDragDataFw", "_GetDragDataFw" }, // ScriptEditor + { "GetEditorViewport", "GetViewport" }, // EditorPlugin + { "GetEnabledFocusMode", "GetFocusMode" }, // BaseButton + { "GetEndianSwap", "IsBigEndian" }, // File + { "GetErrorString", "GetErrorMessage" }, // JSON + { "GetFocusNeighbour", "GetFocusNeighbor" }, // Control + { "GetFontTypes", "GetFontTypeList" }, // Theme + { "GetFrameColor", "GetColor" }, // ColorRect + { "GetGlobalRateScale", "GetPlaybackSpeedScale" }, // AudioServer + { "GetGravityDistanceScale", "GetGravityPointDistanceScale" }, //Area2D + { "GetGravityVector", "GetGravityDirection" }, //Area2D + { "GetHScrollbar", "GetHScrollBar" }, //ScrollContainer + { "GetHand", "GetTrackerHand" }, // XRPositionalTracker + { "GetHandleName", "_GetHandleName" }, // EditorNode3DGizmo + { "GetHandleValue", "_GetHandleValue" }, // EditorNode3DGizmo + { "GetIconAlign", "GetIconAlignment" }, // Button + { "GetIconTypes", "GetIconTypeList" }, // Theme + { "GetIdleFrames", "GetProcessFrames" }, // Engine + { "GetImportOptions", "_GetImportOptions" }, // EditorImportPlugin + { "GetImportOrder", "_GetImportOrder" }, // EditorImportPlugin + { "GetImporterName", "_GetImporterName" }, // EditorImportPlugin + { "GetInteriorAmbient", "GetAmbientColor" }, // ReflectionProbe + { "GetInteriorAmbientEnergy", "GetAmbientColorEnergy" }, // ReflectionProbe + { "GetIterationsPerSecond", "GetPhysicsTicksPerSecond" }, // Engine + { "GetLastMouseSpeed", "GetLastMouseVelocity" }, // Input + { "GetLayerMaskBit", "GetLayerMaskValue" }, // VisualInstance3D + { "GetLen", "GetLength" }, // File + { "GetMaxAtlasSize", "GetMaxTextureSize" }, // LightmapGI + { "GetMetakey", "IsMetaPressed" }, // InputEventWithModifiers + { "GetMidHeight", "GetHeight" }, // CapsuleMesh + { "GetMotionRemainder", "GetRemainder" }, // PhysicsTestMotionResult2D + { "GetNetworkConnectedPeers", "GetPeers" }, // Multiplayer API + { "GetNetworkMaster", "GetMultiplayerAuthority" }, // Node + { "GetNetworkPeer", "GetMultiplayerPeer" }, // Multiplayer API + { "GetNetworkUniqueId", "GetUniqueId" }, // Multiplayer API + { "GetOk", "GetOkButton" }, // AcceptDialog + { "GetOptionVisibility", "_GetOptionVisibility" }, // EditorImportPlugin + { "GetParameterDefaultValue", "_GetParameterDefaultValue" }, // AnimationNode + { "GetParameterList", "_GetParameterList" }, // AnimationNode + { "GetParentSpatial", "GetParentNode3d" }, // Node3D + { "GetPhysicalScancode", "GetPhysicalKeycode" }, // InputEventKey + { "GetPhysicalScancodeWithModifiers", "GetPhysicalKeycodeWithModifiers" }, // InputEventKey + { "GetPluginIcon", "_GetPluginIcon" }, // EditorPlugin + { "GetPluginName", "_GetPluginName" }, // EditorPlugin + { "GetPresetCount", "_GetPresetCount" }, // EditorImportPlugin + { "GetPresetName", "_GetPresetName" }, // EditorImportPlugin + { "GetRecognizedExtensions", "_GetRecognizedExtensions" }, // ResourceFormatLoader, EditorImportPlugin broke ResourceSaver + { "GetRenderInfo", "GetRenderingInfo" }, // RenderingServer + { "GetRenderTargetsize", "GetRenderTargetSize" }, // XRInterface + { "GetResourceType", "_GetResourceType" }, // ResourceFormatLoader + { "GetResult", "GetData" }, //JSON + { "GetRpcSenderId", "GetRemoteSenderId" }, // Multiplayer API + { "GetSaveExtension", "_GetSaveExtension" }, // EditorImportPlugin + { "GetScancode", "GetKeycode" }, // InputEventKey + { "GetScancodeString", "GetKeycodeString" }, // OS + { "GetScancodeWithModifiers", "GetKeycodeWithModifiers" }, // InputEventKey + { "GetShift", "IsShiftPressed" }, // InputEventWithModifiers + { "GetSizeOverride", "GetSize2dOverride" }, // SubViewport + { "GetSlipsOnSlope", "GetSlideOnSlope" }, // SeparationRayShape2D, SeparationRayShape3D + { "GetSpaceOverrideMode", "GetGravitySpaceOverrideMode" }, // Area2D + { "GetSpeed", "GetVelocity" }, // InputEventMouseMotion + { "GetStyleboxTypes", "GetStyleboxTypeList" }, // Theme + { "GetSurfaceMaterial", "GetSurfaceOverrideMaterial" }, // MeshInstance3D broke ImporterMesh + { "GetSurfaceMaterialCount", "GetSurfaceOverrideMaterialCount" }, // MeshInstance3D + { "GetTabDisabled", "IsTabDisabled" }, // Tab + { "GetTabHidden", "IsTabHidden" }, // Tab + { "GetTextAlign", "GetTextAlignment" }, // Button + { "GetThemeItemTypes", "GetThemeItemTypeList" }, // Theme + { "GetTimerProcessMode", "GetTimerProcessCallback" }, // Timer + { "GetTranslation", "GetPosition" }, // Node3D broke GLTFNode which is used rarely + { "GetUseInBakedLight", "IsBakingNavigation" }, // GridMap + { "GetUsedCellsById", "GetUsedCells" }, // TileMap + { "GetVScrollbar", "GetVScrollBar" }, //ScrollContainer + { "GetVisibleName", "_GetVisibleName" }, // EditorImportPlugin + { "GetWindowLayout", "_GetWindowLayout" }, // EditorPlugin + { "GetWordUnderCursor", "GetWordUnderCaret" }, // TextEdit + { "GetWorld", "GetWorld3d" }, // Viewport, Spatial + { "GetZfar", "GetFar" }, // Camera3D broke GLTFCamera + { "GetZnear", "GetNear" }, // Camera3D broke GLTFCamera + { "GrooveJointCreate", "JointMakeGroove" }, // PhysicsServer2D + { "HandleMenuSelected", "_HandleMenuSelected" }, // EditorResourcePicker + { "HandlesType", "_HandlesType" }, // ResourceFormatLoader + { "HasColor", "HasThemeColor" }, // Control broke Theme + { "HasColorOverride", "HasThemeColorOverride" }, // Control broke Theme + { "HasConstant", "HasThemeConstant" }, // Control + { "HasConstantOverride", "HasThemeConstantOverride" }, // Control + { "HasFilter", "_HasFilter" }, // AnimationNode + { "HasFont", "HasThemeFont" }, // Control broke Theme + { "HasFontOverride", "HasThemeFontOverride" }, // Control + { "HasIcon", "HasThemeIcon" }, // Control broke Theme + { "HasIconOverride", "HasThemeIconOverride" }, // Control + { "HasMainScreen", "_HasMainScreen" }, // EditorPlugin + { "HasNetworkPeer", "HasMultiplayerPeer" }, // Multiplayer API + { "HasStylebox", "HasThemeStylebox" }, // Control broke Theme + { "HasStyleboxOverride", "HasThemeStyleboxOverride" }, // Control + { "HttpEscape", "UriEncode" }, // String + { "HttpUnescape", "UriDecode" }, // String + { "ImportAnimationFromOtherImporter", "_ImportAnimation" }, //EditorSceneFormatImporter + { "ImportSceneFromOtherImporter", "_ImportScene" }, //EditorSceneFormatImporter + { "InstanceSetSurfaceMaterial", "InstanceSetSurfaceOverrideMaterial" }, // RenderingServer + { "IntersectPolygons2d", "IntersectPolygons" }, // Geometry2D + { "IntersectPolylineWithPolygon2d", "IntersectPolylineWithPolygon" }, // Geometry2D + { "IsAParentOf", "IsAncestorOf" }, // Node + { "IsCommitingAction", "IsCommittingAction" }, // UndoRedo + { "IsDoubleclick", "IsDoubleClick" }, // InputEventMouseButton + { "IsHDragEnabled", "IsDragHorizontalEnabled" }, // Camera2D + { "IsHandleHighlighted", "_IsHandleHighlighted" }, // EditorNode3DGizmo, EditorNode3DGizmoPlugin + { "IsNetworkMaster", "IsMultiplayerAuthority" }, // Node + { "IsNetworkServer", "IsServer" }, // Multiplayer API + { "IsNormalmap", "IsNormalMap" }, // NoiseTexture + { "IsRefusingNewNetworkConnections", "IsRefusingNewConnections" }, // Multiplayer API + { "IsRegion", "IsRegionEnabled" }, // Sprite2D + { "IsScancodeUnicode", "IsKeycodeUnicode" }, // OS + { "IsSelectableWhenHidden", "_IsSelectableWhenHidden" }, // EditorNode3DGizmoPlugin + { "IsSetAsToplevel", "IsSetAsTopLevel" }, // CanvasItem + { "IsShortcut", "MatchesEvent" }, // Shortcut + { "IsSizeOverrideStretchEnabled", "IsSize2dOverrideStretchEnabled" }, // SubViewport + { "IsSortEnabled", "IsYSortEnabled" }, // Node2D + { "IsStaticBody", "IsAbleToSleep" }, // PhysicalBone3D - TODO - not sure + { "IsVDragEnabled", "IsDragVerticalEnabled" }, // Camera2D + { "JointCreateConeTwist", "JointMakeConeTwist" }, // PhysicsServer3D + { "JointCreateGeneric6dof", "JointMakeGeneric6dof" }, // PhysicsServer3D + { "JointCreateHinge", "JointMakeHinge" }, // PhysicsServer3D + { "JointCreatePin", "JointMakePin" }, // PhysicsServer3D + { "JointCreateSlider", "JointMakeSlider" }, // PhysicsServer3D + { "LineIntersectsLine2d", "LineIntersectsLine" }, // Geometry2D + { "LoadFromGlobals", "LoadFromProjectSettings" }, // InputMap + { "MakeConvexFromBrothers", "MakeConvexFromSiblings" }, // CollisionShape3D + { "MergePolygons2d", "MergePolygons" }, // Geometry2D + { "MeshSurfaceGetFormat", "MeshSurfaceGetFormatAttributeStride" }, // RenderingServer + { "MeshSurfaceUpdateRegion", "MeshSurfaceUpdateAttributeRegion" }, // RenderingServer + { "MoveToBottom", "MoveAfter" }, // Skeleton3D + { "MoveToTop", "MoveBefore" }, // Skeleton3D + { "MultimeshAllocate", "MultimeshAllocateData" }, // RenderingServer + { "NormalmapToXy", "NormalMapToXy" }, // Image + { "OffsetPolygon2d", "OffsetPolygon" }, // Geometry2D + { "OffsetPolyline2d", "OffsetPolyline" }, // Geometry2D + { "PercentDecode", "UriDecode" }, // String + { "PercentEncode", "UriEncode" }, // String + { "PinJointCreate", "JointMakePin" }, // PhysicsServer2D + { "PopupCenteredMinsize", "PopupCenteredClamped" }, // Window + { "PostImport", "_PostImport" }, // EditorScenePostImport + { "PrintStrayNodes", "PrintOrphanNodes" }, // Node + { "PropertyListChangedNotify", "NotifyPropertyListChanged" }, // Object + { "Recognize", "_Recognize" }, // ResourceFormatLoader + { "RegenNormalmaps", "RegenNormalMaps" }, // ArrayMesh + { "Remove", "RemoveAt" }, // Array, broke Directory + { "RemoveAnimation", "RemoveAnimationLibrary" }, // AnimationPlayer + { "RemoveColorOverride", "RemoveThemeColorOverride" }, // Control + { "RemoveConstantOverride", "RemoveThemeConstantOverride" }, // Control + { "RemoveFontOverride", "RemoveThemeFontOverride" }, // Control + { "RemoveSceneImportPlugin", "RemoveSceneFormatImporterPlugin" }, //EditorPlugin + { "RemoveStyleboxOverride", "RemoveThemeStyleboxOverride" }, // Control + { "RenameAnimation", "RenameAnimationLibrary" }, // AnimationPlayer + { "RenameDependencies", "_RenameDependencies" }, // ResourceFormatLoader + { "SaveExternalData", "_SaveExternalData" }, // EditorPlugin + { "SegmentIntersectsSegment2d", "SegmentIntersectsSegment" }, // Geometry2D + { "SetAdjustmentEnable", "SetAdjustmentEnabled" }, // Environment + { "SetAlt", "SetAltPressed" }, // InputEventWithModifiers + { "SetAnchorAndMargin", "SetAnchorAndOffset" }, // Control + { "SetAnchorsAndMarginsPreset", "SetAnchorsAndOffsetsPreset" }, // Control + { "SetAnimationProcessMode", "SetProcessCallback" }, // AnimationPlayer + { "SetAsBulkArray", "SetBuffer" }, // MultiMesh + { "SetAsNormalmap", "SetAsNormalMap" }, // NoiseTexture + { "SetAsToplevel", "SetAsTopLevel" }, // CanvasItem + { "SetAudioBus", "SetAudioBusName" }, // Area3D + { "SetAutowrap", "SetAutowrapMode" }, // Label broke AcceptDialog + { "SetCastTo", "SetTargetPosition" }, // RayCast2D, RayCast3D + { "SetCollisionLayerBit", "SetCollisionLayerValue" }, // CSGShape3D and a lot of others like GridMap + { "SetCollisionMaskBit", "SetCollisionMaskValue" }, // CSGShape3D and a lot of others like GridMap + { "SetColumnMinWidth", "SetColumnCustomMinimumWidth" }, // Tree + { "SetCommand", "SetCommandPressed" }, // InputEventWithModifiers + { "SetControl", "SetCtrlPressed" }, // InputEventWithModifiers + { "SetCreateOptions", "_SetCreateOptions" }, // EditorResourcePicker + { "SetCullMaskBit", "SetCullMaskValue" }, // Camera3D + { "SetCursorPosition", "SetCaretColumn" }, // LineEdit + { "SetD", "SetDistance" }, // WorldMarginShape2D + { "SetDoubleclick", "SetDoubleClick" }, // InputEventMouseButton + { "SetEnabledFocusMode", "SetFocusMode" }, // BaseButton + { "SetEndianSwap", "SetBigEndian" }, // File + { "SetExpandToTextLength", "SetExpandToTextLengthEnabled" }, // LineEdit + { "SetFocusNeighbour", "SetFocusNeighbor" }, // Control + { "SetFrameColor", "SetColor" }, // ColorRect + { "SetGlobalRateScale", "SetPlaybackSpeedScale" }, // AudioServer + { "SetGravityDistanceScale", "SetGravityPointDistanceScale" }, // Area2D + { "SetGravityVector", "SetGravityDirection" }, // Area2D + { "SetHDragEnabled", "SetDragHorizontalEnabled" }, // Camera2D + { "SetIconAlign", "SetIconAlignment" }, // Button + { "SetInteriorAmbient", "SetAmbientColor" }, // ReflectionProbe + { "SetInteriorAmbientEnergy", "SetAmbientColorEnergy" }, // ReflectionProbe + { "SetIsInitialized", "_IsInitialized" }, // XRInterface + { "SetIsPrimary", "SetPrimary" }, // XRInterface + { "SetIterationsPerSecond", "SetPhysicsTicksPerSecond" }, // Engine + { "SetLayerMaskBit", "SetLayerMaskValue" }, // VisualInstance3D + { "SetMarginsPreset", "SetOffsetsPreset" }, // Control + { "SetMaxAtlasSize", "SetMaxTextureSize" }, // LightmapGI + { "SetMetakey", "SetMetaPressed" }, // InputEventWithModifiers + { "SetMidHeight", "SetHeight" }, // CapsuleMesh + { "SetNetworkMaster", "SetMultiplayerAuthority" }, // Node + { "SetNetworkPeer", "SetMultiplayerPeer" }, // Multiplayer API + { "SetPhysicalScancode", "SetPhysicalKeycode" }, // InputEventKey + { "SetRefuseNewNetworkConnections", "SetRefuseNewConnections" }, // Multiplayer API + { "SetRegion", "SetRegionEnabled" }, // Sprite2D, Sprite broke AtlasTexture + { "SetRegionFilterClip", "SetRegionFilterClipEnabled" }, // Sprite2D + { "SetRotate", "SetRotates" }, // PathFollow2D + { "SetScancode", "SetKeycode" }, // InputEventKey + { "SetShift", "SetShiftPressed" }, // InputEventWithModifiers + { "SetSizeOverride", "SetSize2dOverride" }, // SubViewport broke ImageTexture + { "SetSizeOverrideStretch", "SetSize2dOverrideStretch" }, // SubViewport + { "SetSlipsOnSlope", "SetSlideOnSlope" }, // SeparationRayShape2D, SeparationRayShape3D + { "SetSortEnabled", "SetYSortEnabled" }, // Node2D + { "SetSpaceOverrideMode", "SetGravitySpaceOverrideMode" }, // Area2D + { "SetSpeed", "SetVelocity" }, // InputEventMouseMotion + { "SetSsaoEdgeSharpness", "SetSsaoSharpness" }, // Environment + { "SetSurfaceMaterial", "SetSurfaceOverrideMaterial" }, // MeshInstance3D broke ImporterMesh + { "SetTabAlign", "SetTabAlignment" }, //TabContainer + { "SetTangent", "SurfaceSetTangent" }, // ImmediateGeometry broke SurfaceTool + { "SetTextAlign", "SetTextAlignment" }, // Button + { "SetTimerProcessMode", "SetTimerProcessCallback" }, // Timer + { "SetTonemapAutoExposure", "SetTonemapAutoExposureEnabled" }, // Environment + { "SetTranslation", "SetPosition" }, // Node3D - this broke GLTFNode which is used rarely + { "SetUv2", "SurfaceSetUv2" }, // ImmediateMesh broke Surffacetool + { "SetVDragEnabled", "SetDragVerticalEnabled" }, // Camera2D + { "SetValign", "SetVerticalAlignment" }, // Label + { "SetWindowLayout", "_SetWindowLayout" }, // EditorPlugin + { "SetZfar", "SetFar" }, // Camera3D broke GLTFCamera + { "SetZnear", "SetNear" }, // Camera3D broke GLTFCamera + { "ShortcutMatch", "IsMatch" }, // InputEvent + { "SkeletonAllocate", "SkeletonAllocateData" }, // RenderingServer + { "SurfaceUpdateRegion", "SurfaceUpdateAttributeRegion" }, // ArrayMesh + { "TargetingMethod", "TweenMethod" }, // Tween + { "TargetingProperty", "TweenProperty" }, // Tween + { "TrackRemoveKeyAtPosition", "TrackRemoveKeyAtTime" }, // Animation + { "TriangulateDelaunay2d", "TriangulateDelaunay" }, // Geometry2D + { "UnbindChildNodeFromBone", "RemoveBoneChild" }, // Skeleton3D + { "Unselect", "Deselect" }, // ItemList + { "UnselectAll", "DeselectAll" }, // ItemList + { "UpdateConfigurationWarning", "UpdateConfigurationWarnings" }, // Node + { "UpdateGizmo", "UpdateGizmos" }, // Node3D + { "ViewportSetUseArvr", "ViewportSetUseXr" }, // RenderingServer + { "WarpMousePosition", "WarpMouse" }, // Input + + // Builtin types + // { "Empty", "IsEmpty" }, // Array - Used as custom rule // Be careful, this will be used everywhere + { "Clamped", "Clamp" }, // Vector2 // Be careful, this will be used everywhere + { "GetRotationQuat", "GetRotationQuaternion" }, // Basis + { "GrowMargin", "GrowSide" }, // Rect2 + { "Invert", "Reverse" }, // Array - TODO check // Be careful, this will be used everywhere + { "IsAbsPath", "IsAbsolutePath" }, // String + { "IsValidInteger", "IsValidInt" }, // String + { "LinearInterpolate", "Lerp" }, // Color + { "ToAscii", "ToAsciiBuffer" }, // String + { "ToUtf8", "ToUtf8Buffer" }, // String + { "ToWchar", "ToUtf32Buffer" }, // String // TODO - utf32 or utf16? + + // Globals + { "RandRange", "RandfRange" }, + { "Stepify", "Snapped" }, + + { nullptr, nullptr }, +}; + +// Some needs to be disabled, because users can use this names as variables +static const char *gdscript_properties_renames[][2] = { + // // { "d", "distance" }, //WorldMarginShape2D - TODO, looks that polish letters Ä… Ä™ are treaten as space, not as letter, so `bÄ™dÄ…` are renamed to `bÄ™distanceÄ…` + // // {"alt","alt_pressed"}, // This may broke a lot of comments and user variables + // // {"command","command_pressed"},// This may broke a lot of comments and user variables + // // {"control","ctrl_pressed"},// This may broke a lot of comments and user variables + // // {"extends","size"}, // BoxShape3D, LightmapGI broke ReflectionProbe + // // {"meta","meta_pressed"},// This may broke a lot of comments and user variables + // // {"pause_mode","process_mode"}, // Node - Cyclic rename, look for others + // // {"rotate","rotates"}, // PathFollow2D - probably function exists with same name + // // {"shift","shift_pressed"},// This may broke a lot of comments and user variables + // { "autowrap", "autowrap_mode" }, // Label + // { "cast_to", "target_position" }, // RayCast2D, RayCast3D + // { "doubleclick", "double_click" }, // InputEventMouseButton + // { "group", "button_group" }, // BaseButton + // { "process_mode", "process_callback" }, // AnimationTree, Camera2D + // { "scancode", "keycode" }, // InputEventKey + // { "toplevel", "top_level" }, // Node + // { "window_title", "title" }, // Window + // { "wrap_enabled", "wrap_mode" }, // TextEdit + // { "zfar", "far" }, // Camera3D + // { "znear", "near" }, // Camera3D + { "as_normalmap", "as_normal_map" }, // NoiseTexture + { "bbcode_text", "text" }, // RichTextLabel + { "caret_moving_by_right_click", "caret_move_on_right_click" }, // TextEdit + { "caret_position", "caret_column" }, // LineEdit + { "check_vadjust", "check_v_adjust" }, // Theme + { "close_h_ofs", "close_h_offset" }, // Theme + { "close_v_ofs", "close_v_offset" }, // Theme + { "commentfocus", "comment_focus" }, // Theme + { "drag_margin_bottom", "drag_bottom_margin" }, // Camera2D + { "drag_margin_h_enabled", "drag_horizontal_enabled" }, // Camera2D + { "drag_margin_left", "drag_left_margin" }, // Camera2D + { "drag_margin_right", "drag_right_margin" }, // Camera2D + { "drag_margin_top", "drag_top_margin" }, // Camera2D + { "drag_margin_v_enabled", "drag_vertical_enabled" }, // Camera2D + { "enabled_focus_mode", "focus_mode" }, // BaseButton - Removed + { "extra_spacing_bottom", "spacing_bottom" }, // Font + { "extra_spacing_top", "spacing_top" }, // Font + { "focus_neighbour_bottom", "focus_neighbor_bottom" }, // Control + { "focus_neighbour_left", "focus_neighbor_left" }, // Control + { "focus_neighbour_right", "focus_neighbor_right" }, // Control + { "focus_neighbour_top", "focus_neighbor_top" }, // Control + { "global_rate_scale", "playback_speed_scale" }, // AudioServer + { "gravity_distance_scale", "gravity_point_distance_scale" }, // Area2D + { "gravity_vec", "gravity_direction" }, // Area2D + { "hseparation", "h_separation" }, // Theme + { "iterations_per_second", "physics_ticks_per_second" }, // Engine + { "margin_bottom", "offset_bottom" }, // Control broke NinePatchRect, StyleBox + { "margin_left", "offset_left" }, // Control broke NinePatchRect, StyleBox + { "margin_right", "offset_right" }, // Control broke NinePatchRect, StyleBox + { "margin_top", "offset_top" }, // Control broke NinePatchRect, StyleBox + { "mid_height", "height" }, // CapsuleMesh + { "offset_h", "drag_horizontal_offset" }, // Camera2D + { "offset_v", "drag_vertical_offset" }, // Camera2D + { "ofs", "offset" }, // Theme + { "out_of_range_mode", "max_polyphony" }, // AudioStreamPlayer3D + { "pause_mode", "process_mode" }, // Node + { "physical_scancode", "physical_keycode" }, // InputEventKey + { "popup_exclusive", "exclusive" }, // Window + { "refuse_new_network_connections", "refuse_new_connections" }, // MultiplayerAPI + { "region_filter_clip", "region_filter_clip_enabled" }, // Sprite2D + { "selectedframe", "selected_frame" }, // Theme + { "size_override_stretch", "size_2d_override_stretch" }, // SubViewport + { "slips_on_slope", "slide_on_slope" }, // SeparationRayShape2D + { "ss_reflections_depth_tolerance", "ssr_depth_tolerance" }, // Environment + { "ss_reflections_enabled", "ssr_enabled" }, // Environment + { "ss_reflections_fade_in", "ssr_fade_in" }, // Environment + { "ss_reflections_fade_out", "ssr_fade_out" }, // Environment + { "ss_reflections_max_steps", "ssr_max_steps" }, // Environment + { "state_machine_selectedframe", "state_machine_selected_frame" }, // Theme + { "syntax_highlighting", "syntax_highlighter" }, // TextEdit + { "tab_align", "tab_alignment" }, // TabContainer + { "table_hseparation", "table_h_separation" }, // Theme + { "table_vseparation", "table_v_separation" }, // Theme + { "translation", "position" }, // Node3D - broke GLTFNode + { "vseparation", "v_separation" }, // Theme + + { nullptr, nullptr }, +}; + +// Some needs to be disabled, because users can use this names as variables +static const char *csharp_properties_renames[][2] = { + // // { "D", "Distance" }, //WorldMarginShape2D - TODO, looks that polish letters Ä… Ä™ are treaten as space, not as letter, so `bÄ™dÄ…` are renamed to `bÄ™distanceÄ…` + // // {"Alt","AltPressed"}, // This may broke a lot of comments and user variables + // // {"Command","CommandPressed"},// This may broke a lot of comments and user variables + // // {"Control","CtrlPressed"},// This may broke a lot of comments and user variables + // // {"Extends","Size"}, // BoxShape3D, LightmapGI broke ReflectionProbe + // // {"Meta","MetaPressed"},// This may broke a lot of comments and user variables + // // {"PauseMode","ProcessMode"}, // Node - Cyclic rename, look for others + // // {"Rotate","Rotates"}, // PathFollow2D - probably function exists with same name + // // {"Shift","ShiftPressed"},// This may broke a lot of comments and user variables + // { "Autowrap", "AutowrapMode" }, // Label + // { "CastTo", "TargetPosition" }, // RayCast2D, RayCast3D + // { "Doubleclick", "DoubleClick" }, // InputEventMouseButton + // { "Group", "ButtonGroup" }, // BaseButton + // { "ProcessMode", "ProcessCallback" }, // AnimationTree, Camera2D + // { "Scancode", "Keycode" }, // InputEventKey + // { "Toplevel", "TopLevel" }, // Node + // { "WindowTitle", "Title" }, // Window + // { "WrapEnabled", "WrapMode" }, // TextEdit + // { "Zfar", "Far" }, // Camera3D + // { "Znear", "Near" }, // Camera3D + { "AsNormalmap", "AsNormalMap" }, // NoiseTexture + { "BbcodeText", "Text" }, // RichTextLabel + { "CaretMovingByRightClick", "CaretMoveOnRightClick" }, // TextEdit + { "CaretPosition", "CaretColumn" }, // LineEdit + { "CheckVadjust", "CheckVAdjust" }, // Theme + { "CloseHOfs", "CloseHOffset" }, // Theme + { "CloseVOfs", "CloseVOffset" }, // Theme + { "Commentfocus", "CommentFocus" }, // Theme + { "DragMarginBottom", "DragBottomMargin" }, // Camera2D + { "DragMarginHEnabled", "DragHorizontalEnabled" }, // Camera2D + { "DragMarginLeft", "DragLeftMargin" }, // Camera2D + { "DragMarginRight", "DragRightMargin" }, // Camera2D + { "DragMarginTop", "DragTopMargin" }, // Camera2D + { "DragMarginVEnabled", "DragVerticalEnabled" }, // Camera2D + { "EnabledFocusMode", "FocusMode" }, // BaseButton - Removed + { "ExtraSpacingBottom", "SpacingBottom" }, // Font + { "ExtraSpacingTop", "SpacingTop" }, // Font + { "FocusNeighbourBottom", "FocusNeighborBottom" }, // Control + { "FocusNeighbourLeft", "FocusNeighborLeft" }, // Control + { "FocusNeighbourRight", "FocusNeighborRight" }, // Control + { "FocusNeighbourTop", "FocusNeighborTop" }, // Control + { "GlobalRateScale", "PlaybackSpeedScale" }, // AudioServer + { "GravityDistanceScale", "GravityPointDistanceScale" }, // Area2D + { "GravityVec", "GravityDirection" }, // Area2D + { "Hseparation", "HSeparation" }, // Theme + { "IterationsPerSecond", "PhysicsTicksPerSecond" }, // Engine + { "MarginBottom", "OffsetBottom" }, // Control broke NinePatchRect, StyleBox + { "MarginLeft", "OffsetLeft" }, // Control broke NinePatchRect, StyleBox + { "MarginRight", "OffsetRight" }, // Control broke NinePatchRect, StyleBox + { "MarginTop", "OffsetTop" }, // Control broke NinePatchRect, StyleBox + { "MidHeight", "Height" }, // CapsuleMesh + { "OffsetH", "DragHorizontalOffset" }, // Camera2D + { "OffsetV", "DragVerticalOffset" }, // Camera2D + { "Ofs", "Offset" }, // Theme + { "OutOfRangeMode", "MaxPolyphony" }, // AudioStreamPlayer3D + { "PauseMode", "ProcessMode" }, // Node + { "PhysicalScancode", "PhysicalKeycode" }, // InputEventKey + { "PopupExclusive", "Exclusive" }, // Window + { "RefuseNewNetworkConnections", "RefuseNewConnections" }, // MultiplayerAPI + { "RegionFilterClip", "RegionFilterClipEnabled" }, // Sprite2D + { "Selectedframe", "SelectedFrame" }, // Theme + { "SizeOverrideStretch", "Size2dOverrideStretch" }, // SubViewport + { "SlipsOnSlope", "SlideOnSlope" }, // SeparationRayShape2D + { "SsReflectionsDepthTolerance", "SsrDepthTolerance" }, // Environment + { "SsReflectionsEnabled", "SsrEnabled" }, // Environment + { "SsReflectionsFadeIn", "SsrFadeIn" }, // Environment + { "SsReflectionsFadeOut", "SsrFadeOut" }, // Environment + { "SsReflectionsMaxSteps", "SsrMaxSteps" }, // Environment + { "StateMachineSelectedframe", "StateMachineSelectedFrame" }, // Theme + { "SyntaxHighlighting", "SyntaxHighlighter" }, // TextEdit + { "TabAlign", "TabAlignment" }, // TabContainer + { "TableHseparation", "TableHSeparation" }, // Theme + { "TableVseparation", "TableVSeparation" }, // Theme + { "Translation", "Position" }, // Node3D - broke GLTFNode + { "Vseparation", "VSeparation" }, // Theme + + { nullptr, nullptr }, +}; + +static const char *gdscript_signals_renames[][2] = { + // {"instantiate","instance"}, // FileSystemDock + // { "hide", "hidden" }, // CanvasItem - function with same name exists + // { "tween_all_completed","loop_finished"}, // Tween - TODO, not sure + // {"changed","settings_changed"}, // EditorSettings + { "about_to_show", "about_to_popup" }, // Popup + { "button_release", "button_released" }, // XRController3D + { "network_peer_connected", "peer_connected" }, // MultiplayerAPI + { "network_peer_disconnected", "peer_disconnected" }, // MultiplayerAPI + { "network_peer_packet", "peer_packet" }, // MultiplayerAPI + { "node_unselected", "node_deselected" }, // GraphEdit + { "offset_changed", "position_offset_changed" }, // GraphNode + { "settings_changed", "changed" }, // TileMap broke EditorSettings + { "skeleton_updated", "pose_updated" }, // + { "tab_close", "tab_closed" }, // TextEdit + { "tab_hover", "tab_hovered" }, // TextEdit + { "text_entered", "text_submitted" }, // LineEdit + { "tween_completed", "finished" }, // Tween + { "tween_step", "step_finished" }, // Tween + + { nullptr, nullptr }, +}; + +static const char *csharp_signals_renames[][2] = { + // {"Instantiate","Instance"}, // FileSystemDock + // { "Hide", "Hidden" }, // CanvasItem - function with same name exists + // { "TweenAllCompleted","LoopFinished"}, // Tween - TODO, not sure + // {"Changed","SettingsChanged"}, // EditorSettings + { "AboutToShow", "AboutToPopup" }, // Popup + { "ButtonRelease", "ButtonReleased" }, // XRController3D + { "NetworkPeerConnected", "PeerConnected" }, // MultiplayerAPI + { "NetworkPeerDisconnected", "PeerDisconnected" }, // MultiplayerAPI + { "NetworkPeerPacket", "PeerPacket" }, // MultiplayerAPI + { "NodeUnselected", "NodeDeselected" }, // GraphEdit + { "OffsetChanged", "PositionOffsetChanged" }, // GraphNode + { "SettingsChanged", "Changed" }, // TileMap broke EditorSettings + { "SkeletonUpdated", "PoseUpdated" }, // + { "TabClose", "TabClosed" }, // TextEdit + { "TabHover", "TabHovered" }, // TextEdit + { "TextEntered", "TextSubmitted" }, // LineEdit + { "TweenCompleted", "Finished" }, // Tween + { "TweenStep", "StepFinished" }, // Tween + + { nullptr, nullptr }, + +}; + +static const char *project_settings_renames[][2] = { + { "audio/channel_disable_threshold_db", "audio/buses/channel_disable_threshold_db" }, + { "audio/channel_disable_time", "audio/buses/channel_disable_time" }, + { "audio/default_bus_layout", "audio/buses/default_bus_layout" }, + { "audio/driver", "audio/driver/driver" }, + { "audio/enable_audio_input", "audio/driver/enable_input" }, + { "audio/mix_rate", "audio/driver/mix_rate" }, + { "audio/output_latency", "audio/driver/output_latency" }, + { "audio/output_latency.web", "audio/driver/output_latency.web" }, + { "audio/video_delay_compensation_ms", "audio/video/video_delay_compensation_ms" }, + { "display/window/vsync/use_vsync", "display/window/vsync/vsync_mode" }, + { "editor/main_run_args", "editor/run/main_run_args" }, + { "gui/common/swap_ok_cancel", "gui/common/swap_cancel_ok" }, + { "network/limits/debugger_stdout/max_chars_per_second", "network/limits/debugger/max_chars_per_second" }, + { "network/limits/debugger_stdout/max_errors_per_second", "network/limits/debugger/max_errors_per_second" }, + { "network/limits/debugger_stdout/max_messages_per_frame", "network/limits/debugger/max_queued_messages" }, + { "network/limits/debugger_stdout/max_warnings_per_second", "network/limits/debugger/max_warnings_per_second" }, + { "network/ssl/certificates", "network/ssl/certificate_bundle_override" }, + { "physics/2d/thread_model", "physics/2d/run_on_thread" }, // TODO not sure + { "rendering/environment/default_clear_color", "rendering/environment/defaults/default_clear_color" }, + { "rendering/environment/default_environment", "rendering/environment/defaults/default_environment" }, + { "rendering/quality/depth_prepass/disable_for_vendors", "rendering/driver/depth_prepass/disable_for_vendors" }, + { "rendering/quality/depth_prepass/enable", "rendering/driver/depth_prepass/enable" }, + { "rendering/quality/shading/force_blinn_over_ggx", "rendering/shading/overrides/force_blinn_over_ggx" }, + { "rendering/quality/shading/force_blinn_over_ggx.mobile", "rendering/shading/overrides/force_blinn_over_ggx.mobile" }, + { "rendering/quality/shading/force_lambert_over_burley", "rendering/shading/overrides/force_lambert_over_burley" }, + { "rendering/quality/shading/force_lambert_over_burley.mobile", "rendering/shading/overrides/force_lambert_over_burley.mobile" }, + { "rendering/quality/shading/force_vertex_shading", "rendering/shading/overrides/force_vertex_shading" }, + { "rendering/quality/shading/force_vertex_shading.mobile", "rendering/shading/overrides/force_vertex_shading.mobile" }, + { "rendering/quality/shadow_atlas/quadrant_0_subdiv", "rendering/shadows/shadow_atlas/quadrant_0_subdiv" }, + { "rendering/quality/shadow_atlas/quadrant_1_subdiv", "rendering/shadows/shadow_atlas/quadrant_1_subdiv" }, + { "rendering/quality/shadow_atlas/quadrant_2_subdiv", "rendering/shadows/shadow_atlas/quadrant_2_subdiv" }, + { "rendering/quality/shadow_atlas/quadrant_3_subdiv", "rendering/shadows/shadow_atlas/quadrant_3_subdiv" }, + { "rendering/quality/shadow_atlas/size", "rendering/shadows/shadow_atlas/size" }, + { "rendering/quality/shadow_atlas/size.mobile", "rendering/shadows/shadow_atlas/size.mobile" }, + { "rendering/vram_compression/import_bptc", "rendering/textures/vram_compression/import_bptc" }, + { "rendering/vram_compression/import_etc", "rendering/textures/vram_compression/import_etc" }, + { "rendering/vram_compression/import_etc2", "rendering/textures/vram_compression/import_etc2" }, + { "rendering/vram_compression/import_pvrtc", "rendering/textures/vram_compression/import_pvrtc" }, + { "rendering/vram_compression/import_s3tc", "rendering/textures/vram_compression/import_s3tc" }, + + { nullptr, nullptr }, +}; + +static const char *builtin_types_renames[][2] = { + { "PoolByteArray", "PackedByteArray" }, + { "PoolColorArray", "PackedColorArray" }, + { "PoolIntArray", "PackedInt32Array" }, + { "PoolRealArray", "PackedFloat32Array" }, + { "PoolStringArray", "PackedStringArray" }, + { "PoolVector2Array", "PackedVector2Array" }, + { "PoolVector3Array", "PackedVector3Array" }, + { "Quat", "Quaternion" }, + { "Transform", "Transform3D" }, + + { nullptr, nullptr }, +}; + +static const char *shaders_renames[][2] = { + { "ALPHA_SCISSOR", "ALPHA_SCISSOR_THRESHOLD" }, + { "NORMALMAP", "NORMAL_MAP" }, + { "NORMALMAP_DEPTH", "NORMAL_MAP_DEPTH" }, + { "TRANSMISSION", "SSS_TRANSMITTANCE_COLOR" }, + { nullptr, nullptr }, +}; + +static const char *class_renames[][2] = { + // { "BulletPhysicsDirectBodyState", "BulletPhysicsDirectBodyState3D" }, // Class is not visible in ClassDB + // { "BulletPhysicsServer", "BulletPhysicsServer3D" }, // Class is not visible in ClassDB + // { "GDScriptFunctionState", "Node3D" }, // TODO - not sure to which should be changed + // { "GDScriptNativeClass", "Node3D" }, // TODO - not sure to which should be changed + // { "InputDefault",""}, // TODO ? + // { "Physics2DDirectBodyStateSW", "GodotPhysicsDirectBodyState2D" }, // Class is not visible in ClassDB + // { "Physics2DShapeQueryResult", "PhysicsShapeQueryResult2D" }, // Class is not visible in ClassDB + // { "PhysicsShapeQueryResult", "PhysicsShapeQueryResult3D" }, // Class is not visible in ClassDB + // { "NativeScript","NativeExtension"}, ?? + { "AStar", "AStar3D" }, + { "ARVRAnchor", "XRAnchor3D" }, + { "ARVRCamera", "XRCamera3D" }, + { "ARVRController", "XRController3D" }, + { "ARVRInterface", "XRInterface" }, + { "ARVRInterfaceGDNative", "Node3D" }, + { "ARVROrigin", "XROrigin3D" }, + { "ARVRPositionalTracker", "XRPositionalTracker" }, + { "ARVRServer", "XRServer" }, + { "AnimatedSprite", "AnimatedSprite2D" }, + { "AnimationTreePlayer", "AnimationTree" }, + { "Area", "Area3D" }, // Be careful, this will be used everywhere + { "AudioStreamRandomPitch", "AudioStreamRandomizer" }, + { "BakedLightmap", "LightmapGI" }, + { "BakedLightmapData", "LightmapGIData" }, + { "BitmapFont", "Font" }, + { "BoneAttachment", "BoneAttachment3D" }, + { "BoxShape", "BoxShape3D" }, + { "CPUParticles", "CPUParticles3D" }, + { "CSGBox", "CSGBox3D" }, + { "CSGCombiner", "CSGCombiner3D" }, + { "CSGCylinder", "CSGCylinder3D" }, + { "CSGMesh", "CSGMesh3D" }, + { "CSGPolygon", "CSGPolygon3D" }, + { "CSGPrimitive", "CSGPrimitive3D" }, + { "CSGShape", "CSGShape3D" }, + { "CSGSphere", "CSGSphere3D" }, + { "CSGTorus", "CSGTorus3D" }, + { "Camera", "Camera3D" }, // Be careful, this will be used everywhere + { "CapsuleShape", "CapsuleShape3D" }, + { "ClippedCamera", "Camera3D" }, + { "CollisionObject", "CollisionObject3D" }, + { "CollisionPolygon", "CollisionPolygon3D" }, + { "CollisionShape", "CollisionShape3D" }, + { "ConcavePolygonShape", "ConcavePolygonShape3D" }, + { "ConeTwistJoint", "ConeTwistJoint3D" }, + { "ConvexPolygonShape", "ConvexPolygonShape3D" }, + { "CubeMap", "Cubemap" }, + { "CubeMesh", "BoxMesh" }, + { "CylinderShape", "CylinderShape3D" }, + { "DirectionalLight", "DirectionalLight3D" }, + { "DynamicFont", "Font" }, + { "DynamicFontData", "FontData" }, + { "EditorNavigationMeshGenerator", "NavigationMeshGenerator" }, + { "EditorSceneImporter", "EditorSceneFormatImporter" }, + { "EditorSceneImporterFBX", "EditorSceneFormatImporterFBX" }, + { "EditorSceneImporterGLTF", "EditorSceneFormatImporterGLTF" }, + { "EditorSpatialGizmo", "EditorNode3DGizmo" }, + { "EditorSpatialGizmoPlugin", "EditorNode3DGizmoPlugin" }, + { "ExternalTexture", "ImageTexture" }, + { "FuncRef", "Callable" }, + { "GIProbe", "VoxelGI" }, + { "GIProbeData", "VoxelGIData" }, + { "Generic6DOFJoint", "Generic6DOFJoint3D" }, + { "Geometry", "Geometry2D" }, // Geometry class is split between Geometry2D and Geometry3D so we need to choose one + { "GeometryInstance", "GeometryInstance3D" }, + { "GradientTexture", "GradientTexture2D" }, + { "HeightMapShape", "HeightMapShape3D" }, + { "HingeJoint", "HingeJoint3D" }, + { "IP_Unix", "IPUnix" }, + { "ImmediateGeometry", "ImmediateMesh" }, + { "ImmediateGeometry3D", "ImmediateMesh" }, + { "InterpolatedCamera", "Camera3D" }, + { "InterpolatedCamera3D", "Camera3D" }, + { "JSONParseResult", "JSON" }, + { "Joint", "Joint3D" }, + { "KinematicBody", "CharacterBody3D" }, + { "KinematicBody2D", "CharacterBody2D" }, + { "KinematicCollision", "KinematicCollision3D" }, + { "LargeTexture", "ImageTexture" }, + { "Light", "Light3D" }, + { "Light2D", "PointLight2D" }, + { "LineShape2D", "WorldBoundaryShape2D" }, + { "Listener", "AudioListener3D" }, + { "Listener2D", "AudioListener2D" }, + { "MeshInstance", "MeshInstance3D" }, + { "MultiMeshInstance", "MultiMeshInstance3D" }, + { "MultiplayerPeerGDNative", "MultiplayerPeerExtension" }, + { "Navigation", "Node3D" }, + { "Navigation2D", "Node2D" }, + { "Navigation2DServer", "NavigationServer2D" }, + { "Navigation3D", "Node3D" }, + { "NavigationAgent", "NavigationAgent3D" }, + { "NavigationMeshInstance", "NavigationRegion3D" }, + { "NavigationObstacle", "NavigationObstacle3D" }, + { "NavigationPolygonInstance", "NavigationRegion2D" }, + { "NavigationRegion", "NavigationRegion3D" }, + { "NavigationServer", "NavigationServer3D" }, + { "NetworkedMultiplayerENet", "ENetMultiplayerPeer" }, + { "NetworkedMultiplayerPeer", "MultiplayerPeer" }, + { "Occluder", "OccluderInstance3D" }, + { "OmniLight", "OmniLight3D" }, + { "PHashTranslation", "OptimizedTranslation" }, + { "PacketPeerGDNative", "PacketPeerExtension" }, + { "PanoramaSky", "Sky" }, + { "Particles", "GPUParticles3D" }, // Be careful, this will be used everywhere + { "Particles2D", "GPUParticles2D" }, + { "Path", "Path3D" }, // Be careful, this will be used everywhere + { "PathFollow", "PathFollow3D" }, + { "PhysicalBone", "PhysicalBone3D" }, + { "Physics2DDirectBodyState", "PhysicsDirectBodyState2D" }, + { "Physics2DDirectSpaceState", "PhysicsDirectSpaceState2D" }, + { "Physics2DServer", "PhysicsServer2D" }, + { "Physics2DServerSW", "GodotPhysicsServer2D" }, + { "Physics2DShapeQueryParameters", "PhysicsShapeQueryParameters2D" }, + { "Physics2DTestMotionResult", "PhysicsTestMotionResult2D" }, + { "PhysicsBody", "PhysicsBody3D" }, + { "PhysicsDirectBodyState", "PhysicsDirectBodyState3D" }, + { "PhysicsDirectSpaceState", "PhysicsDirectSpaceState3D" }, + { "PhysicsServer", "PhysicsServer3D" }, + { "PhysicsShapeQueryParameters", "PhysicsShapeQueryParameters3D" }, + { "PhysicsTestMotionResult", "PhysicsTestMotionResult3D" }, + { "PinJoint", "PinJoint3D" }, + { "PlaneShape", "WorldBoundaryShape3D" }, + { "PopupDialog", "Popup" }, + { "ProceduralSky", "Sky" }, + { "RayCast", "RayCast3D" }, + { "RayShape", "SeparationRayShape3D" }, + { "RayShape2D", "SeparationRayShape2D" }, + { "Reference", "RefCounted" }, // Be careful, this will be used everywhere + { "RemoteTransform", "RemoteTransform3D" }, + { "ResourceInteractiveLoader", "ResourceLoader" }, + { "RigidBody", "RigidDynamicBody3D" }, + { "RigidBody2D", "RigidDynamicBody2D" }, + { "Shape", "Shape3D" }, // Be careful, this will be used everywhere + { "ShortCut", "Shortcut" }, + { "Skeleton", "Skeleton3D" }, + { "SkeletonIK", "SkeletonIK3D" }, + { "SliderJoint", "SliderJoint3D" }, + { "SoftBody", "SoftDynamicBody3D" }, + { "Spatial", "Node3D" }, + { "SpatialGizmo", "Node3DGizmo" }, + { "SpatialMaterial", "StandardMaterial3D" }, + { "SpatialVelocityTracker", "VelocityTracker3D" }, + { "SphereShape", "SphereShape3D" }, + { "SpotLight", "SpotLight3D" }, + { "SpringArm", "SpringArm3D" }, + { "Sprite", "Sprite2D" }, + { "StaticBody", "StaticBody3D" }, + { "StreamCubemap", "CompressedCubemap" }, + { "StreamCubemapArray", "CompressedCubemapArray" }, + { "StreamPeerGDNative", "StreamPeerExtension" }, + { "StreamTexture", "CompressedTexture2D" }, + { "StreamTexture2D", "CompressedTexture2D" }, + { "StreamTexture2DArray", "CompressedTexture2DArray" }, + { "StreamTextureLayered", "CompressedTextureLayered" }, + { "TCP_Server", "TCPServer" }, + { "Tabs", "TabBar" }, // Be careful, this will be used everywhere + { "TextFile", "Node3D" }, + { "Texture", "Texture2D" }, // May broke TextureRect + { "TextureArray", "Texture2DArray" }, + { "TextureProgress", "TextureProgressBar" }, + { "ToolButton", "Button" }, + { "VehicleBody", "VehicleBody3D" }, + { "VehicleWheel", "VehicleWheel3D" }, + { "VideoPlayer", "VideoStreamPlayer" }, + { "Viewport", "SubViewport" }, + { "ViewportContainer", "SubViewportContainer" }, + { "VisibilityEnabler", "VisibleOnScreenEnabler3D" }, + { "VisibilityEnabler2D", "VisibleOnScreenEnabler2D" }, + { "VisibilityNotifier", "VisibleOnScreenNotifier3D" }, + { "VisibilityNotifier2D", "VisibleOnScreenNotifier2D" }, + { "VisibilityNotifier3D", "VisibleOnScreenNotifier3D" }, + { "VisualInstance", "VisualInstance3D" }, + { "VisualServer", "RenderingServer" }, + { "VisualShaderNodeCubeMap", "VisualShaderNodeCubemap" }, + { "VisualShaderNodeCubeMapUniform", "VisualShaderNodeCubemapUniform" }, + { "VisualShaderNodeScalarClamp", "VisualShaderNodeClamp" }, + { "VisualShaderNodeScalarConstant", "VisualShaderNodeFloatConstant" }, + { "VisualShaderNodeScalarFunc", "VisualShaderNodeFloatFunc" }, + { "VisualShaderNodeScalarInterp", "VisualShaderNodeMix" }, + { "VisualShaderNodeScalarOp", "VisualShaderNodeFloatOp" }, + { "VisualShaderNodeScalarSmoothStep", "VisualShaderNodeSmoothStep" }, + { "VisualShaderNodeScalarSwitch", "VisualShaderNodeSwitch" }, + { "VisualShaderNodeScalarTransformMult", "VisualShaderNodeTransformOp" }, + { "VisualShaderNodeScalarUniform", "VisualShaderNodeFloatUniform" }, + { "VisualShaderNodeTransformMult", "VisualShaderNode" }, + { "VisualShaderNodeVectorClamp", "VisualShaderNodeClamp" }, + { "VisualShaderNodeVectorInterp", "VisualShaderNodeMix" }, + { "VisualShaderNodeVectorScalarMix", "VisualShaderNodeMix" }, + { "VisualShaderNodeVectorScalarSmoothStep", "VisualShaderNodeSmoothStep" }, + { "VisualShaderNodeVectorScalarStep", "VisualShaderNodeStep" }, + { "VisualShaderNodeVectorSmoothStep", "VisualShaderNodeSmoothStep" }, + { "WebRTCDataChannelGDNative", "WebRTCDataChannelExtension" }, + { "WebRTCMultiplayer", "WebRTCMultiplayerPeer" }, + { "WebRTCPeerConnectionGDNative", "WebRTCPeerConnectionExtension" }, + { "WindowDialog", "Window" }, + { "World", "World3D" }, // Be careful, this will be used everywhere + { "XRAnchor", "XRAnchor3D" }, + { "XRController", "XRController3D" }, + { "XROrigin", "XROrigin3D" }, + { "YSort", "Node2D" }, + + { "CullInstance", "Node3D" }, // Probably this type needs to be added to Godot 4.0, since it is for now only available only in Godot 3.x + { "RoomGroup", "Node3D" }, // Probably this type needs to be added to Godot 4.0, since it is for now only available only in Godot 3.x + { "Room", "Node3D" }, // Probably this type needs to be added to Godot 4.0, since it is for now only available only in Godot 3.x + { "RoomManager", "Node3D" }, // Probably this type needs to be added to Godot 4.0, since it is for now only available only in Godot 3.x + { "Portal", "Node3D" }, // Probably this type needs to be added to Godot 4.0, since it is for now only available only in Godot 3.x + + { nullptr, nullptr }, +}; + +// TODO - this colors needs to be validated(not all are valid) +static const char *colors_renames[][2] = { + { "aliceblue", "ALICE_BLUE" }, + { "antiquewhite", "ANTIQUE_WHITE" }, + { "aqua", "AQUA" }, + { "aquamarine", "AQUAMARINE" }, + { "azure", "AZURE" }, + { "beige", "BEIGE" }, + { "bisque", "BISQUE" }, + { "black", "BLACK" }, + { "blanchedalmond", "BLANCHED_ALMOND" }, + { "blue", "BLUE" }, + { "blueviolet", "BLUE_VIOLET" }, + { "brown", "BROWN" }, + { "burlywood", "BURLYWOOD" }, + { "cadetblue", "CADET_BLUE" }, + { "chartreuse", "CHARTREUSE" }, + { "chocolate", "CHOCOLATE" }, + { "coral", "CORAL" }, + { "cornflowerblue", "CORNFLOWER_BLUE" }, + { "cornsilk", "CORNSILK" }, + { "crimson", "CRIMSON" }, + { "cyan", "CYAN" }, + { "darkblue", "DARK_BLUE" }, + { "darkcyan", "DARK_CYAN" }, + { "darkgoldenrod", "DARK_GOLDENROD" }, + { "darkgray", "DARK_GRAY" }, + { "darkgreen", "DARK_GREEN" }, + { "darkkhaki", "DARK_KHAKI" }, + { "darkmagenta", "DARK_MAGENTA" }, + { "darkolivegreen", "DARK_OLIVE_GREEN" }, + { "darkorange", "DARK_ORANGE" }, + { "darkorchid", "DARK_ORCHID" }, + { "darkred", "DARK_RED" }, + { "darksalmon", "DARK_SALMON" }, + { "darkseagreen", "DARK_SEA_GREEN" }, + { "darkslateblue", "DARK_SLATE_BLUE" }, + { "darkslategray", "DARK_SLATE_GRAY" }, + { "darkturquoise", "DARK_TURQUOISE" }, + { "darkviolet", "DARK_VIOLET" }, + { "deeppink", "DEEP_PINK" }, + { "deepskyblue", "DEEP_SKY_BLUE" }, + { "dimgray", "DIM_GRAY" }, + { "dodgerblue", "DODGER_BLUE" }, + { "firebrick", "FIREBRICK" }, + { "floralwhite", "FLORAL_WHITE" }, + { "forestgreen", "FOREST_GREEN" }, + { "fuchsia", "FUCHSIA" }, + { "gainsboro", "GAINSBORO" }, + { "ghostwhite", "GHOST_WHITE" }, + { "gold", "GOLD" }, + { "goldenrod", "GOLDENROD" }, + { "gray", "GRAY" }, + { "green", "GREEN" }, + { "greenyellow", "GREEN_YELLOW" }, + { "honeydew", "HONEYDEW" }, + { "hotpink", "HOT_PINK" }, + { "indianred", "INDIAN_RED" }, + { "indigo", "INDIGO" }, + { "ivory", "IVORY" }, + { "khaki", "KHAKI" }, + { "lavender", "LAVENDER" }, + { "lavenderblush", "LAVENDER_BLUSH" }, + { "lawngreen", "LAWN_GREEN" }, + { "lemonchiffon", "LEMON_CHIFFON" }, + { "lightblue", "LIGHT_BLUE" }, + { "lightcoral", "LIGHT_CORAL" }, + { "lightcyan", "LIGHT_CYAN" }, + { "lightgoldenrod", "LIGHT_GOLDENROD" }, + { "lightgray", "LIGHT_GRAY" }, + { "lightgreen", "LIGHT_GREEN" }, + { "lightpink", "LIGHT_PINK" }, + { "lightsalmon", "LIGHT_SALMON" }, + { "lightseagreen", "LIGHT_SEA_GREEN" }, + { "lightskyblue", "LIGHT_SKY_BLUE" }, + { "lightslategray", "LIGHT_SLATE_GRAY" }, + { "lightsteelblue", "LIGHT_STEEL_BLUE" }, + { "lightyellow", "LIGHT_YELLOW" }, + { "lime", "LIME" }, + { "limegreen", "LIME_GREEN" }, + { "linen", "LINEN" }, + { "magenta", "MAGENTA" }, + { "maroon", "MAROON" }, + { "mediumaquamarine", "MEDIUM_AQUAMARINE" }, + { "mediumblue", "MEDIUM_BLUE" }, + { "mediumorchid", "MEDIUM_ORCHID" }, + { "mediumpurple", "MEDIUM_PURPLE" }, + { "mediumseagreen", "MEDIUM_SEA_GREEN" }, + { "mediumslateblue", "MEDIUM_SLATE_BLUE" }, + { "mediumspringgreen", "MEDIUM_SPRING_GREEN" }, + { "mediumturquoise", "MEDIUM_TURQUOISE" }, + { "mediumvioletred", "MEDIUM_VIOLET_RED" }, + { "midnightblue", "MIDNIGHT_BLUE" }, + { "mintcream", "MINT_CREAM" }, + { "mistyrose", "MISTY_ROSE" }, + { "moccasin", "MOCCASIN" }, + { "navajowhite", "NAVAJO_WHITE" }, + { "navyblue", "NAVY_BLUE" }, + { "oldlace", "OLD_LACE" }, + { "olive", "OLIVE" }, + { "olivedrab", "OLIVE_DRAB" }, + { "orange", "ORANGE" }, + { "orangered", "ORANGE_RED" }, + { "orchid", "ORCHID" }, + { "palegoldenrod", "PALE_GOLDENROD" }, + { "palegreen", "PALE_GREEN" }, + { "paleturquoise", "PALE_TURQUOISE" }, + { "palevioletred", "PALE_VIOLET_RED" }, + { "papayawhip", "PAPAYA_WHIP" }, + { "peachpuff", "PEACH_PUFF" }, + { "peru", "PERU" }, + { "pink", "PINK" }, + { "plum", "PLUM" }, + { "powderblue", "POWDER_BLUE" }, + { "purple", "PURPLE" }, + { "rebeccapurple", "REBECCA_PURPLE" }, + { "red", "RED" }, + { "rosybrown", "ROSY_BROWN" }, + { "royalblue", "ROYAL_BLUE" }, + { "saddlebrown", "SADDLE_BROWN" }, + { "salmon", "SALMON" }, + { "sandybrown", "SANDY_BROWN" }, + { "seagreen", "SEA_GREEN" }, + { "seashell", "SEASHELL" }, + { "sienna", "SIENNA" }, + { "silver", "SILVER" }, + { "skyblue", "SKY_BLUE" }, + { "slateblue", "SLATE_BLUE" }, + { "slategray", "SLATE_GRAY" }, + { "snow", "SNOW" }, + { "springgreen", "SPRING_GREEN" }, + { "steelblue", "STEEL_BLUE" }, + { "tan", "TAN" }, + { "teal", "TEAL" }, + { "thistle", "THISTLE" }, + { "tomato", "TOMATO" }, + { "transparent", "TRANSPARENT" }, + { "turquoise", "TURQUOISE" }, + { "violet", "VIOLET" }, + { "webgray", "WEB_GRAY" }, + { "webgreen", "WEB_GREEN" }, + { "webmaroon", "WEB_MAROON" }, + { "webpurple", "WEB_PURPLE" }, + { "wheat", "WHEAT" }, + { "white", "WHITE" }, + { "whitesmoke", "WHITE_SMOKE" }, + { "yellow", "YELLOW" }, + { "yellowgreen", "YELLOW_GREEN" }, + + { nullptr, nullptr }, +}; + +// Function responsible for converting project +int ProjectConverter3To4::convert() { + print_line("Starting conversion."); + + ERR_FAIL_COND_V_MSG(!test_array_names(), ERROR_CODE, "Cannot start converting due to problems with data in arrays."); + ERR_FAIL_COND_V_MSG(!test_conversion(), ERROR_CODE, "Cannot start converting due to problems with converting arrays."); + + // Checking if folder contains valid Godot 3 project. + // Project cannot be converted 2 times + { + String conventer_text = "; Project was converted by built-in tool to Godot 4.0"; + + ERR_FAIL_COND_V_MSG(!FileAccess::exists("project.godot"), ERROR_CODE, "Current directory doesn't contains any Godot 3 project"); + + Error err = OK; + String project_godot_content = FileAccess::get_file_as_string("project.godot", &err); + + ERR_FAIL_COND_V_MSG(err != OK, ERROR_CODE, "Failed to read content of \"project.godot\" file."); + ERR_FAIL_COND_V_MSG(project_godot_content.find(conventer_text) != -1, ERROR_CODE, "Project already was converted with this tool."); + + Ref<FileAccess> file = FileAccess::open("project.godot", FileAccess::WRITE); + ERR_FAIL_COND_V_MSG(file.is_null(), ERROR_CODE, "Failed to open project.godot file."); + + file->store_string(conventer_text + "\n" + project_godot_content); + } + + Vector<String> collected_files = check_for_files(); + + uint32_t converted_files = 0; + + // Check file by file + for (int i = 0; i < collected_files.size(); i++) { + String file_name = collected_files[i]; + Error err = OK; + String file_content = FileAccess::get_file_as_string(file_name, &err); + ERR_CONTINUE_MSG(err != OK, "Failed to read content of \"" + file_name + "\"."); + uint64_t hash_before = file_content.hash64(); + uint64_t file_size = file_content.size(); + print_line("Trying to convert\t" + itos(i + 1) + "/" + itos(collected_files.size()) + " file - \"" + file_name.trim_prefix("res://") + "\" with size - " + itos(file_size / 1024) + " KB"); + + Vector<String> reason; + bool is_ignored = false; + uint64_t start_time = Time::get_singleton()->get_ticks_msec(); + + if (file_name.ends_with(".shader")) { + DirAccess::remove_file_or_error(file_name); + file_name = file_name.replace(".shader", ".gdshader"); + } + + if (file_size < CONVERSION_MAX_FILE_SIZE) { + // TSCN must be the same work exactly same as .gd file because it may contains builtin script + if (file_name.ends_with(".gd")) { + rename_classes(file_content); // Using only specialized function + + rename_common(enum_renames, file_content); + rename_enums(file_content); // Require to additional rename + + rename_common(gdscript_function_renames, file_content); + rename_gdscript_functions(file_content); // Require to additional rename + + rename_common(project_settings_renames, file_content); + rename_gdscript_keywords(file_content); + rename_common(gdscript_properties_renames, file_content); + rename_common(gdscript_signals_renames, file_content); + rename_common(shaders_renames, file_content); + rename_common(builtin_types_renames, file_content); + + custom_rename(file_content, "\\.shader", ".gdshader"); + custom_rename(file_content, "instance", "instantiate"); + } else if (file_name.ends_with(".tscn")) { + rename_classes(file_content); // Using only specialized function + + rename_common(enum_renames, file_content); + rename_enums(file_content); // Require to additional rename + + rename_common(gdscript_function_renames, file_content); + rename_gdscript_functions(file_content); // Require to additional rename + + rename_common(project_settings_renames, file_content); + rename_gdscript_keywords(file_content); + rename_common(gdscript_properties_renames, file_content); + rename_common(gdscript_signals_renames, file_content); + rename_common(shaders_renames, file_content); + rename_common(builtin_types_renames, file_content); + + custom_rename(file_content, "\\.shader", ".gdshader"); + } else if (file_name.ends_with(".cs")) { // TODO, C# should use different methods + rename_classes(file_content); // Using only specialized function + rename_common(csharp_function_renames, file_content); + rename_common(builtin_types_renames, file_content); + rename_common(csharp_properties_renames, file_content); + rename_common(csharp_signals_renames, file_content); + rename_csharp_functions(file_content); + custom_rename(file_content, "public class ", "public partial class "); + } else if (file_name.ends_with(".gdshader") || file_name.ends_with(".shader")) { + rename_common(shaders_renames, file_content); + } else if (file_name.ends_with("tres")) { + rename_classes(file_content); // Using only specialized function + + rename_common(shaders_renames, file_content); + rename_common(builtin_types_renames, file_content); + + custom_rename(file_content, "\\.shader", ".gdshader"); + } else if (file_name.ends_with("project.godot")) { + rename_common(project_settings_renames, file_content); + rename_common(builtin_types_renames, file_content); + } else if (file_name.ends_with(".csproj")) { + // TODO + } else { + ERR_PRINT(file_name + " is not supported!"); + continue; + } + } else { + reason.append(" ERROR: File has exceeded the maximum size allowed - 500 KB"); + is_ignored = true; + } + + uint64_t end_time = Time::get_singleton()->get_ticks_msec(); + + if (!is_ignored) { + uint64_t hash_after = file_content.hash64(); + // Don't need to save file without any changes + // Save if this is a shader, because it was renamed + if (hash_before != hash_after || file_name.find(".gdshader") != -1) { + converted_files++; + + Ref<FileAccess> file = FileAccess::open(file_name, FileAccess::WRITE); + ERR_CONTINUE_MSG(file.is_null(), "Failed to open \"" + file_name + "\" to save data to file."); + file->store_string(file_content); + reason.append(" File was changed, conversion took " + itos(end_time - start_time) + " ms."); + } else { + reason.append(" File was not changed, checking took " + itos(end_time - start_time) + " ms."); + } + } + for (int k = 0; k < reason.size(); k++) { + print_line(reason[k]); + } + } + + print_line("Conversion ended - all files(" + itos(collected_files.size()) + "), converted files(" + itos(converted_files) + "), not converted files(" + itos(collected_files.size() - converted_files) + ")."); + return 0; +}; + +// Function responsible for validating project conversion. +int ProjectConverter3To4::validate_conversion() { + print_line("Starting checking if project conversion can be done."); + + ERR_FAIL_COND_V_MSG(!test_array_names(), ERROR_CODE, "Cannot start converting due to problems with data in arrays."); + ERR_FAIL_COND_V_MSG(!test_conversion(), ERROR_CODE, "Cannot start converting due to problems with converting arrays."); + + // Checking if folder contains valid Godot 3 project. + // Project cannot be converted 2 times + { + String conventer_text = "; Project was converted by built-in tool to Godot 4.0"; + + ERR_FAIL_COND_V_MSG(!FileAccess::exists("project.godot"), ERROR_CODE, "Current directory doesn't contains any Godot 3 project"); + + Error err = OK; + String project_godot_content = FileAccess::get_file_as_string("project.godot", &err); + + ERR_FAIL_COND_V_MSG(err != OK, ERROR_CODE, "Failed to read content of \"project.godot\" file."); + ERR_FAIL_COND_V_MSG(project_godot_content.find(conventer_text) != -1, ERROR_CODE, "Project already was converted with this tool."); + } + + Vector<String> collected_files = check_for_files(); + + uint32_t converted_files = 0; + + // Check file by file + for (int i = 0; i < collected_files.size(); i++) { + String file_name = collected_files[i]; + Vector<String> file_content; + uint64_t file_size = 0; + { + Ref<FileAccess> file = FileAccess::open(file_name, FileAccess::READ); + ERR_CONTINUE_MSG(file.is_null(), "Failed to read content of \"" + file_name + "\"."); + while (!file->eof_reached()) { + String line = file->get_line(); + file_size += line.size(); + file_content.append(line); + } + } + print_line("Checking for conversion - " + itos(i + 1) + "/" + itos(collected_files.size()) + " file - \"" + file_name.trim_prefix("res://") + "\" with size - " + itos(file_size / 1024) + " KB"); + + Vector<String> changed_elements; + Vector<String> reason; + bool is_ignored = false; + uint64_t start_time = Time::get_singleton()->get_ticks_msec(); + + if (file_name.ends_with(".sader")) { + reason.append("\tFile extension will be renamed from `shader` to `gdshader`."); + } + + if (file_size < CONVERSION_MAX_FILE_SIZE) { + if (file_name.ends_with(".gd")) { + changed_elements.append_array(check_for_rename_classes(file_content)); + + changed_elements.append_array(check_for_rename_common(enum_renames, file_content)); + changed_elements.append_array(check_for_rename_enums(file_content)); + + changed_elements.append_array(check_for_rename_common(gdscript_function_renames, file_content)); + changed_elements.append_array(check_for_rename_gdscript_functions(file_content)); + + changed_elements.append_array(check_for_rename_common(project_settings_renames, file_content)); + changed_elements.append_array(check_for_rename_gdscript_keywords(file_content)); + changed_elements.append_array(check_for_rename_common(gdscript_properties_renames, file_content)); + changed_elements.append_array(check_for_rename_common(gdscript_signals_renames, file_content)); + changed_elements.append_array(check_for_rename_common(shaders_renames, file_content)); + changed_elements.append_array(check_for_rename_common(builtin_types_renames, file_content)); + + changed_elements.append_array(check_for_custom_rename(file_content, "instance", "instantiate")); + changed_elements.append_array(check_for_custom_rename(file_content, "\\.shader", ".gdshader")); + } else if (file_name.ends_with(".tscn")) { + changed_elements.append_array(check_for_rename_classes(file_content)); + + changed_elements.append_array(check_for_rename_common(enum_renames, file_content)); + changed_elements.append_array(check_for_rename_enums(file_content)); + + changed_elements.append_array(check_for_rename_common(gdscript_function_renames, file_content)); + changed_elements.append_array(check_for_rename_gdscript_functions(file_content)); + + changed_elements.append_array(check_for_rename_common(project_settings_renames, file_content)); + changed_elements.append_array(check_for_rename_gdscript_keywords(file_content)); + changed_elements.append_array(check_for_rename_common(gdscript_properties_renames, file_content)); + changed_elements.append_array(check_for_rename_common(gdscript_signals_renames, file_content)); + changed_elements.append_array(check_for_rename_common(shaders_renames, file_content)); + changed_elements.append_array(check_for_rename_common(builtin_types_renames, file_content)); + + changed_elements.append_array(check_for_custom_rename(file_content, "\\.shader", ".gdshader")); + } else if (file_name.ends_with(".cs")) { + changed_elements.append_array(check_for_rename_common(class_renames, file_content)); + changed_elements.append_array(check_for_rename_common(csharp_function_renames, file_content)); + changed_elements.append_array(check_for_rename_common(builtin_types_renames, file_content)); + changed_elements.append_array(check_for_rename_common(csharp_properties_renames, file_content)); + changed_elements.append_array(check_for_rename_common(csharp_signals_renames, file_content)); + changed_elements.append_array(check_for_rename_csharp_functions(file_content)); + changed_elements.append_array(check_for_custom_rename(file_content, "public class ", "public partial class ")); + } else if (file_name.ends_with(".gdshader") || file_name.ends_with(".shader")) { + changed_elements.append_array(check_for_rename_common(shaders_renames, file_content)); + } else if (file_name.ends_with("tres")) { + changed_elements.append_array(check_for_rename_classes(file_content)); + + changed_elements.append_array(check_for_rename_common(shaders_renames, file_content)); + changed_elements.append_array(check_for_rename_common(builtin_types_renames, file_content)); + + changed_elements.append_array(check_for_custom_rename(file_content, "\\.shader", ".gdshader")); + } else if (file_name.ends_with("project.godot")) { + changed_elements.append_array(check_for_rename_common(project_settings_renames, file_content)); + changed_elements.append_array(check_for_rename_common(builtin_types_renames, file_content)); + } else if (file_name.ends_with(".csproj")) { + // TODO + } else { + ERR_PRINT(file_name + " is not supported!"); + continue; + } + } else { + reason.append("\tERROR: File has exceeded the maximum size allowed - 500 KB"); + is_ignored = true; + } + + uint64_t end_time = Time::get_singleton()->get_ticks_msec(); + print_line(" Checking file took " + itos(end_time - start_time) + " ms."); + + for (int k = 0; k < reason.size(); k++) { + print_line(reason[k]); + } + + if (changed_elements.size() > 0 && !is_ignored) { + converted_files++; + + for (int k = 0; k < changed_elements.size(); k++) { + print_line(String("\t\t") + changed_elements[k]); + } + } + } + + print_line("Checking for valid conversion ended - all files(" + itos(collected_files.size()) + "), files which would be converted(" + itos(converted_files) + "), files which would not be converted(" + itos(collected_files.size() - converted_files) + ")."); + return 0; +} + +// Collect files which will be checked, it will not touch txt, mp4, wav etc. files +Vector<String> ProjectConverter3To4::check_for_files() { + Vector<String> collected_files = Vector<String>(); + + Vector<String> directories_to_check = Vector<String>(); + directories_to_check.push_back("res://"); + + core_bind::Directory dir = core_bind::Directory(); + while (!directories_to_check.is_empty()) { + String path = directories_to_check.get(directories_to_check.size() - 1); // Is there any pop_back function? + directories_to_check.resize(directories_to_check.size() - 1); // Remove last element + if (dir.open(path) == OK) { + dir.set_include_hidden(true); + dir.list_dir_begin(); + String current_dir = dir.get_current_dir(); + String file_name = dir.get_next(); + + while (file_name != "") { + if (file_name == ".git" || file_name == ".import" || file_name == ".godot") { + file_name = dir.get_next(); + continue; + } + if (dir.current_is_dir()) { + directories_to_check.append(current_dir + file_name + "/"); + } else { + bool proper_extension = false; + if (file_name.ends_with(".gd") || file_name.ends_with(".shader") || file_name.ends_with(".tscn") || file_name.ends_with(".tres") || file_name.ends_with(".godot") || file_name.ends_with(".cs") || file_name.ends_with(".csproj")) + proper_extension = true; + + if (proper_extension) { + collected_files.append(current_dir + file_name); + } + } + file_name = dir.get_next(); + } + } else { + print_verbose("Failed to open " + path); + } + } + return collected_files; +} + +bool ProjectConverter3To4::test_conversion_single_additional(String name, String expected, void (ProjectConverter3To4::*func)(String &), String what) { + String got = name; + (this->*func)(got); + if (expected != got) { + ERR_PRINT("Failed to convert " + what + " `" + name + "` to `" + expected + "`, got instead `" + got + "`"); + return false; + } + + return true; +} + +bool ProjectConverter3To4::test_conversion_single_normal(String name, String expected, const char *array[][2], String what) { + String got = name; + rename_common(array, got); + if (expected != got) { + ERR_PRINT("Failed to convert " + what + " `" + name + "` to `" + expected + "`, got instead `" + got + "`"); + return false; + } + return true; +} + +// Validate if conversions are proper +bool ProjectConverter3To4::test_conversion() { + bool valid = true; + + valid = valid & test_conversion_single_normal("Spatial", "Node3D", class_renames, "class"); + + valid = valid & test_conversion_single_normal("TYPE_REAL", "TYPE_FLOAT", enum_renames, "enum"); + + valid = valid & test_conversion_single_normal("can_instance", "can_instantiate", gdscript_function_renames, "gdscript function"); + + valid = valid & test_conversion_single_normal("CanInstance", "CanInstantiate", csharp_function_renames, "csharp function"); + + valid = valid & test_conversion_single_normal("translation", "position", gdscript_properties_renames, "gdscript property"); + + valid = valid & test_conversion_single_normal("Translation", "Position", csharp_properties_renames, "csharp property"); + + valid = valid & test_conversion_single_normal("NORMALMAP", "NORMAL_MAP", shaders_renames, "shader"); + + valid = valid & test_conversion_single_normal("text_entered", "text_submitted", gdscript_signals_renames, "gdscript signal"); + + valid = valid & test_conversion_single_normal("TextEntered", "TextSubmitted", csharp_signals_renames, "csharp signal"); + + valid = valid & test_conversion_single_normal("audio/channel_disable_threshold_db", "audio/buses/channel_disable_threshold_db", project_settings_renames, "project setting"); + + valid = valid & test_conversion_single_normal("Transform", "Transform3D", builtin_types_renames, "builtin type"); + + // Custom Renames + + valid = valid & test_conversion_single_additional("(Connect(A,B,C,D,E,F,G) != OK):", "(Connect(A,new Callable(B,C),D,E,F,G) != OK):", &ProjectConverter3To4::rename_csharp_functions, "custom rename csharp"); + valid = valid & test_conversion_single_additional("(Disconnect(A,B,C) != OK):", "(Disconnect(A,new Callable(B,C)) != OK):", &ProjectConverter3To4::rename_csharp_functions, "custom rename csharp"); + valid = valid & test_conversion_single_additional("(IsConnected(A,B,C) != OK):", "(IsConnected(A,new Callable(B,C)) != OK):", &ProjectConverter3To4::rename_csharp_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("OS.window_fullscreen = Settings.fullscreen", "ProjectSettings.set(\"display/window/size/fullscreen\", Settings.fullscreen)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("\tvar aa = roman(r.move_and_slide( a, b, c, d, e, f )) # Roman", "\tr.set_motion_velocity(a)\n\tr.set_up_direction(b)\n\tr.set_floor_stop_on_slope_enabled(c)\n\tr.set_max_slides(d)\n\tr.set_floor_max_angle(e)\n\t# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `f`\n\tvar aa = roman(r.move_and_slide()) # Roman", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\tvar aa = roman(r.move_and_slide_with_snap( a, g, b, c, d, e, f )) # Roman", "\tr.set_motion_velocity(a)\n\t# TODOConverter40 looks that snap in Godot 4.0 is float, not vector like in Godot 3 - previous value `g`\n\tr.set_up_direction(b)\n\tr.set_floor_stop_on_slope_enabled(c)\n\tr.set_max_slides(d)\n\tr.set_floor_max_angle(e)\n\t# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `f`\n\tvar aa = roman(r.move_and_slide()) # Roman", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("list_dir_begin( a , b )", "list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("list_dir_begin( a )", "list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("list_dir_begin( )", "list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("sort_custom( a , b )", "sort_custom(Callable(a,b))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("func c(var a, var b)", "func c(a, b)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("draw_line(1, 2, 3, 4, 5)", "draw_line(1,2,3,4)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("\timage.lock()", "\tfalse # image.lock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\timage.unlock()", "\tfalse # image.unlock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\troman.image.unlock()", "\tfalse # roman.image.unlock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\tmtx.lock()", "\tmtx.lock()", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\tmutex.unlock()", "\tmutex.unlock()", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("\nonready", "\n@onready", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("onready", "@onready", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional(" onready", " onready", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\nexport", "\n@export", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\texport", "\t@export", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\texport_dialog", "\texport_dialog", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("export", "@export", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional(" export", " export", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("tool", "@tool", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n tool", "\n tool", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\ntool", "\n\n@tool", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\nmaster func", "\n\n@rpc(any) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\npuppet func", "\n\n@rpc(auth) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\nremote func", "\n\n@rpc(any) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\nremotesync func", "\n\n@rpc(any,sync) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\nsync func", "\n\n@rpc(any,sync) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\npuppetsync func", "\n\n@rpc(auth,sync) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + valid = valid & test_conversion_single_additional("\n\nmastersync func", "\n\n@rpc(any,sync) func", &ProjectConverter3To4::rename_gdscript_keywords, "gdscript keyword"); + + valid = valid & test_conversion_single_additional("var size : Vector2 = Vector2() setget set_function , get_function", "var size : Vector2 = Vector2() :\n get:\n return size # TODOConverter40 Copy here content of get_function\n set(mod_value):\n mod_value # TODOConverter40 Copy here content of set_function", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("var size : Vector2 = Vector2() setget set_function , ", "var size : Vector2 = Vector2() :\n get:\n return size # TODOConverter40 Non existent get function \n set(mod_value):\n mod_value # TODOConverter40 Copy here content of set_function", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("var size : Vector2 = Vector2() setget set_function", "var size : Vector2 = Vector2() :\n get:\n return size # TODOConverter40 Non existent get function \n set(mod_value):\n mod_value # TODOConverter40 Copy here content of set_function", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("var size : Vector2 = Vector2() setget , get_function", "var size : Vector2 = Vector2() :\n get:\n return size # TODOConverter40 Copy here content of get_function \n set(mod_value):\n mod_value # TODOConverter40 Non existent set function", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("get_node(@", "get_node(", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("yield(this, \"timeout\")", "await this.timeout", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional(" Transform.xform(Vector3(a,b,c)) ", " Transform * Vector3(a,b,c) ", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(" Transform.xform_inv(Vector3(a,b,c)) ", " Vector3(a,b,c) * Transform ", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("export(float) var lifetime = 3.0", "export var lifetime: float = 3.0", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("export(String, 'AnonymousPro', 'CourierPrime') var _font_name = 'AnonymousPro'", "export var _font_name = 'AnonymousPro' # (String, 'AnonymousPro', 'CourierPrime')", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); // TODO, this is only a workaround + valid = valid & test_conversion_single_additional("export(PackedScene) var mob_scene", "export var mob_scene: PackedScene", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("var d = parse_json(roman(sfs))", "var test_json_conv = JSON.new()\ntest_json_conv.parse(roman(sfs))\nvar d = test_json_conv.get_data()", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("to_json( AA ) szon", "JSON.new().stringify( AA ) szon", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("s to_json", "s JSON.new().stringify", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("AF to_json2", "AF to_json2", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("var rr = JSON.parse(a)", "var test_json_conv = JSON.new()\ntest_json_conv.parse(a)\nvar rr = test_json_conv.get_data()", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("empty()", "is_empty()", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(".empty", ".empty", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional(").roman(", ").roman(", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\t.roman(", "\tsuper.roman(", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(" .roman(", " super.roman(", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(".1", ".1", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(" .1", " .1", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("'.'", "'.'", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("'.a'", "'.a'", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\t._input(_event)", "\tsuper._input(_event)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("(start(A,B,C,D,E,F,G) != OK):", "(start(A,Callable(B,C),D,E,F,G) != OK):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("(connect(A,B,C,D,E,F,G) != OK):", "(connect(A,Callable(B,C),D,E,F,G) != OK):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("(connect(A,B,C) != OK):", "(connect(A,Callable(B,C)) != OK):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("disconnect(A,B,C) != OK):", "disconnect(A,Callable(B,C)) != OK):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("is_connected(A,B,C) != OK):", "is_connected(A,Callable(B,C)) != OK):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("is_connected(A,B,C))", "is_connected(A,Callable(B,C)))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("func _init(p_x:int)->void:", "func _init(p_x:int):", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("q_PackedDataContainer._iter_init(variable1)", "q_PackedDataContainer._iter_init(variable1)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("assert(speed < 20, str(randi()%10))", "assert(speed < 20) #,str(randi()%10))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("assert(speed < 2)", "assert(speed < 2)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("assert(false, \"Missing type --\" + str(argument.type) + \"--, needs to be added to project\")", "assert(false) #,\"Missing type --\" + str(argument.type) + \"--, needs to be added to project\")", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("create_from_image(aa, bb)", "create_from_image(aa) #,bb", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("q_ImageTexture.create_from_image(variable1, variable2)", "q_ImageTexture.create_from_image(variable1) #,variable2", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("set_cell_item(a, b, c, d ,e) # AA", "set_cell_item( Vector3(a,b,c) ,d,e) # AA", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("set_cell_item(a, b)", "set_cell_item(a, b)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("get_cell_item_orientation(a, b,c)", "get_cell_item_orientation(Vector3i(a,b,c))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("get_cell_item(a, b,c)", "get_cell_item(Vector3i(a,b,c))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("PackedStringArray(req_godot).join('.')", "'.'.join(PackedStringArray(req_godot))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("=PackedStringArray(req_godot).join('.')", "='.'.join(PackedStringArray(req_godot))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional(" aa", " aa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\taa", "\taa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional("\t aa", "\taa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + valid = valid & test_conversion_single_additional(" \taa", " \taa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename"); + + valid = valid & test_conversion_single_additional("AAA Color.white AF", "AAA Color.WHITE AF", &ProjectConverter3To4::rename_enums, "custom rename"); + + // Custom rule conversion + { + String from = "instance"; + String to = "instantiate"; + String name = "AA.instance()"; + String got = "AA.instance()"; + String expected = "AA.instantiate()"; + custom_rename(got, from, to); + if (got != expected) { + ERR_PRINT("Failed to convert custom rename `" + name + "` to `" + expected + "`, got instead `" + got + "`"); + } + valid = valid & (got == expected); + } + + // get_object_of_execution + { + { String base = "var roman = kieliszek."; + String expected = "kieliszek."; + String got = get_object_of_execution(base); + if (got != expected) { + ERR_PRINT("Failed to get proper data from get_object_of_execution `" + base + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +{ + String base = "r."; + String expected = "r."; + String got = get_object_of_execution(base); + if (got != expected) { + ERR_PRINT("Failed to get proper data from get_object_of_execution `" + base + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +{ + String base = "mortadela("; + String expected = ""; + String got = get_object_of_execution(base); + if (got != expected) { + ERR_PRINT("Failed to get proper data from get_object_of_execution `" + base + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +} +// get_starting_space +{ + String base = "\t\t\t var roman = kieliszek."; + String expected = "\t\t\t"; + String got = get_starting_space(base); + if (got != expected) { + ERR_PRINT("Failed to get proper data from get_starting_space `" + base + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +// Parse Arguments +{ + String line = "( )"; + Vector<String> got_vector = parse_arguments(line); + String got = ""; + String expected = ""; + for (String &part : got_vector) { + got += part + "|||"; + } + if (got != expected) { + ERR_PRINT("Failed to get proper data from parse_arguments `" + line + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +{ + String line = "(a , b , c)"; + Vector<String> got_vector = parse_arguments(line); + String got = ""; + String expected = "a|||b|||c|||"; + for (String &part : got_vector) { + got += part + "|||"; + } + if (got != expected) { + ERR_PRINT("Failed to get proper data from parse_arguments `" + line + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +{ + String line = "(a , \"b,\" , c)"; + Vector<String> got_vector = parse_arguments(line); + String got = ""; + String expected = "a|||\"b,\"|||c|||"; + for (String &part : got_vector) { + got += part + "|||"; + } + if (got != expected) { + ERR_PRINT("Failed to get proper data from parse_arguments `" + line + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} +{ + String line = "(a , \"(,),,,,\" , c)"; + Vector<String> got_vector = parse_arguments(line); + String got = ""; + String expected = "a|||\"(,),,,,\"|||c|||"; + for (String &part : got_vector) { + got += part + "|||"; + } + if (got != expected) { + ERR_PRINT("Failed to get proper data from parse_arguments `" + line + "` should return `" + expected + "`(" + itos(expected.size()) + "), got instead `" + got + "`(" + itos(got.size()) + ")"); + } + valid = valid & (got == expected); +} + +return valid; +} + +// Validate in all arrays if names don't do cyclic renames `Node` -> `Node2D` | `Node2D` -> `2DNode` +bool ProjectConverter3To4::test_array_names() { + bool valid = true; + Vector<String> names = Vector<String>(); + + // Validate if all classes are valid + { + int current_index = 0; + while (class_renames[current_index][0]) { + const String old_class = class_renames[current_index][0]; + const String new_class = class_renames[current_index][1]; + + // Light2D, Texture, Viewport are special classes(probably virtual ones) + if (ClassDB::class_exists(StringName(old_class)) && old_class != "Light2D" && old_class != "Texture" && old_class != "Viewport") { + ERR_PRINT(String("Class `") + old_class + "` exists in Godot 4.0, so cannot be renamed to something else."); + valid = false; // This probably should be only a warning, but not 100% sure - this would need to be added to CI + } + + // Callable is special class, to which normal classes may be renamed + if (!ClassDB::class_exists(StringName(new_class)) && new_class != "Callable") { + ERR_PRINT(String("Class `") + new_class + "` doesn't exists in Godot 4.0, so cannot be used in convertion."); + valid = false; // This probably should be only a warning, but not 100% sure - this would need to be added to CI + } + current_index++; + } + } + + // // TODO To be able to fully work, it needs https://github.com/godotengine/godot/pull/49053 + // // TODO this needs to be changed to hashset when available https://github.com/godotengine/godot-proposals/issues/867, to speedup searchng + // { + // OrderedHashMap<String, bool> all_functions; + + // List<StringName> classes_list; + // ClassDB::get_class_list(&classes_list); + // for (StringName &name_of_class : classes_list) { + // List<MethodInfo> method_list; + // ClassDB::get_method_list(name_of_class, &method_list, true); + // for (MethodInfo &function_data : method_list) { + // if (!all_functions.has(function_data.name)) { + // all_functions.insert(function_data.name, false); + // } + // } + // } + + // for (int type = Variant::Type::NIL + 1; type < Variant::Type::VARIANT_MAX; type++) { + // List<MethodInfo> method_list; + // Variant::get_method_list_by_type(&method_list, Variant::Type(type)); + // for (MethodInfo &function_data : method_list) { + // if (!all_functions.has(function_data.name)) { + // all_functions.insert(function_data.name, false); + // } + // } + // } + + // int current_element = 0; + // while (gdscript_function_renames[current_element][0] != nullptr) { + // if (!all_functions.has(gdscript_function_renames[current_element][1])) { + // ERR_PRINT(String("Missing gdscript function in pair (") + gdscript_function_renames[current_element][0] + " - ===> " + gdscript_function_renames[current_element][1] + " <===)"); + // valid = false; + // } + // // // DEBUG, disable below after tests + // // if (all_functions.has(gdscript_function_renames[current_element][0])) { + // // String used_in_classes = ""; + // // + // // for (StringName &name_of_class : classes_list) { + // // List<MethodInfo> method_list; + // // ClassDB::get_method_list(name_of_class, &method_list, true); + // // for (MethodInfo &function_data : method_list) { + // // if (function_data.name == gdscript_function_renames[current_element][0]) { + // // used_in_classes += String(name_of_class) + ", "; + // // } + // // } + // // } + // // for (int type = Variant::Type::NIL + 1; type < Variant::Type::VARIANT_MAX; type++) { + // // List<MethodInfo> method_list; + // // Variant::get_method_list_by_type(&method_list, Variant::Type(type)); + // // for (MethodInfo &function_data : method_list) { + // // if (function_data.name == gdscript_function_renames[current_element][0]) { + // // used_in_classes += Variant::get_type_name(Variant::Type(type)) + ", "; + // // } + // // } + // // } + // // used_in_classes = used_in_classes.trim_suffix(", "); + // // + // // WARN_PRINT(String("Godot contains function which will be renamed in pair ( ===> ") + gdscript_function_renames[current_element][0] + " <=== - " + gdscript_function_renames[current_element][1] + ") in class " + used_in_classes + " - check for possible invalid rule."); + // // } + // current_element++; + // } + // } + + valid = valid & test_single_array(enum_renames); + valid = valid & test_single_array(class_renames, true); + valid = valid & test_single_array(gdscript_function_renames, true); + valid = valid & test_single_array(csharp_function_renames, true); + valid = valid & test_single_array(gdscript_properties_renames); + valid = valid & test_single_array(csharp_properties_renames); + valid = valid & test_single_array(shaders_renames); + valid = valid & test_single_array(gdscript_signals_renames); + valid = valid & test_single_array(project_settings_renames); + valid = valid & test_single_array(builtin_types_renames); + valid = valid & test_single_array(colors_renames); + + return valid; +} + +// Validate in one array if names don't do cyclic renames `Node` -> `Node2D` | `Node2D` -> `2DNode` +// Also checks if in name contains spaces at the end or beggining +bool ProjectConverter3To4::test_single_array(const char *array[][2], bool ignore_second_check) { + bool valid = true; + int current_index = 0; + Vector<String> names = Vector<String>(); + + while (array[current_index][0]) { + if (String(array[current_index][0]).begins_with(" ") || String(array[current_index][0]).ends_with(" ")) { + { + ERR_PRINT(String("Entry \"") + array[current_index][0] + "\" ends or stars with space."); + valid = false; + } + } + if (names.has(array[current_index][0])) { + ERR_PRINT(String("Found duplicated things, pair ( -> ") + array[current_index][0] + " , " + array[current_index][1] + ")"); + valid = false; + } + names.append(array[current_index][0]); + + if (String(array[current_index][1]).begins_with(" ") || String(array[current_index][1]).ends_with(" ")) { + { + ERR_PRINT(String("Entry \"") + array[current_index][1] + "\" ends or stars with space."); + valid = false; + } + } + if (names.has(array[current_index][1])) { + ERR_PRINT(String("Found duplicated things, pair (") + array[current_index][0] + " , ->" + array[current_index][1] + ")"); + valid = false; + } + if (!ignore_second_check) { + names.append(array[current_index][1]); + } + current_index++; + } + return valid; +}; + +// Returns arguments from given function execution, this cannot be really done as regex +// `abc(d,e(f,g),h)` -> [d], [e(f,g)], [h] +Vector<String> ProjectConverter3To4::parse_arguments(const String &line) { + Vector<String> parts; + int string_size = line.length(); + int current_index = 0; + int start_part = 0; // Index of beginning of start par + int parts_counter = 0; + char32_t previous_character = '\0'; + bool is_inside_string = false; // if true, it ignore this 3 characters ( , ) inside string + + if (line.count("(") != line.count(")")) { + ERR_PRINT("Bug: substring should have equal number of open and close parenthess - `" + line + "`"); + return parts; + } + + while (current_index < string_size) { + char32_t character = line.get(current_index); + switch (character) { + case '(': { + parts_counter++; + if (parts_counter == 1 && !is_inside_string) { + start_part = current_index; + } + break; + }; + case ')': { + parts_counter--; + if (parts_counter == 0 && !is_inside_string) { + parts.append(line.substr(start_part + 1, current_index - start_part - 1)); + start_part = current_index; + } + break; + }; + case ',': { + if (parts_counter == 1 && !is_inside_string) { + parts.append(line.substr(start_part + 1, current_index - start_part - 1)); + start_part = current_index; + } + break; + }; + case '"': { + if (previous_character != '\\') + is_inside_string = !is_inside_string; + } + } + current_index++; + previous_character = character; + } + + Vector<String> clean_parts; + for (String &part : parts) { + part = part.strip_edges(); + if (!part.is_empty()) { + clean_parts.append(part); + } + } + + return clean_parts; +} + +// Finds latest parenthess owned by function +// `function(abc(a,b),DD)):` finds this parenthess `function(abc(a,b),DD => ) <= ):` +int ProjectConverter3To4::get_end_parenthess(const String &line) const { + int current_index = 0; + int current_state = 0; + while (line.length() > current_index) { + char32_t character = line.get(current_index); + if (character == '(') { + current_state++; + } + if (character == ')') { + current_state--; + if (current_state == 0) { + return current_index; + } + } + current_index++; + } + return -1; +} + +// Connects arguments from vector to one string +// Needed when after processing e.g. 2 arguments, later arguments are not changed in any way +String ProjectConverter3To4::connect_arguments(const Vector<String> &arguments, int from, int to) const { + if (to == -1) { + to = arguments.size(); + } + + String value; + if (arguments.size() > 0 && from != 0 && from < to) { + value = ","; + } + + for (int i = from; i < to; i++) { + value += arguments[i]; + if (i != to - 1) { + value += ','; + } + } + return value; +} + +// Return spaces or tabs which starts line e.g. `\t\tmove_this` will return `\t\t` +String ProjectConverter3To4::get_starting_space(const String &line) const { + String empty_space; + int current_character = 0; + + if (line.is_empty()) { + return empty_space; + } + + if (line[0] == ' ') { + while (current_character < line.size()) { + if (line[current_character] == ' ') { + empty_space += ' '; + current_character++; + } else { + break; + } + } + } + if (line[0] == '\t') { + while (current_character < line.size()) { + if (line[current_character] == '\t') { + empty_space += '\t'; + current_character++; + } else { + break; + } + } + } + return empty_space; +} + +// Return object which execute specific function +// e.g. in `var roman = kieliszek.funkcja()` to this function is passed everything before function which we want to check +// so it is `var roman = kieliszek.` and this function return `kieliszek.` +String ProjectConverter3To4::get_object_of_execution(const String &line) const { + int end = line.size() - 1; // Last one is \0 + int start = end - 1; + + while (start >= 0) { + char32_t character = line[start]; + if ((character >= 'A' && character <= 'Z') || (character >= 'a' && character <= 'z') || character == '.' || character == '_') { + if (start == 0) { + break; + } + start--; + continue; + } else { + start++; // Found invalid character, needs to be ignored + break; + } + } + return line.substr(start, (end - start)); +} + +void ProjectConverter3To4::rename_enums(String &file_content) { + int current_index = 0; + + // Rename colors + if (file_content.find("Color.") != -1) { + while (colors_renames[current_index][0]) { + RegEx reg = RegEx(String("\\bColor.") + colors_renames[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + file_content = reg.sub(file_content, String("Color.") + colors_renames[current_index][1], true); + current_index++; + } + } +}; + +Vector<String> ProjectConverter3To4::check_for_rename_enums(Vector<String> &file_content) { + int current_index = 0; + + Vector<String> found_things; + + // Rename colors + if (file_content.find("Color.") != -1) { + while (colors_renames[current_index][0]) { + RegEx reg = RegEx(String("\\bColor.") + colors_renames[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + + int current_line = 1; + for (String &line : file_content) { + Array reg_match = reg.search_all(line); + if (reg_match.size() > 0) { + found_things.append(line_formatter(current_line, colors_renames[current_index][0], colors_renames[current_index][1], line)); + } + current_line++; + } + current_index++; + } + } + + return found_things; +} + +void ProjectConverter3To4::rename_classes(String &file_content) { + int current_index = 0; + + // TODO Maybe it is better way to not rename gd, tscn and other files which are named are classes + while (class_renames[current_index][0]) { + // Begin renaming workaround `Resource.gd` -> `RefCounter.gd` + RegEx reg_before = RegEx(String("\\b") + class_renames[current_index][0] + ".tscn\\b"); + CRASH_COND(!reg_before.is_valid()); + file_content = reg_before.sub(file_content, "TEMP_RENAMED_CLASS.tscn", true); + RegEx reg_before2 = RegEx(String("\\b") + class_renames[current_index][0] + ".gd\\b"); + CRASH_COND(!reg_before2.is_valid()); + file_content = reg_before2.sub(file_content, "TEMP_RENAMED_CLASS.gd", true); + RegEx reg_before3 = RegEx(String("\\b") + class_renames[current_index][0] + ".shader\\b"); + CRASH_COND(!reg_before3.is_valid()); + file_content = reg_before3.sub(file_content, "TEMP_RENAMED_CLASS.gd", true); + // End + + RegEx reg = RegEx(String("\\b") + class_renames[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + file_content = reg.sub(file_content, class_renames[current_index][1], true); + + // Begin renaming workaround `Resource.gd` -> `RefCounter.gd` + RegEx reg_after = RegEx("\\bTEMP_RENAMED_CLASS.tscn\\b"); + CRASH_COND(!reg_after.is_valid()); + file_content = reg_after.sub(file_content, String(class_renames[current_index][0]) + ".tscn", true); + RegEx reg_after2 = RegEx("\\bTEMP_RENAMED_CLASS.gd\\b"); + CRASH_COND(!reg_after2.is_valid()); + file_content = reg_after2.sub(file_content, String(class_renames[current_index][0]) + ".gd", true); + RegEx reg_after3 = RegEx("\\bTEMP_RENAMED_CLASS.gd\\b"); + CRASH_COND(!reg_after3.is_valid()); + file_content = reg_after3.sub(file_content, String(class_renames[current_index][0]) + ".shader", true); + // End + + current_index++; + } + + // OS.get_ticks_msec -> Time.get_ticks_msec + RegEx reg_time1 = RegEx("OS.get_ticks_msec"); + CRASH_COND(!reg_time1.is_valid()); + file_content = reg_time1.sub(file_content, "Time.get_ticks_msec", true); + RegEx reg_time2 = RegEx("OS.get_ticks_usec"); + CRASH_COND(!reg_time2.is_valid()); + file_content = reg_time2.sub(file_content, "Time.get_ticks_usec", true); +}; + +Vector<String> ProjectConverter3To4::check_for_rename_classes(Vector<String> &file_content) { + int current_index = 0; + + Vector<String> found_things; + + while (class_renames[current_index][0]) { + RegEx reg_before = RegEx(String("\\b") + class_renames[current_index][0] + ".tscn\\b"); + CRASH_COND(!reg_before.is_valid()); + RegEx reg_before2 = RegEx(String("\\b") + class_renames[current_index][0] + ".gd\\b"); + CRASH_COND(!reg_before2.is_valid()); + + RegEx reg = RegEx(String("\\b") + class_renames[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + + int current_line = 1; + for (String &line : file_content) { + line = reg_before.sub(line, "TEMP_RENAMED_CLASS.tscn", true); + line = reg_before2.sub(line, "TEMP_RENAMED_CLASS.gd", true); + + Array reg_match = reg.search_all(line); + if (reg_match.size() > 0) { + found_things.append(line_formatter(current_line, class_renames[current_index][0], class_renames[current_index][1], line)); + } + current_line++; + } + current_index++; + } + + // TODO OS -> TIME + int current_line = 1; + RegEx reg_time1 = RegEx("OS.get_ticks_msec"); + CRASH_COND(!reg_time1.is_valid()); + RegEx reg_time2 = RegEx("OS.get_ticks_usec"); + CRASH_COND(!reg_time2.is_valid()); + for (String &line : file_content) { + String old = line; + + line = reg_time1.sub(line, "Time.get_ticks_msec", true); + line = reg_time2.sub(line, "Time.get_ticks_usec", true); + + if (old != line) { + found_things.append(simple_line_formatter(current_line, old, line)); + } + current_line++; + } + return found_things; +} + +void ProjectConverter3To4::rename_gdscript_functions(String &file_content) { + // Custom renaming, each rule needs to be set manually + // Don't forget to put validate each rule in validate_conversion function + Vector<String> lines = file_content.split("\n"); + + RegEx reg_is_empty = RegEx("\\bempty\\("); + RegEx reg_super = RegEx("([\t ])\\.([a-zA-Z_])"); + RegEx reg_json_to = RegEx("\\bto_json\\b"); + RegEx reg_json_parse = RegEx("([\t]{0,})([^\n]+)parse_json\\(([^\n]+)"); + RegEx reg_json_non_new = RegEx("([\t]{0,})([^\n]+)JSON\\.parse\\(([^\n]+)"); + RegEx reg_export = RegEx("export\\(([a-zA-Z0-9_]+)\\)[ ]+var[ ]+([a-zA-Z0-9_]+)"); + RegEx reg_export_advanced = RegEx("export\\(([^)^\n]+)\\)[ ]+var[ ]+([a-zA-Z0-9_]+)([^\n]+)"); + RegEx reg_setget_setget = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+([a-zA-Z0-9_]+)[ \t]*,[ \t]*([a-zA-Z0-9_]+)"); + RegEx reg_setget_set = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+([a-zA-Z0-9_]+)[ \t]*[,]*[^a-z^A-Z^0-9^_]*$"); + RegEx reg_setget_get = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+,[ \t]*([a-zA-Z0-9_]+)[ \t]*$"); + RegEx reg_join = RegEx("([\\(\\)a-zA-Z0-9_]+)\\.join\\(([^\n^\\)]+)\\)"); + RegEx reg_mixed_tab_space = RegEx("([\t]+)([ ]+)"); + RegEx reg_image_lock = RegEx("([a-zA-Z0-9_\\.]+)\\.lock\\(\\)"); + RegEx reg_image_unlock = RegEx("([a-zA-Z0-9_\\.]+)\\.unlock\\(\\)"); + RegEx reg_os_fullscreen = RegEx("OS.window_fullscreen[= ]+([^#^\n]+)"); + + CRASH_COND(!reg_is_empty.is_valid()); + CRASH_COND(!reg_super.is_valid()); + CRASH_COND(!reg_json_to.is_valid()); + CRASH_COND(!reg_json_parse.is_valid()); + CRASH_COND(!reg_json_non_new.is_valid()); + CRASH_COND(!reg_export.is_valid()); + CRASH_COND(!reg_export_advanced.is_valid()); + CRASH_COND(!reg_setget_setget.is_valid()); + CRASH_COND(!reg_setget_set.is_valid()); + CRASH_COND(!reg_setget_get.is_valid()); + CRASH_COND(!reg_join.is_valid()); + CRASH_COND(!reg_mixed_tab_space.is_valid()); + CRASH_COND(!reg_image_lock.is_valid()); + CRASH_COND(!reg_image_unlock.is_valid()); + CRASH_COND(!reg_os_fullscreen.is_valid()); + + for (String &line : lines) { + if (line.find("mtx") == -1 && line.find("mutex") == -1 && line.find("Mutex") == -1) { + line = reg_image_lock.sub(line, "false # $1.lock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", true); + line = reg_image_unlock.sub(line, "false # $1.unlock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", true); + } + + // Mixed use of spaces and tabs - tabs as first - TODO, this probably is problem problem, but not sure + line = reg_mixed_tab_space.sub(line, "$1", true); + + // PackedStringArray(req_godot).join('.') -> '.'.join(PackedStringArray(req_godot)) PoolStringArray + line = reg_join.sub(line, "$2.join($1)", true); + + // -- empty() -> is_empty() Pool*Array + line = reg_is_empty.sub(line, "is_empty(", true); + + // -- \t.func() -> \tsuper.func() Object + line = reg_super.sub(line, "$1super.$2", true); // TODO, not sure if possible, but for now this brake String text e.g. "Choosen .gitignore" -> "Choosen super.gitignore" + + // -- JSON.parse(a) -> JSON.new().parse(a) etc. JSON + line = reg_json_non_new.sub(line, "$1var test_json_conv = JSON.new()\n$1test_json_conv.parse($3\n$1$2test_json_conv.get_data()", true); + + // -- to_json(a) -> JSON.new().stringify(a) Object + line = reg_json_to.sub(line, "JSON.new().stringify", true); + + // -- parse_json(a) -> JSON.get_data() etc. Object + line = reg_json_parse.sub(line, "$1var test_json_conv = JSON.new()\n$1test_json_conv.parse($3\n$1$2test_json_conv.get_data()", true); + + // -- get_node(@ -> get_node( Node + line = line.replace("get_node(@", "get_node("); + + // export(float) var lifetime = 3.0 -> export var lifetime: float = 3.0 GDScript + line = reg_export.sub(line, "export var $2: $1"); + + // export(String, 'AnonymousPro', 'CourierPrime') var _font_name = 'AnonymousPro' -> export var _font_name = 'AnonymousPro' #(String, 'AnonymousPro', 'CourierPrime') GDScript + line = reg_export_advanced.sub(line, "export var $2$3 # ($1)"); + + // Setget Setget + line = reg_setget_setget.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Copy here content of $4\n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Copy here content of $3", true); + + // Setget set + line = reg_setget_set.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Non existent get function \n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Copy here content of $3", true); + + // Setget get + line = reg_setget_get.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Copy here content of $3 \n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Non existent set function", true); + + // OS.window_fullscreen = true -> ProjectSettings.set("display/window/size/fullscreen",true) + line = reg_os_fullscreen.sub(line, "ProjectSettings.set(\"display/window/size/fullscreen\", $1)", true); + + // -- r.move_and_slide( a, b, c, d, e ) -> r.set_motion_velocity(a) ... r.move_and_slide() KinematicBody + if (line.find("move_and_slide(") != -1) { + int start = line.find("move_and_slide("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + String base_obj = get_object_of_execution(line.substr(0, start)); + String starting_space = get_starting_space(line); + + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 1) { + String line_new; + + // motion_velocity + line_new += starting_space + base_obj + "set_motion_velocity(" + parts[0] + ")\n"; + + // up_direction + if (parts.size() >= 2) { + line_new += starting_space + base_obj + "set_up_direction(" + parts[1] + ")\n"; + } + + // stop_on_slope + if (parts.size() >= 3) { + line_new += starting_space + base_obj + "set_floor_stop_on_slope_enabled(" + parts[2] + ")\n"; + } + + // max_slides + if (parts.size() >= 4) { + line_new += starting_space + base_obj + "set_max_slides(" + parts[3] + ")\n"; + } + + // floor_max_angle + if (parts.size() >= 5) { + line_new += starting_space + base_obj + "set_floor_max_angle(" + parts[4] + ")\n"; + } + + // infiinite_interia + if (parts.size() >= 6) { + line_new += starting_space + "# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `" + parts[5] + "`\n"; + } + + line = line_new + line.substr(0, start) + "move_and_slide()" + line.substr(end + start); + } + } + } + + // -- r.move_and_slide_with_snap( a, b, c, d, e ) -> r.set_motion_velocity(a) ... r.move_and_slide() KinematicBody + if (line.find("move_and_slide_with_snap(") != -1) { + int start = line.find("move_and_slide_with_snap("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + String base_obj = get_object_of_execution(line.substr(0, start)); + String starting_space = get_starting_space(line); + + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 1) { + String line_new; + + // motion_velocity + line_new += starting_space + base_obj + "set_motion_velocity(" + parts[0] + ")\n"; + + // snap + if (parts.size() >= 2) { + line_new += starting_space + "# TODOConverter40 looks that snap in Godot 4.0 is float, not vector like in Godot 3 - previous value `" + parts[1] + "`\n"; + } + + // up_direction + if (parts.size() >= 3) { + line_new += starting_space + base_obj + "set_up_direction(" + parts[2] + ")\n"; + } + + // stop_on_slope + if (parts.size() >= 4) { + line_new += starting_space + base_obj + "set_floor_stop_on_slope_enabled(" + parts[3] + ")\n"; + } + + // max_slides + if (parts.size() >= 5) { + line_new += starting_space + base_obj + "set_max_slides(" + parts[4] + ")\n"; + } + + // floor_max_angle + if (parts.size() >= 6) { + line_new += starting_space + base_obj + "set_floor_max_angle(" + parts[5] + ")\n"; + } + + // infiinite_interia + if (parts.size() >= 7) { + line_new += starting_space + "# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `" + parts[6] + "`\n"; + } + + line = line_new + line.substr(0, start) + "move_and_slide()" + line.substr(end + start); + } + } + } + + // -- sort_custom( a , b ) -> sort_custom(Callable( a , b )) Object + if (line.find("sort_custom(") != -1) { + int start = line.find("sort_custom("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "sort_custom(Callable(" + parts[0] + "," + parts[1] + "))" + line.substr(end + start); + } + } + } + + // -- list_dir_begin( ) -> list_dir_begin() Object + if (line.find("list_dir_begin(") != -1) { + int start = line.find("list_dir_begin("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + line = line.substr(0, start) + "list_dir_begin() " + line.substr(end + start) + "# TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547"; + } + } + + // -- draw_line(1,2,3,4,5) -> draw_line(1,2,3,4) CanvasItem + if (line.find("draw_line(") != -1) { + int start = line.find("draw_line("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 5) { + line = line.substr(0, start) + "draw_line(" + parts[0] + "," + parts[1] + "," + parts[2] + "," + parts[3] + ")" + line.substr(end + start); + } + } + } + + // -- func c(var a, var b) -> func c(a, b) + if (line.find("func ") != -1 && line.find("var ") != -1) { + int start = line.find("func "); + start = line.substr(start).find("(") + start; + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + + String start_string = line.substr(0, start) + "("; + for (int i = 0; i < parts.size(); i++) { + start_string += parts[i].strip_edges().trim_prefix("var "); + if (i != parts.size() - 1) { + start_string += ", "; + } + } + line = start_string + ")" + line.substr(end + start); + } + } + + // -- yield(this, \"timeout\") -> await this.timeout GDScript + if (line.find("yield(") != -1) { + int start = line.find("yield("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "await " + parts[0] + "." + parts[1].replace("\"", "").replace("\'", "").replace(" ", "") + line.substr(end + start); + } + } + } + + // -- parse_json( AA ) -> TODO Object + if (line.find("parse_json(") != -1) { + int start = line.find("parse_json("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + line = line.substr(0, start) + "JSON.new().stringify(" + connect_arguments(parts, 0) + ")" + line.substr(end + start); + } + } + + // -- .xform(Vector3(a,b,c)) -> * Vector3(a,b,c) Transform + if (line.find(".xform(") != -1) { + int start = line.find(".xform("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 1) { + line = line.substr(0, start) + " * " + parts[0] + line.substr(end + start); + } + } + } + + // -- .xform_inv(Vector3(a,b,c)) -> * Vector3(a,b,c) Transform + if (line.find(".xform_inv(") != -1) { + int start = line.find(".xform_inv("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + String object_exec = get_object_of_execution(line.substr(0, start)); + if (line.find(object_exec + ".xform") != -1) { + int start2 = line.find(object_exec + ".xform"); + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 1) { + line = line.substr(0, start2) + parts[0] + " * " + object_exec + line.substr(end + start); + } + } + } + } + + // -- connect(,,,things) -> connect(,Callable(,),things) Object + if (line.find("connect(") != -1) { + int start = line.find("connect("); + // Protection from disconnect + if (start == 0 || line.get(start - 1) != 's') { + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "connect(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + } + // -- disconnect(a,b,c) -> disconnect(a,Callable(b,c)) Object + if (line.find("disconnect(") != -1) { + int start = line.find("disconnect("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "disconnect(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- is_connected(a,b,c) -> is_connected(a,Callable(b,c)) Object + if (line.find("is_connected(") != -1) { + int start = line.find("is_connected("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "is_connected(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- start(a,b,c) -> start(a,Callable(b,c)) Thread + if (line.find("start(") != -1) { + int start = line.find("start("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "start(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + // -- func _init(p_x:int)->void: -> func _init(p_x:int): Object # https://github.com/godotengine/godot/issues/50589 + if (line.find(" _init(") != -1) { + int start = line.find(" _init("); + int end = line.rfind(":") + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + line = line.substr(0, start) + " _init(" + connect_arguments(parts, 0) + "):" + line.substr(end + start); + } + } + // assert(speed < 20, str(randi()%10)) -> assert(speed < 20) #,str(randi()%10)) GDScript - GDScript bug constant message + if (line.find("assert(") != -1) { + int start = line.find("assert("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "assert(" + parts[0] + ") " + line.substr(end + start) + "#," + parts[1] + ")"; + } + } + } + // create_from_image(aa, bb) -> create_from_image(aa) #, bb ImageTexture + if (line.find("create_from_image(") != -1) { + int start = line.find("create_from_image("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "create_from_image(" + parts[0] + ") " + "#," + parts[1] + line.substr(end + start); + } + } + } + // set_cell_item(a, b, c, d ,e) -> set_cell_item(Vector3(a, b, c), d ,e) + if (line.find("set_cell_item(") != -1) { + int start = line.find("set_cell_item("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() > 2) { + line = line.substr(0, start) + "set_cell_item( Vector3(" + parts[0] + "," + parts[1] + "," + parts[2] + ") " + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + // get_cell_item(a, b, c) -> get_cell_item(Vector3i(a, b, c)) + if (line.find("get_cell_item(") != -1) { + int start = line.find("get_cell_item("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "get_cell_item(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // get_cell_item_orientation(a, b, c) -> get_cell_item_orientation(Vector3i(a, b, c)) + if (line.find("get_cell_item_orientation(") != -1) { + int start = line.find("get_cell_item_orientation("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "get_cell_item_orientation(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + + // TODO - add_surface_from_arrays - additional 4 argument + // ENetMultiplayerPeer.create_client - additional argument + // ENetMultiplayerPeer.create_server - additional argument + // Translation.get_message (and similar) + // TreeItem.move_after() - new argument + // TreeItem.move_before() - new argument + // UndoRedo.commit_action() - additional argument + } + + // Collect vector to string + file_content = ""; + for (int i = 0; i < lines.size(); i++) { + file_content += lines[i]; + + if (i != lines.size() - 1) { + file_content += "\n"; + } + } +}; + +// This is almost 1:1 copy of function which rename gdscript functions +Vector<String> ProjectConverter3To4::check_for_rename_gdscript_functions(Vector<String> &file_content) { + int current_line = 1; + + Vector<String> found_things; + + RegEx reg_is_empty = RegEx("\\bempty\\("); + RegEx reg_super = RegEx("([\t ])\\.([a-zA-Z_])"); + RegEx reg_json_to = RegEx("\\bto_json\\b"); + RegEx reg_json_parse = RegEx("([\t]{0,})([^\n]+)parse_json\\(([^\n]+)"); + RegEx reg_json_non_new = RegEx("([\t]{0,})([^\n]+)JSON\\.parse\\(([^\n]+)"); + RegEx reg_export = RegEx("export\\(([a-zA-Z0-9_]+)\\)[ ]+var[ ]+([a-zA-Z0-9_]+)"); + RegEx reg_export_advanced = RegEx("export\\(([^)^\n]+)\\)[ ]+var[ ]+([a-zA-Z0-9_]+)([^\n]+)"); + RegEx reg_setget_setget = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+([a-zA-Z0-9_]+)[ \t]*,[ \t]*([a-zA-Z0-9_]+)"); + RegEx reg_setget_set = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+([a-zA-Z0-9_]+)[ \t]*[,]*[^a-z^A-Z^0-9^_]*$"); + RegEx reg_setget_get = RegEx("var[ ]+([a-zA-Z0-9_]+)([^\n]+)setget[ \t]+,[ \t]*([a-zA-Z0-9_]+)[ \t]*$"); + RegEx reg_join = RegEx("([\\(\\)a-zA-Z0-9_]+)\\.join\\(([^\n^\\)]+)\\)"); + RegEx reg_mixed_tab_space = RegEx("([\t]+)([ ]+)"); + RegEx reg_image_lock = RegEx("([a-zA-Z0-9_\\.]+)\\.lock\\(\\)"); + RegEx reg_image_unlock = RegEx("([a-zA-Z0-9_\\.]+)\\.unlock\\(\\)"); + RegEx reg_os_fullscreen = RegEx("OS.window_fullscreen[= ]+([^#^\n]+)"); + + CRASH_COND(!reg_is_empty.is_valid()); + CRASH_COND(!reg_super.is_valid()); + CRASH_COND(!reg_json_to.is_valid()); + CRASH_COND(!reg_json_parse.is_valid()); + CRASH_COND(!reg_json_non_new.is_valid()); + CRASH_COND(!reg_export.is_valid()); + CRASH_COND(!reg_export_advanced.is_valid()); + CRASH_COND(!reg_setget_setget.is_valid()); + CRASH_COND(!reg_setget_set.is_valid()); + CRASH_COND(!reg_setget_get.is_valid()); + CRASH_COND(!reg_join.is_valid()); + CRASH_COND(!reg_mixed_tab_space.is_valid()); + CRASH_COND(!reg_image_lock.is_valid()); + CRASH_COND(!reg_image_unlock.is_valid()); + CRASH_COND(!reg_os_fullscreen.is_valid()); + + for (String &line : file_content) { + String old_line = line; + + if (line.find("mtx") == -1 && line.find("mutex") == -1 && line.find("Mutex") == -1) { + line = reg_image_lock.sub(line, "false # $1.lock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", true); + line = reg_image_unlock.sub(line, "false # $1.unlock() # TODOConverter40, image no longer require locking, `false` helps to not broke one line if/else, so can be freely removed", true); + } + + // Mixed use of spaces and tabs - tabs as first - TODO, this probably is problem problem, but not sure + line = reg_mixed_tab_space.sub(line, "$1", true); + + // PackedStringArray(req_godot).join('.') -> '.'.join(PackedStringArray(req_godot)) PoolStringArray + line = reg_join.sub(line, "$2.join($1)", true); + + // -- empty() -> is_empty() Pool*Array + line = reg_is_empty.sub(line, "is_empty(", true); + + // -- \t.func() -> \tsuper.func() Object + line = reg_super.sub(line, "$1super.$2", true); // TODO, not sure if possible, but for now this brake String text e.g. "Choosen .gitignore" -> "Choosen super.gitignore" + + // -- JSON.parse(a) -> JSON.new().parse(a) etc. JSON + line = reg_json_non_new.sub(line, "$1var test_json_conv = JSON.new()\n$1test_json_conv.parse($3\n$1$2test_json_conv.get_data()", true); + + // -- to_json(a) -> JSON.new().stringify(a) Object + line = reg_json_to.sub(line, "JSON.new().stringify", true); + + // -- parse_json(a) -> JSON.get_data() etc. Object + line = reg_json_parse.sub(line, "$1var test_json_conv = JSON.new()\n$1test_json_conv.parse($3\n$1$2test_json_conv.get_data()", true); + + // -- get_node(@ -> get_node( Node + line = line.replace("get_node(@", "get_node("); + + // export(float) var lifetime = 3.0 -> export var lifetime: float = 3.0 GDScript + line = reg_export.sub(line, "export var $2: $1"); + + // export(String, 'AnonymousPro', 'CourierPrime') var _font_name = 'AnonymousPro' -> export var _font_name = 'AnonymousPro' #(String, 'AnonymousPro', 'CourierPrime') GDScript + line = reg_export_advanced.sub(line, "export var $2$3 # ($1)"); + + // Setget Setget + line = reg_setget_setget.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Copy here content of $4\n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Copy here content of $3", true); + + // Setget set + line = reg_setget_set.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Non existent get function \n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Copy here content of $3", true); + + // Setget get + line = reg_setget_get.sub(line, "var $1$2:\n\tget:\n\t\treturn $1 # TODOConverter40 Copy here content of $3 \n\tset(mod_value):\n\t\tmod_value # TODOConverter40 Non existent set function", true); + + // OS.window_fullscreen = true -> ProjectSettings.set("display/window/size/fullscreen",true) + line = reg_os_fullscreen.sub(line, "ProjectSettings.set(\"display/window/size/fullscreen\", $1)", true); + + // -- r.move_and_slide( a, b, c, d, e ) -> r.set_motion_velocity(a) ... r.move_and_slide() KinematicBody + if (line.find("move_and_slide(") != -1) { + int start = line.find("move_and_slide("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + String base_obj = get_object_of_execution(line.substr(0, start)); + String starting_space = get_starting_space(line); + + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 1) { + String line_new; + + // motion_velocity + line_new += starting_space + base_obj + "set_motion_velocity(" + parts[0] + ")\n"; + + // up_direction + if (parts.size() >= 2) { + line_new += starting_space + base_obj + "set_up_direction(" + parts[1] + ")\n"; + } + + // stop_on_slope + if (parts.size() >= 3) { + line_new += starting_space + base_obj + "set_floor_stop_on_slope_enabled(" + parts[2] + ")\n"; + } + + // max_slides + if (parts.size() >= 4) { + line_new += starting_space + base_obj + "set_max_slides(" + parts[3] + ")\n"; + } + + // floor_max_angle + if (parts.size() >= 5) { + line_new += starting_space + base_obj + "set_floor_max_angle(" + parts[4] + ")\n"; + } + + // infiinite_interia + if (parts.size() >= 6) { + line_new += starting_space + "# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `" + parts[5] + "`\n"; + } + + line = line_new + line.substr(0, start) + "move_and_slide()" + line.substr(end + start); + } + } + } + + // -- r.move_and_slide_with_snap( a, b, c, d, e ) -> r.set_motion_velocity(a) ... r.move_and_slide() KinematicBody + if (line.find("move_and_slide_with_snap(") != -1) { + int start = line.find("move_and_slide_with_snap("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + String base_obj = get_object_of_execution(line.substr(0, start)); + String starting_space = get_starting_space(line); + + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 1) { + String line_new; + + // motion_velocity + line_new += starting_space + base_obj + "set_motion_velocity(" + parts[0] + ")\n"; + + // snap + if (parts.size() >= 2) { + line_new += starting_space + "# TODOConverter40 looks that snap in Godot 4.0 is float, not vector like in Godot 3 - previous value `" + parts[1] + "`\n"; + } + + // up_direction + if (parts.size() >= 3) { + line_new += starting_space + base_obj + "set_up_direction(" + parts[2] + ")\n"; + } + + // stop_on_slope + if (parts.size() >= 4) { + line_new += starting_space + base_obj + "set_floor_stop_on_slope_enabled(" + parts[3] + ")\n"; + } + + // max_slides + if (parts.size() >= 5) { + line_new += starting_space + base_obj + "set_max_slides(" + parts[4] + ")\n"; + } + + // floor_max_angle + if (parts.size() >= 6) { + line_new += starting_space + base_obj + "set_floor_max_angle(" + parts[5] + ")\n"; + } + + // infiinite_interia + if (parts.size() >= 7) { + line_new += starting_space + "# TODOConverter40 infinite_inertia were removed in Godot 4.0 - previous value `" + parts[6] + "`\n"; + } + + line = line_new + line.substr(0, start) + "move_and_slide()" + line.substr(end + start); + } + } + } + + // -- sort_custom( a , b ) -> sort_custom(Callable( a , b )) Object + if (line.find("sort_custom(") != -1) { + int start = line.find("sort_custom("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "sort_custom(Callable(" + parts[0] + "," + parts[1] + "))" + line.substr(end + start); + } + } + } + + // -- draw_line(1,2,3,4,5) -> draw_line(1,2,3,4) CanvasItem + if (line.find("draw_line(") != -1) { + int start = line.find("draw_line("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 5) { + line = line.substr(0, start) + "draw_line(" + parts[0] + "," + parts[1] + "," + parts[2] + "," + parts[3] + ")" + line.substr(end + start); + } + } + } + + // -- func c(var a, var b) -> func c(a, b) + if (line.find("func ") != -1 && line.find("var ") != -1) { + int start = line.find("func "); + start = line.substr(start).find("(") + start; + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + + String start_string = line.substr(0, start) + "("; + for (int i = 0; i < parts.size(); i++) { + start_string += parts[i].strip_edges().trim_prefix("var "); + if (i != parts.size() - 1) { + start_string += ", "; + } + } + line = start_string + ")" + line.substr(end + start); + } + } + + // -- yield(this, \"timeout\") -> await this.timeout GDScript + if (line.find("yield(") != -1) { + int start = line.find("yield("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "await " + parts[0] + "." + parts[1].replace("\"", "").replace("\'", "").replace(" ", "") + line.substr(end + start); + } + } + } + + // -- parse_json( AA ) -> TODO Object + if (line.find("parse_json(") != -1) { + int start = line.find("parse_json("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + line = line.substr(0, start) + "JSON.new().stringify(" + connect_arguments(parts, 0) + ")" + line.substr(end + start); + } + } + + // -- .xform(Vector3(a,b,c)) -> * Vector3(a,b,c) Transform + if (line.find(".xform(") != -1) { + int start = line.find(".xform("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 1) { + line = line.substr(0, start) + " * " + parts[0] + line.substr(end + start); + } + } + } + + // -- .xform_inv(Vector3(a,b,c)) -> / Vector3(a,b,c) Transform + if (line.find(".xform_inv(") != -1) { + int start = line.find(".xform_inv("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 1) { + line = line.substr(0, start) + " / " + parts[0] + line.substr(end + start); + } + } + } + + // -- connect(,,,things) -> connect(,Callable(,),things) Object + if (line.find("connect(") != -1) { + int start = line.find("connect("); + // Protection from disconnect + if (start == 0 || line.get(start - 1) != 's') { + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "connect(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + } + // -- disconnect(a,b,c) -> disconnect(a,Callable(b,c)) Object + if (line.find("disconnect(") != -1) { + int start = line.find("disconnect("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "disconnect(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- is_connected(a,b,c) -> is_connected(a,Callable(b,c)) Object + if (line.find("is_connected(") != -1) { + int start = line.find("is_connected("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "is_connected(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- start(a,b,c) -> start(a,Callable(b,c)) Thread + if (line.find("start(") != -1) { + int start = line.find("start("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "start(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + // -- func _init(p_x:int)->void: -> func _init(p_x:int): Object # https://github.com/godotengine/godot/issues/50589 + if (line.find(" _init(") != -1) { + int start = line.find(" _init("); + int end = line.rfind(":") + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + line = line.substr(0, start) + " _init(" + connect_arguments(parts, 0) + "):" + line.substr(end + start); + } + } + // assert(speed < 20, str(randi()%10)) -> assert(speed < 20) #,str(randi()%10)) GDScript - GDScript bug constant message + if (line.find("assert(") != -1) { + int start = line.find("assert("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "assert(" + parts[0] + ") " + line.substr(end + start) + "#," + parts[1] + ")"; + } + } + } + // create_from_image(aa, bb) -> create_from_image(aa) #, bb ImageTexture + if (line.find("create_from_image(") != -1) { + int start = line.find("create_from_image("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 2) { + line = line.substr(0, start) + "create_from_image(" + parts[0] + ") " + "#," + parts[1] + line.substr(end + start); + } + } + } + // set_cell_item(a, b, c, d ,e) -> set_cell_item(Vector3(a, b, c), d ,e) + if (line.find("set_cell_item(") != -1) { + int start = line.find("set_cell_item("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() > 2) { + line = line.substr(0, start) + "set_cell_item( Vector3(" + parts[0] + "," + parts[1] + "," + parts[2] + ") " + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + // get_cell_item(a, b, c) -> get_cell_item(Vector3i(a, b, c)) + if (line.find("get_cell_item(") != -1) { + int start = line.find("get_cell_item("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "get_cell_item(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // get_cell_item_orientation(a, b, c) -> get_cell_item_orientation(Vector3i(a, b, c)) + if (line.find("get_cell_item_orientation(") != -1) { + int start = line.find("get_cell_item_orientation("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "get_cell_item_orientation(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + + // TODO - add_surface_from_arrays - additional 4 argument + // ENetMultiplayerPeer.create_client - additional argument + // ENetMultiplayerPeer.create_server - additional argument + // Translation.get_message (and similar) + // TreeItem.move_after() - new argument + // TreeItem.move_before() - new argument + // UndoRedo.commit_action() - additional argument + + if (old_line != line) { + found_things.append(simple_line_formatter(current_line, old_line, line)); + } + } + + return found_things; +} + +void ProjectConverter3To4::rename_csharp_functions(String &file_content) { + // Custom renaming, each rule needs to be set manually + // Don't forget to put validate each rule in validate_conversion function + Vector<String> lines = file_content.split("\n"); + + for (String &line : lines) { + // TODO maybe this can be changed to normal rule + line = line.replace("OS.GetWindowSafeArea()", "DisplayServer.ScreenGetUsableRect()"); + + // -- Connect(,,,things) -> Connect(,Callable(,),things) Object + if (line.find("Connect(") != -1) { + int start = line.find("Connect("); + // Protection from disconnect + if (start == 0 || line.get(start - 1) != 's') { + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "Connect(" + parts[0] + ",new Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + } + // -- Disconnect(a,b,c) -> Disconnect(a,Callable(b,c)) Object + if (line.find("Disconnect(") != -1) { + int start = line.find("Disconnect("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "Disconnect(" + parts[0] + ",new Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- IsConnected(a,b,c) -> IsConnected(a,Callable(b,c)) Object + if (line.find("IsConnected(") != -1) { + int start = line.find("IsConnected("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "IsConnected(" + parts[0] + ",new Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + } + + // Collect vector to string + file_content = ""; + for (int i = 0; i < lines.size(); i++) { + file_content += lines[i]; + + if (i != lines.size() - 1) { + file_content += "\n"; + } + } +}; + +// This is almost 1:1 copy of function which rename gdscript functions +Vector<String> ProjectConverter3To4::check_for_rename_csharp_functions(Vector<String> &file_content) { + int current_line = 1; + + Vector<String> found_things; + + for (String &line : file_content) { + String old_line = line; + + // TODO maybe this can be changed to normal rule + line = line.replace("OS.GetWindowSafeArea()", "DisplayServer.ScreenGetUsableRect()"); + + // -- Connect(,,,things) -> connect(,Callable(,),things) Object + if (line.find("Connect(") != -1) { + int start = line.find("Connect("); + // Protection from disconnect + if (start == 0 || line.get(start - 1) != 's') { + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() >= 3) { + line = line.substr(0, start) + "Connect(" + parts[0] + ",new Callable(" + parts[1] + "," + parts[2] + ")" + connect_arguments(parts, 3) + ")" + line.substr(end + start); + } + } + } + } + // -- Disconnect(a,b,c) -> Disconnect(a,Callable(b,c)) Object + if (line.find("Disconnect(") != -1) { + int start = line.find("Disconnect("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "Disconnect(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + // -- IsConnected(a,b,c) -> IsConnected(a,Callable(b,c)) Object + if (line.find("IsConnected(") != -1) { + int start = line.find("IsConnected("); + int end = get_end_parenthess(line.substr(start)) + 1; + if (end > -1) { + Vector<String> parts = parse_arguments(line.substr(start, end)); + if (parts.size() == 3) { + line = line.substr(0, start) + "IsConnected(" + parts[0] + ",Callable(" + parts[1] + "," + parts[2] + "))" + line.substr(end + start); + } + } + } + + if (old_line != line) { + found_things.append(simple_line_formatter(current_line, old_line, line)); + } + } + + return found_things; +} + +void ProjectConverter3To4::rename_gdscript_keywords(String &file_content){ + { RegEx reg_tool = RegEx("([\n]+)tool"); +CRASH_COND(!reg_tool.is_valid()); +file_content = reg_tool.sub(file_content, "$1@tool", true); +RegEx reg_tool2 = RegEx("^tool"); +CRASH_COND(!reg_tool2.is_valid()); +file_content = reg_tool2.sub(file_content, "@tool", true); +} +{ + RegEx reg_export = RegEx("([\n\t]+)export\\b"); + CRASH_COND(!reg_export.is_valid()); + file_content = reg_export.sub(file_content, "$1@export", true); + RegEx reg_export2 = RegEx("^export"); + CRASH_COND(!reg_export2.is_valid()); + file_content = reg_export2.sub(file_content, "@export", true); +} +{ + RegEx reg_onready = RegEx("([\n]+)onready"); + CRASH_COND(!reg_onready.is_valid()); + file_content = reg_onready.sub(file_content, "$1@onready", true); + RegEx reg_onready2 = RegEx("^onready"); + CRASH_COND(!reg_onready2.is_valid()); + file_content = reg_onready2.sub(file_content, "@onready", true); +} +{ + RegEx reg_master = RegEx("([\n]+)master func"); + CRASH_COND(!reg_master.is_valid()); + file_content = reg_master.sub(file_content, "$1@rpc(any) func", true); + RegEx reg_master2 = RegEx("^master func"); + CRASH_COND(!reg_master2.is_valid()); + file_content = reg_master2.sub(file_content, "@rpc(any) func", true); +} +{ + RegEx reg_puppet = RegEx("([\n]+)puppet func"); + CRASH_COND(!reg_puppet.is_valid()); + file_content = reg_puppet.sub(file_content, "$1@rpc(auth) func", true); + RegEx reg_puppet2 = RegEx("^puppet func"); + CRASH_COND(!reg_puppet2.is_valid()); + file_content = reg_puppet2.sub(file_content, "@rpc(auth) func", true); +} +{ + RegEx reg_remote = RegEx("([\n]+)remote func"); + CRASH_COND(!reg_remote.is_valid()); + file_content = reg_remote.sub(file_content, "$1@rpc(any) func", true); + RegEx reg_remote2 = RegEx("^remote func"); + CRASH_COND(!reg_remote2.is_valid()); + file_content = reg_remote2.sub(file_content, "@rpc(any) func", true); +} +{ + RegEx reg_remotesync = RegEx("([\n]+)remotesync func"); + CRASH_COND(!reg_remotesync.is_valid()); + file_content = reg_remotesync.sub(file_content, "$1@rpc(any,sync) func", true); + RegEx reg_remotesync2 = RegEx("^remotesync func"); + CRASH_COND(!reg_remotesync2.is_valid()); + file_content = reg_remotesync2.sub(file_content, "@rpc(any,sync) func", true); +} +{ + RegEx reg_sync = RegEx("([\n]+)sync func"); + CRASH_COND(!reg_sync.is_valid()); + file_content = reg_sync.sub(file_content, "$1@rpc(any,sync) func", true); + RegEx reg_sync2 = RegEx("^sync func"); + CRASH_COND(!reg_sync2.is_valid()); + file_content = reg_sync2.sub(file_content, "@rpc(any,sync) func", true); +} +{ + RegEx reg_puppetsync = RegEx("([\n]+)puppetsync func"); + CRASH_COND(!reg_puppetsync.is_valid()); + file_content = reg_puppetsync.sub(file_content, "$1@rpc(auth,sync) func", true); + RegEx reg_puppetsync2 = RegEx("^puppetsync func"); + CRASH_COND(!reg_puppetsync2.is_valid()); + file_content = reg_puppetsync2.sub(file_content, "@rpc(auth,sync) func", true); +} +{ + RegEx reg_mastersync = RegEx("([\n]+)mastersync func"); + CRASH_COND(!reg_mastersync.is_valid()); + file_content = reg_mastersync.sub(file_content, "$1@rpc(any,sync) func", true); + RegEx reg_mastersync2 = RegEx("^mastersync func"); + CRASH_COND(!reg_mastersync2.is_valid()); + file_content = reg_mastersync2.sub(file_content, "@rpc(any,sync) func", true); +} +} +; + +Vector<String> ProjectConverter3To4::check_for_rename_gdscript_keywords(Vector<String> &file_content) { + Vector<String> found_things; + + int current_line = 1; + + for (String &line : file_content) { + String old; + old = line; + { + RegEx reg_tool2 = RegEx("^tool"); + CRASH_COND(!reg_tool2.is_valid()); + line = reg_tool2.sub(line, "@tool", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "tool", "@tool", line)); + } + old = line; + { + RegEx reg_export = RegEx("([\t]+)export\\b"); + CRASH_COND(!reg_export.is_valid()); + line = reg_export.sub(line, "$1@export", true); + RegEx reg_export2 = RegEx("^export"); + CRASH_COND(!reg_export2.is_valid()); + line = reg_export2.sub(line, "@export", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "export", "@export", line)); + } + old = line; + { + RegEx reg_onready2 = RegEx("^onready"); + CRASH_COND(!reg_onready2.is_valid()); + line = reg_onready2.sub(line, "@onready", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "onready", "@onready", line)); + } + old = line; + { + RegEx reg_master2 = RegEx("^master func"); + CRASH_COND(!reg_master2.is_valid()); + line = reg_master2.sub(line, "@rpc(any) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "master func", "@rpc(any) func", line)); + } + old = line; + { + RegEx reg_puppet2 = RegEx("^puppet func"); + CRASH_COND(!reg_puppet2.is_valid()); + line = reg_puppet2.sub(line, "@rpc(auth) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "puppet func", "@rpc(auth) func", line)); + } + old = line; + { + RegEx reg_remote2 = RegEx("^remote func"); + CRASH_COND(!reg_remote2.is_valid()); + line = reg_remote2.sub(line, "@rpc(any) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "remote func", "@rpc(any) func", line)); + } + old = line; + { + RegEx reg_remotesync2 = RegEx("^remotesync func"); + CRASH_COND(!reg_remotesync2.is_valid()); + line = reg_remotesync2.sub(line, "@rpc(any,sync) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "remotesync func", "@rpc(any,sync) func", line)); + } + old = line; + { + RegEx reg_sync2 = RegEx("^sync func"); + CRASH_COND(!reg_sync2.is_valid()); + line = reg_sync2.sub(line, "@rpc(any,sync) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "sync func", "@rpc(any,sync) func", line)); + } + old = line; + { + RegEx reg_puppetsync2 = RegEx("^puppetsync func"); + CRASH_COND(!reg_puppetsync2.is_valid()); + line = reg_puppetsync2.sub(line, "@rpc(auth,sync) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "puppetsync func", "@rpc(any,sync) func", line)); + } + old = line; + { + RegEx reg_mastersync2 = RegEx("^mastersync func"); + CRASH_COND(!reg_mastersync2.is_valid()); + line = reg_mastersync2.sub(line, "@rpc(any,sync) func", true); + } + if (old != line) { + found_things.append(line_formatter(current_line, "mastersync", "@rpc(any,sync) func", line)); + } + old = line; + + current_line++; + } + + return found_things; +} + +void ProjectConverter3To4::custom_rename(String &file_content, String from, String to) { + RegEx reg = RegEx(String("\\b") + from + "\\b"); + CRASH_COND(!reg.is_valid()); + file_content = reg.sub(file_content, to, true); +}; + +Vector<String> ProjectConverter3To4::check_for_custom_rename(Vector<String> &file_content, String from, String to) { + Vector<String> found_things; + + RegEx reg = RegEx(String("\\b") + from + "\\b"); + CRASH_COND(!reg.is_valid()); + + int current_line = 1; + for (String &line : file_content) { + Array reg_match = reg.search_all(line); + if (reg_match.size() > 0) { + found_things.append(line_formatter(current_line, from.replace("\\.", "."), to, line)); // Without replacing it will print "\.shader" instead ".shader" + } + current_line++; + } + return found_things; +} + +void ProjectConverter3To4::rename_common(const char *array[][2], String &file_content) { + int current_index = 0; + while (array[current_index][0]) { + RegEx reg = RegEx(String("\\b") + array[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + file_content = reg.sub(file_content, array[current_index][1], true); + current_index++; + } +} + +// Common renaming, +Vector<String> ProjectConverter3To4::check_for_rename_common(const char *array[][2], Vector<String> &file_content) { + int current_index = 0; + + Vector<String> found_things; + + while (array[current_index][0]) { + RegEx reg = RegEx(String("\\b") + array[current_index][0] + "\\b"); + CRASH_COND(!reg.is_valid()); + + int current_line = 1; + for (String &line : file_content) { + Array reg_match = reg.search_all(line); + if (reg_match.size() > 0) { + found_things.append(line_formatter(current_line, array[current_index][0], array[current_index][1], line)); + } + current_line++; + } + current_index++; + } + return found_things; +} + +// Formats data to print them into user console when trying to convert data +String ProjectConverter3To4::line_formatter(int current_line, String from, String to, String line) { + if (from.size() > 200) { + from = from.substr(0, 197) + "..."; + } + if (to.size() > 200) { + to = to.substr(0, 197) + "..."; + } + if (line.size() > 400) { + line = line.substr(0, 397) + "..."; + } + return String("Line (") + itos(current_line) + ") " + from.replace("\r", "").replace("\n", "") + " -> " + to.replace("\r", "").replace("\n", "") + " - LINE \"\"\" " + line.replace("\r", "").replace("\n", "").strip_edges() + " \"\"\""; +} + +String ProjectConverter3To4::simple_line_formatter(int current_line, String old_line, String line) { + if (old_line.size() > 1000) { + old_line = old_line.substr(0, 997) + "..."; + } + if (line.size() > 1000) { + line = line.substr(0, 997) + "..."; + } + return String("Line (") + itos(current_line) + ") - FULL LINES - \"\"\"" + old_line.replace("\r", "").replace("\n", "").strip_edges() + "\"\"\" =====> \"\"\" " + line.replace("\r", "").replace("\n", "").strip_edges() + " \"\"\""; +} + +#else // No regex. + +int ProjectConverter3To4::convert() { + ERR_FAIL_V_MSG(ERROR_CODE, "Can't run converter for Godot 3.x projects as RegEx module is disabled."); +} + +int ProjectConverter3To4::validate_conversion() { + ERR_FAIL_V_MSG(ERROR_CODE, "Can't validate conversion for Godot 3.x projects as RegEx module is disabled."); +} + +#endif // MODULE_REGEX_ENABLED diff --git a/editor/project_converter_3_to_4.h b/editor/project_converter_3_to_4.h new file mode 100644 index 0000000000..95239666e0 --- /dev/null +++ b/editor/project_converter_3_to_4.h @@ -0,0 +1,83 @@ +/*************************************************************************/ +/* project_converter_3_to_4.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef PROJECT_CONVERTER_3_TO_4_H +#define PROJECT_CONVERTER_3_TO_4_H + +#include "core/core_bind.h" +#include "core/io/file_access.h" +#include "core/object/ref_counted.h" +#include "core/string/ustring.h" + +class ProjectConverter3To4 { + void rename_enums(String &file_content); + Vector<String> check_for_rename_enums(Vector<String> &file_content); + + void rename_classes(String &file_content); + Vector<String> check_for_rename_classes(Vector<String> &file_content); + + void rename_gdscript_functions(String &file_content); + Vector<String> check_for_rename_gdscript_functions(Vector<String> &file_content); + + void rename_csharp_functions(String &file_content); + Vector<String> check_for_rename_csharp_functions(Vector<String> &file_content); + + void rename_gdscript_keywords(String &file_content); + Vector<String> check_for_rename_gdscript_keywords(Vector<String> &file_content); + + void custom_rename(String &file_content, String from, String to); + Vector<String> check_for_custom_rename(Vector<String> &file_content, String from, String to); + + void rename_common(const char *array[][2], String &file_content); + Vector<String> check_for_rename_common(const char *array[][2], Vector<String> &file_content); + + Vector<String> check_for_files(); + + Vector<String> parse_arguments(const String &line); + int get_end_parenthess(const String &line) const; + String connect_arguments(const Vector<String> &line, int from, int to = -1) const; + String get_starting_space(const String &line) const; + String get_object_of_execution(const String &line) const; + + String line_formatter(int current_line, String from, String to, String line); + String simple_line_formatter(int current_line, String old_line, String line); + + bool test_single_array(const char *array[][2], bool ignore_second_check = false); + bool test_conversion_single_additional(String name, String expected, void (ProjectConverter3To4::*func)(String &), String what); + bool test_conversion_single_normal(String name, String expected, const char *array[][2], String what); + bool test_array_names(); + bool test_conversion(); + +public: + int validate_conversion(); + int convert(); +}; + +#endif // PROJECT_CONVERTER_3_TO_4_H diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 7fcabb1e80..2e7b6f7476 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -1877,6 +1877,15 @@ void ProjectManager::_notification(int p_what) { search_box->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); search_box->set_clear_button_enabled(true); + create_btn->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))); + import_btn->set_icon(get_theme_icon(SNAME("Load"), SNAME("EditorIcons"))); + scan_btn->set_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); + open_btn->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons"))); + run_btn->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons"))); + rename_btn->set_icon(get_theme_icon(SNAME("Rename"), SNAME("EditorIcons"))); + erase_btn->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons"))); + erase_missing_btn->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons"))); + Engine::get_singleton()->set_editor_hint(false); } break; @@ -2644,40 +2653,48 @@ ProjectManager::ProjectManager() { tree_vb->set_custom_minimum_size(Size2(120, 120)); local_projects_hb->add_child(tree_vb); - Button *create = memnew(Button); - create->set_text(TTR("New Project")); - create->set_shortcut(ED_SHORTCUT("project_manager/new_project", TTR("New Project"), KeyModifierMask::CMD | Key::N)); - create->connect("pressed", callable_mp(this, &ProjectManager::_new_project)); - tree_vb->add_child(create); - - Button *import = memnew(Button); - import->set_text(TTR("Import")); - import->set_shortcut(ED_SHORTCUT("project_manager/import_project", TTR("Import Project"), KeyModifierMask::CMD | Key::I)); - import->connect("pressed", callable_mp(this, &ProjectManager::_import_project)); - tree_vb->add_child(import); - - Button *scan = memnew(Button); - scan->set_text(TTR("Scan")); - scan->set_shortcut(ED_SHORTCUT("project_manager/scan_projects", TTR("Scan Projects"), KeyModifierMask::CMD | Key::S)); - scan->connect("pressed", callable_mp(this, &ProjectManager::_scan_projects)); - tree_vb->add_child(scan); + const int btn_h_separation = int(6 * EDSCALE); + + create_btn = memnew(Button); + create_btn->set_text(TTR("New Project")); + create_btn->add_theme_constant_override("h_separation", btn_h_separation); + create_btn->set_shortcut(ED_SHORTCUT("project_manager/new_project", TTR("New Project"), KeyModifierMask::CMD | Key::N)); + create_btn->connect("pressed", callable_mp(this, &ProjectManager::_new_project)); + tree_vb->add_child(create_btn); + + import_btn = memnew(Button); + import_btn->set_text(TTR("Import")); + import_btn->add_theme_constant_override("h_separation", btn_h_separation); + import_btn->set_shortcut(ED_SHORTCUT("project_manager/import_project", TTR("Import Project"), KeyModifierMask::CMD | Key::I)); + import_btn->connect("pressed", callable_mp(this, &ProjectManager::_import_project)); + tree_vb->add_child(import_btn); + + scan_btn = memnew(Button); + scan_btn->set_text(TTR("Scan")); + scan_btn->add_theme_constant_override("h_separation", btn_h_separation); + scan_btn->set_shortcut(ED_SHORTCUT("project_manager/scan_projects", TTR("Scan Projects"), KeyModifierMask::CMD | Key::S)); + scan_btn->connect("pressed", callable_mp(this, &ProjectManager::_scan_projects)); + tree_vb->add_child(scan_btn); tree_vb->add_child(memnew(HSeparator)); open_btn = memnew(Button); open_btn->set_text(TTR("Edit")); + open_btn->add_theme_constant_override("h_separation", btn_h_separation); open_btn->set_shortcut(ED_SHORTCUT("project_manager/edit_project", TTR("Edit Project"), KeyModifierMask::CMD | Key::E)); open_btn->connect("pressed", callable_mp(this, &ProjectManager::_open_selected_projects_ask)); tree_vb->add_child(open_btn); run_btn = memnew(Button); run_btn->set_text(TTR("Run")); + run_btn->add_theme_constant_override("h_separation", btn_h_separation); run_btn->set_shortcut(ED_SHORTCUT("project_manager/run_project", TTR("Run Project"), KeyModifierMask::CMD | Key::R)); run_btn->connect("pressed", callable_mp(this, &ProjectManager::_run_project)); tree_vb->add_child(run_btn); rename_btn = memnew(Button); rename_btn->set_text(TTR("Rename")); + rename_btn->add_theme_constant_override("h_separation", btn_h_separation); // The F2 shortcut isn't overridden with Enter on macOS as Enter is already used to edit a project. rename_btn->set_shortcut(ED_SHORTCUT("project_manager/rename_project", TTR("Rename Project"), Key::F2)); rename_btn->connect("pressed", callable_mp(this, &ProjectManager::_rename_project)); @@ -2685,12 +2702,14 @@ ProjectManager::ProjectManager() { erase_btn = memnew(Button); erase_btn->set_text(TTR("Remove")); + erase_btn->add_theme_constant_override("h_separation", btn_h_separation); erase_btn->set_shortcut(ED_SHORTCUT("project_manager/remove_project", TTR("Remove Project"), Key::KEY_DELETE)); erase_btn->connect("pressed", callable_mp(this, &ProjectManager::_erase_project)); tree_vb->add_child(erase_btn); erase_missing_btn = memnew(Button); erase_missing_btn->set_text(TTR("Remove Missing")); + erase_missing_btn->add_theme_constant_override("h_separation", btn_h_separation); erase_missing_btn->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects)); tree_vb->add_child(erase_missing_btn); diff --git a/editor/project_manager.h b/editor/project_manager.h index 2ffe293f3b..28383e4142 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -63,8 +63,11 @@ class ProjectManager : public Control { Label *loading_label = nullptr; OptionButton *filter_option = nullptr; - Button *run_btn = nullptr; + Button *create_btn = nullptr; + Button *import_btn = nullptr; + Button *scan_btn = nullptr; Button *open_btn = nullptr; + Button *run_btn = nullptr; Button *rename_btn = nullptr; Button *erase_btn = nullptr; Button *erase_missing_btn = nullptr; diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 404199d2da..1524993bd0 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -35,6 +35,7 @@ #include "editor/editor_log.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" +#include "servers/movie_writer/movie_writer.h" ProjectSettingsEditor *ProjectSettingsEditor::singleton = nullptr; @@ -261,6 +262,7 @@ void ProjectSettingsEditor::_add_feature_overrides() { presets.insert("standalone"); presets.insert("32"); presets.insert("64"); + presets.insert("movie"); EditorExport *ee = EditorExport::get_singleton(); @@ -698,4 +700,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { import_defaults_editor->set_name(TTR("Import Defaults")); tab_container->add_child(import_defaults_editor); import_defaults_editor->connect("project_settings_changed", callable_mp(this, &ProjectSettingsEditor::queue_save)); + + MovieWriter::set_extensions_hint(); // ensure extensions are properly displayed. } diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp index e47250fcf8..a8278b9aab 100644 --- a/editor/rename_dialog.cpp +++ b/editor/rename_dialog.cpp @@ -283,7 +283,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und vbc->add_child(lbl_preview_title); lbl_preview = memnew(Label); - lbl_preview->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + lbl_preview->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); vbc->add_child(lbl_preview); // ---- Dialog related diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index b67d659efe..2e1090e6c0 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -2655,7 +2655,7 @@ void SceneTreeDock::_add_children_to_popup(Object *p_obj, int p_depth) { } int index = menu_subresources->get_item_count(); menu_subresources->add_icon_item(icon, E.name.capitalize(), EDIT_SUBRESOURCE_BASE + subresources.size()); - menu_subresources->set_item_h_offset(index, p_depth * 10 * EDSCALE); + menu_subresources->set_item_horizontal_offset(index, p_depth * 10 * EDSCALE); subresources.push_back(obj->get_instance_id()); _add_children_to_popup(obj, p_depth + 1); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 5536e09da7..86fa9222c0 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -1353,8 +1353,9 @@ void SceneTreeDialog::_cancel() { void SceneTreeDialog::_select() { if (tree->get_selected()) { - emit_signal(SNAME("selected"), tree->get_selected()->get_path()); + // The signal may cause another dialog to be displayed, so be sure to hide this one first. hide(); + emit_signal(SNAME("selected"), tree->get_selected()->get_path()); } } diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 9530a58eb2..e8561de19c 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -940,7 +940,7 @@ ScriptCreateDialog::ScriptCreateDialog() { builtin_warning_label->set_text( TTR("Note: Built-in scripts have some limitations and can't be edited using an external editor.")); vb->add_child(builtin_warning_label); - builtin_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + builtin_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); builtin_warning_label->hide(); script_name_warning_label = memnew(Label); @@ -948,12 +948,12 @@ ScriptCreateDialog::ScriptCreateDialog() { TTR("Warning: Having the script name be the same as a built-in type is usually not desired.")); vb->add_child(script_name_warning_label); script_name_warning_label->add_theme_color_override("font_color", Color(1, 0.85, 0.4)); - script_name_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + script_name_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); script_name_warning_label->hide(); template_info_label = memnew(Label); vb->add_child(template_info_label); - template_info_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + template_info_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); status_panel = memnew(PanelContainer); status_panel->set_h_size_flags(Control::SIZE_FILL); @@ -1090,7 +1090,7 @@ ScriptCreateDialog::ScriptCreateDialog() { add_child(file_browse); get_ok_button()->set_text(TTR("Create")); alert = memnew(AcceptDialog); - alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); alert->get_label()->set_custom_minimum_size(Size2(325, 60) * EDSCALE); diff --git a/editor/shader_create_dialog.cpp b/editor/shader_create_dialog.cpp index 9c322320b8..f70c46c8d8 100644 --- a/editor/shader_create_dialog.cpp +++ b/editor/shader_create_dialog.cpp @@ -184,7 +184,6 @@ void ShaderCreateDialog::_create_new() { Ref<VisualShader> visual_shader; visual_shader.instantiate(); shader = visual_shader; - visual_shader->set_engine_version(Engine::get_singleton()->get_version_info()); visual_shader->set_mode(Shader::Mode(current_mode)); } @@ -529,7 +528,7 @@ ShaderCreateDialog::ShaderCreateDialog() { builtin_warning_label->set_text( TTR("Note: Built-in shaders can't be edited using an external editor.")); vb->add_child(builtin_warning_label); - builtin_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + builtin_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); builtin_warning_label->hide(); status_panel = memnew(PanelContainer); @@ -633,7 +632,7 @@ ShaderCreateDialog::ShaderCreateDialog() { add_child(file_browse); alert = memnew(AcceptDialog); - alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); alert->get_label()->set_custom_minimum_size(Size2(325, 60) * EDSCALE); diff --git a/editor/translations/af.po b/editor/translations/af.po index 6f644867b8..ae83779422 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -218,9 +218,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Skep Vouer" @@ -378,6 +379,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Wissel Modus" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -570,7 +580,8 @@ msgstr "Beskrywing:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -658,26 +669,24 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -#, fuzzy -msgid "Plugin Name" -msgstr "Nodus Naam:" +msgid "Version Control Plugin Name" +msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -787,7 +796,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Eienskappe" @@ -2250,8 +2260,8 @@ msgid "Open" msgstr "Oop" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Eienaars van:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2565,7 +2575,7 @@ msgid "Bus Options" msgstr "Bus opsies" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliseer" @@ -2832,6 +2842,23 @@ msgid "Choose" msgstr "Kies" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakket Suksesvol Geïnstalleer!" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Leêr word gebêre:" @@ -2844,6 +2871,31 @@ msgid "Packing" msgstr "Verpak" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Stoor As" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Kon nie vouer skep nie." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Kan nie lêer vir skryf oopmaak nie:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Stoor As" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2948,12 +3000,31 @@ msgstr "Sjabloon lêer nie gevind nie:\n" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Skep Vouer" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Lêer bestaan nie." + #: editor/editor_export.cpp platform/javascript/export/export.cpp #, fuzzy -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." msgstr "Sjabloon lêer nie gevind nie:\n" #: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3137,9 +3208,9 @@ msgid "Import" msgstr "Invoer" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4273,14 +4344,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4405,6 +4468,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Nodus Naam:" @@ -4433,6 +4500,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5183,6 +5254,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Beskrywing" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5451,7 +5527,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Skep Intekening" @@ -6933,7 +7011,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Eienskappe" @@ -7221,6 +7299,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10230,6 +10320,7 @@ msgid "Points" msgstr "Skuif Gunsteling Op" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Skep Intekening" @@ -11650,8 +11741,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Hernoem AutoLaai" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12686,8 +12778,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14186,31 +14277,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14349,6 +14419,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projek Stigters" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16687,7 +16762,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Skep Intekening" @@ -17278,7 +17353,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17308,6 +17382,19 @@ msgstr "Skrap" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Skep Intekening" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Skep Intekening" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18830,10 +18917,6 @@ msgid "Could not execute on device." msgstr "Kon nie vouer skep nie." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18938,12 +19021,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Seine" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18960,6 +19047,10 @@ msgid "Could not find keystore, unable to export." msgstr "Kon nie vouer skep nie." #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18988,7 +19079,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18999,20 +19090,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Kon nie vouer skep nie." #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19025,7 +19115,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19041,7 +19131,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animasie lengte (in sekondes)." #: platform/android/export/export_plugin.cpp @@ -19050,15 +19140,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "Kon nie vouer skep nie." #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19070,7 +19157,7 @@ msgstr "Vind" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Kon nie vouer skep nie." #: platform/android/export/export_plugin.cpp @@ -19309,6 +19396,16 @@ msgstr "Anim Dupliseer Sleutels" msgid "Custom BG Color" msgstr "Anim Dupliseer Sleutels" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Sjabloon lêer nie gevind nie:\n" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19332,24 +19429,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "Kon nie vouer skep nie." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Moet 'n geldige uitbreiding gebruik." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "Kon nie vouer skep nie." +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Deursoek Klasse" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Kon nie vouer skep nie." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Opnoemings:" @@ -19424,17 +19531,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Kon nie vouer skep nie." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Kon nie vouer skep nie." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Leêr word gebêre:" #: platform/javascript/export/export.cpp @@ -19724,9 +19831,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Kon nie vouer skep nie." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Skep Intekening" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19742,20 +19868,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Nie gevind nie!" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Fout tydens storing van hulpbron!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Beskrywing" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Kon nie vouer skep nie." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ongeldige Pad." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19763,7 +19943,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19805,6 +19985,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Beskrywing" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ongeldige naam." @@ -20117,6 +20307,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Kan nie verwyder nie:\n" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20163,6 +20358,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstant" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Kon nie vouer skep nie." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ongeldige naam." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ongeldige naam." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Kan nie verwyder nie:\n" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20184,6 +20443,23 @@ msgid "Invalid product version:" msgstr "Ongeldige naam." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Moet 'n geldige uitbreiding gebruik." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20199,6 +20475,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20315,7 +20595,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -21116,13 +21397,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Skrap" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22250,12 +22534,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24808,6 +25086,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Skep Intekening" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Skep Intekening" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26188,7 +26476,7 @@ msgstr "Oorgang" msgid "Refraction" msgstr "Opnoemings:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26268,7 +26556,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Wissel Modus" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Verander Skikking Waarde-Soort" #: scene/resources/navigation_mesh.cpp @@ -26285,7 +26578,11 @@ msgid "Source Group Name" msgstr "Hulpbron" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26297,11 +26594,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Beskrywing" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26314,6 +26616,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Laai Verstek" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26330,7 +26637,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26725,6 +27032,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Skep Intekening" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26742,6 +27054,26 @@ msgstr "Lineêr" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Voorskou:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Voorskou:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Verander Skikking Waarde-Soort" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Wysig Seleksie Kurwe" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index faed43ac8f..a3fcece225 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -62,13 +62,15 @@ # Whales State <whalesstate@gmail.com>, 2022. # Mr.k <mineshtine28546271@gmail.com>, 2022. # ywmaa <ywmaa.personal@gmail.com>, 2022. +# Awab Najim <dev.djvan@gmail.com>, 2022. +# Abderrahim <abdoudido117@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-03-17 13:58+0000\n" -"Last-Translator: Mr.k <mineshtine28546271@gmail.com>\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" +"Last-Translator: Awab Najim <dev.djvan@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -77,110 +79,97 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.12-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "برنامج تشغيل الكمبيوتر اللوØÙŠ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "Ø§Ù„ØØ§Ùظة ÙØ§Ø±ØºØ©!" +msgstr "Ø§Ù„ØØ§Ùظة" #: core/bind/core_bind.cpp -#, fuzzy msgid "Current Screen" -msgstr "المشهد Ø§Ù„ØØ§Ù„ÙŠ" +msgstr "الشاشة Ø§Ù„ØØ§Ù„ية" #: core/bind/core_bind.cpp msgid "Exit Code" -msgstr "" +msgstr "Ø´ÙÙØ±Ø© الخروج" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "ØªÙØ¹ÙŠÙ„" +msgstr "ØªÙØ¹ÙŠÙ„ V-Sync" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" -msgstr "" +msgstr "V-Sync عبر المؤلÙ" #: core/bind/core_bind.cpp main/main.cpp msgid "Delta Smoothing" -msgstr "" +msgstr "سلاسة دلتا" #: core/bind/core_bind.cpp -#, fuzzy msgid "Low Processor Usage Mode" -msgstr "وضع Ø§Ù„ØªØØ±ÙŠÙƒ" +msgstr "وضع استخدام المعالج Ø§Ù„Ù…Ù†Ø®ÙØ¶" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" -msgstr "" +msgstr "وضع السكون لاستخدام المعالج Ø§Ù„Ù…Ù†Ø®ÙØ¶ (µsec)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy msgid "Keep Screen On" -msgstr "إبقاء منÙÙ‚ØªØ Ø§Ù„Ø£Ø®Ø·Ø§Ø¡ البرمجية Ù…ÙØªÙˆØØ§Ù‹" +msgstr "إبقاء الشاشة قيد التشغيل" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "ØØ¬Ù… الخطوط:" +msgstr "Ø§Ù„ØØ¯ الأدنى Ù„ØØ¬Ù… Ø§Ù„Ù†Ø§ÙØ°Ø©" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "ØØ¬Ù… الخطوط:" +msgstr "Ø§Ù„ØØ¯ الأعلى Ù„ØØ¬Ù… Ø§Ù„Ù†Ø§ÙØ°Ø©" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "Ù…ÙØ´ØºÙ„ الشاشة." +msgstr "اتجاه الشاشة" #: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp #: platform/uwp/os_uwp.cpp -#, fuzzy msgid "Window" -msgstr "Ù†Ø§ÙØ°Ø© جديدة" +msgstr "Ù†Ø§ÙØ°Ø©" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Borderless" -msgstr "البكسلات المØÙŠØ·ÙŠØ© (Ø§Ù„ØØ¯ÙˆØ¯ÙŠØ©)" +msgstr "بلا إطار" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "تمكين Ø§Ù„Ø´ÙØ§Ùية لكل بكسل" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Fullscreen" -msgstr "ØªÙØ¹ÙŠÙ„/إلغاء وضع الشاشة الكاملة" +msgstr "ملء الشاشة" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "مكبرة" #: core/bind/core_bind.cpp -#, fuzzy msgid "Minimized" -msgstr "الشروع" +msgstr "مصغرة" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" -msgstr "" +msgstr "متغير Ø§Ù„ØØ¬Ù…" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "مكان الرصيÙ" +msgstr "موقع" #: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp #: main/main.cpp modules/gridmap/grid_map.cpp @@ -191,65 +180,56 @@ msgstr "مكان الرصيÙ" #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp -#, fuzzy msgid "Size" -msgstr "Ø§Ù„ØØ¬Ù…:" +msgstr "Ø§Ù„ØØ¬Ù…" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "مبادلة Endian" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "Ø§Ù„Ù…ØØ±Ù‘ر" +msgstr "ØªÙ„Ù…ÙŠØ Ø§Ù„Ù…ØØ±Ø±" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "طباعة رسائل الخطأ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡" +msgstr "التكرارات ÙÙŠ الثانية" #: core/bind/core_bind.cpp -#, fuzzy msgid "Target FPS" -msgstr "الهدÙ" +msgstr "FPS Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©" #: core/bind/core_bind.cpp -#, fuzzy msgid "Time Scale" -msgstr "عقدة التكبير الزمني" +msgstr "مقياس الوقت" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Physics Jitter Fix" -msgstr "نسبة الإطار الÙيزيائي %" +msgstr "Ø¥ØµÙ„Ø§Ø Ø§Ù„Ø±Ø¬ÙØ§Ù† الÙيزيائي" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" msgstr "خطأ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error String" -msgstr "خطأ ÙÙŠ الØÙظ" +msgstr "سلسلة الخطأ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "خطأ ÙÙŠ الØÙظ" +msgstr "سطر الخطأ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Result" -msgstr "نتائج Ø§Ù„Ø¨ØØ«" +msgstr "النتيجة" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "الذاكرة" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -260,79 +240,71 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "Ø§Ù„ØØ¯ÙˆØ¯" #: core/command_queue_mt.cpp -#, fuzzy msgid "Command Queue" -msgstr "Command: استدارة" +msgstr "قائمة انتظار الأوامر" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "ØØ¬Ù… قائمة انتظار Multithreading (كيلو بايت)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Function" msgstr "الوظائ٠البرمجية" #: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp -#, fuzzy msgid "Data" -msgstr "مع البيانات" +msgstr "بيانات" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h -#, fuzzy +#: scene/gui/file_dialog.cpp msgid "Network" -msgstr "مل٠تعري٠الشبكة Network Profiler" +msgstr "الشبكة" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "من بعد " +msgstr "FS من بعد" #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Size" -msgstr "Ø§Ù„ØµÙØØ©: " +msgstr "ØØ¬Ù… Ø§Ù„ØµÙØØ©" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "قراءة Ø§Ù„ØµÙØØ© مسبقا" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "" +msgstr "تمكين وضع Ø§Ù„ØØ¸Ø±" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" -msgstr "وصل" +msgstr "إتصال" #: core/io/http_client.cpp msgid "Read Chunk Size" -msgstr "" +msgstr "ØØ¬Ù… قطعة القراءة" #: core/io/marshalls.cpp -#, fuzzy msgid "Object ID" -msgstr "كائنات مرسومة:" +msgstr "معر٠الكائن" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp -#, fuzzy msgid "Allow Object Decoding" -msgstr "ØªÙØ¹ÙŠÙ„ تقشير البصل" +msgstr "Ø§Ù„Ø³Ù…Ø§Ø Ø¨ÙÙƒ ترميز الكائن" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Ø±ÙØ¶ اتصالات الشبكة الجديدة" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp #, fuzzy @@ -340,52 +312,48 @@ msgid "Network Peer" msgstr "مل٠تعري٠الشبكة Network Profiler" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp -#, fuzzy msgid "Root Node" -msgstr "اسم العÙقدة الرئيسة (الجذر)" +msgstr "العÙقدة الرئيسة (الجذر)" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "وصل" +msgstr "Ø±ÙØ¶ الإتصالات الجديدة" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "نوع التØÙˆÙ‘Ù„" +msgstr "وضع التØÙˆÙŠÙ„" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" -msgstr "" +msgstr "Ø§Ù„ØØ¬Ù… الأقصى لمخزن التشÙير المؤقت" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" -msgstr "" +msgstr "Ø§Ù„ØØ¬Ù… الأقصى لمخزن المدخلات المؤقت" #: core/io/packet_peer.cpp msgid "Output Buffer Max Size" -msgstr "" +msgstr "Ø§Ù„ØØ¬Ù… الأقصى لمخزن المخرجات المؤقت" #: core/io/packet_peer.cpp msgid "Stream Peer" -msgstr "" +msgstr "قرين التسلسل" #: core/io/stream_peer.cpp msgid "Big Endian" -msgstr "" +msgstr "Endian الكبيرة" #: core/io/stream_peer.cpp msgid "Data Array" -msgstr "" +msgstr "مصÙÙˆÙØ© البيانات" #: core/io/stream_peer_ssl.cpp msgid "Blocking Handshake" -msgstr "" +msgstr "ØØ¸Ø± Ø§Ù„Ù…ØµØ§ÙØØ©" #: core/io/udp_server.cpp -#, fuzzy msgid "Max Pending Connections" -msgstr "تعديل الإتصال:" +msgstr "Ø§Ù„ØØ¯ الأقصى للاتصالات المعلقة" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -403,9 +371,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ليس هنالك بايتات كاÙية من أجل ÙÙƒ البايتات، أو الصيغة غير صØÙŠØØ©." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "مدخلات خاطئة %i (لم يتم تمريره) ÙÙŠ التعبير" +msgstr "مدخلات خاطئة %d (لم يتم تمريرها) ÙÙŠ التعبير" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -413,7 +380,7 @@ msgstr "لا يمكن استخدام self لأن النموذج ÙØ§Ø±Øº (لم Ù #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "معامل غير ØµØ§Ù„ØØ© للمشغل Ùªs و٪s و٪s." +msgstr "معامل غير ØµØ§Ù„ØØ© للمشغل %s Ùˆ %s Ùˆ %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -434,20 +401,27 @@ msgstr "عند استدعاء '%s':" #: core/math/random_number_generator.cpp #: modules/opensimplex/open_simplex_noise.cpp msgid "Seed" -msgstr "" +msgstr "Seed" #: core/math/random_number_generator.cpp -#, fuzzy msgid "State" msgstr "Ø§Ù„ØØ§Ù„Ø©" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "قائمة انتظار الرسائل" #: core/message_queue.cpp msgid "Max Size (KB)" -msgstr "" +msgstr "Ø§Ù„ØØ¬Ù… الأقصى (كيلو بايت)" + +#: core/os/input.cpp +msgid "Mouse Mode" +msgstr "وضع Ø§Ù„ÙØ£Ø±Ø©" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "استخدم المدخلات المتراكمة" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -455,98 +429,85 @@ msgid "Device" msgstr "الجهاز" #: core/os/input_event.cpp -#, fuzzy msgid "Alt" -msgstr "الكل" +msgstr "Ù…ÙØªØ§Ø Alt" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Ù…ÙØªØ§Ø Shift" #: core/os/input_event.cpp -#, fuzzy msgid "Control" -msgstr "إدارة الإصدارات (Version Control)" +msgstr "Ù…ÙØªØ§Ø Control" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "المرجعية الذاتية (Meta)" #: core/os/input_event.cpp -#, fuzzy msgid "Command" -msgstr "المجتمع" +msgstr "Ù…ÙØªØ§Ø Command" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Pressed" -msgstr "إعداد Ù…ÙØ³Ø¨Ù‚" +msgstr "ضٌغط (الزر)" #: core/os/input_event.cpp -#, fuzzy msgid "Scancode" -msgstr "ÙØØµ" +msgstr "رمز Ø§Ù„Ù…ÙØªØ§Ø" #: core/os/input_event.cpp -#, fuzzy msgid "Physical Scancode" -msgstr "الزر الÙيزيائي" +msgstr "رمز Ø§Ù„Ù…ÙØªØ§Ø الÙيزيائي" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "يونيكود" #: core/os/input_event.cpp msgid "Echo" -msgstr "" +msgstr "صدى" #: core/os/input_event.cpp scene/gui/base_button.cpp -#, fuzzy msgid "Button Mask" -msgstr "زر" +msgstr "قناع الزر" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp -#, fuzzy msgid "Global Position" -msgstr "ثابت" +msgstr "الموقع العالمي" #: core/os/input_event.cpp -#, fuzzy msgid "Factor" -msgstr "Ù…ÙØªØ¬Ù‡" +msgstr "المعامل" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "مؤشر Index زر Ø§Ù„ÙØ£Ø±Ø©:" +msgstr "مؤشر الزر" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "نقرتين متتاليتين" #: core/os/input_event.cpp msgid "Tilt" -msgstr "" +msgstr "إمالة" #: core/os/input_event.cpp -#, fuzzy msgid "Pressure" -msgstr "إعداد Ù…ÙØ³Ø¨Ù‚" +msgstr "الضغط" #: core/os/input_event.cpp -#, fuzzy msgid "Relative" -msgstr "نسبية Ø§Ù„Ù…ØØ§Ø°Ø§Ø©" +msgstr "نسبي" #: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Speed" -msgstr "السرعة:" +msgstr "السرعة" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp @@ -554,14 +515,12 @@ msgid "Axis" msgstr "Ù…ØØ§ÙˆØ±" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "القيمة المثبتة" +msgstr "قيمة المØÙˆØ±" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Index" -msgstr "الÙهرس:" +msgstr "المؤشر" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -572,63 +531,55 @@ msgstr "إجراء" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "القوة" #: core/os/input_event.cpp msgid "Delta" -msgstr "" +msgstr "دلتا" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "تغير" +msgstr "قناة" #: core/os/input_event.cpp main/main.cpp -#, fuzzy msgid "Message" -msgstr "اقترا٠التعديلا" +msgstr "الرسالة" #: core/os/input_event.cpp -#, fuzzy msgid "Pitch" -msgstr "ØØ¯Ù‘Ø©:" +msgstr "Ø§Ù„ØØ¯Ù‘Ø©" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Velocity" -msgstr "ØªØØ±ÙŠÙƒ المسار لليمين" +msgstr "التسارع" #: core/os/input_event.cpp msgid "Instrument" -msgstr "" +msgstr "أداة" #: core/os/input_event.cpp -#, fuzzy msgid "Controller Number" -msgstr "رقم الخط:" +msgstr "رقم ÙˆØØ¯Ø© التØÙƒÙ…" #: core/os/input_event.cpp msgid "Controller Value" -msgstr "" +msgstr "قيمة/(رقم تعريÙ) ÙˆØØ¯Ø© التØÙƒÙ…" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "إجراء" +msgstr "التطبيق" #: core/project_settings.cpp main/main.cpp -#, fuzzy msgid "Config" -msgstr "تعديل اللقطة" +msgstr "تعديل" #: core/project_settings.cpp -#, fuzzy msgid "Project Settings Override" -msgstr "إعدادات المشروع..." +msgstr "تجاوز إعدادات المشروع" #: core/project_settings.cpp core/resource.cpp #: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp @@ -651,7 +602,8 @@ msgstr "الوصÙ" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "تشغيل" @@ -661,39 +613,36 @@ msgid "Main Scene" msgstr "المشهد الرئيس" #: core/project_settings.cpp -#, fuzzy msgid "Disable stdout" -msgstr "تعطيل البلاط التلقائي Autotile" +msgstr "تعطيل stdout" #: core/project_settings.cpp -#, fuzzy msgid "Disable stderr" -msgstr "عنصر معطّل" +msgstr "تعطيل stderr" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "استخدم دليل بيانات المشروع المخÙية" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "استخدم دليل المستخدم المخصص" #: core/project_settings.cpp msgid "Custom User Dir Name" -msgstr "" +msgstr "اسم دليل المستخدم المخصص" #: core/project_settings.cpp main/main.cpp #: platform/javascript/export/export.cpp platform/osx/export/export.cpp #: platform/uwp/os_uwp.cpp -#, fuzzy msgid "Display" -msgstr "إظهار الكل" +msgstr "عرض" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp #: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp msgid "Width" -msgstr "" +msgstr "العرض" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp @@ -701,23 +650,20 @@ msgstr "" #: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp #: scene/resources/font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp -#, fuzzy msgid "Height" -msgstr "ضوء" +msgstr "Ø§Ù„Ø§Ø±ØªÙØ§Ø¹" #: core/project_settings.cpp msgid "Always On Top" -msgstr "" +msgstr "عرض Ù†Ø§ÙØ°Ø© المشروع امام كل Ø§Ù„Ù†ÙˆØ§ÙØ°" #: core/project_settings.cpp -#, fuzzy msgid "Test Width" -msgstr "بالعرض يساراً" +msgstr "عرض الاختبار" #: core/project_settings.cpp -#, fuzzy msgid "Test Height" -msgstr "أختبار" +msgstr "Ø§Ø±ØªÙØ§Ø¹ الاختبار" #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp @@ -725,9 +671,8 @@ msgid "Audio" msgstr "الصوت" #: core/project_settings.cpp -#, fuzzy msgid "Default Bus Layout" -msgstr "تØÙ…يل نسق المسار Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ." +msgstr "تنسيق الناقل Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp @@ -737,98 +682,88 @@ msgid "Editor" msgstr "Ø§Ù„Ù…ØØ±Ù‘ر" #: core/project_settings.cpp -#, fuzzy msgid "Main Run Args" -msgstr "معاملات المشهد الرئيس:" +msgstr "معاملات المشهد الرئيس" + +#: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "المسار للمشهد:" #: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "Ø§Ù„Ø¨ØØ« ÙÙŠ امتدادات الملÙ" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" - -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "إدارة الإصدارات (Version Control)" +msgstr "مسار Ø§Ù„Ø¨ØØ« ÙÙŠ قوالب النص البرمجي" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "التØÙ…يل التلقائي عند بدء التشغيل" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "اسم Ø§Ù„Ø¥Ø¶Ø§ÙØ©:" +msgid "Version Control Plugin Name" +msgstr "إدارة الإصدارات (Version Control)" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "أض٠مدخله" +msgstr "إدخال" #: core/project_settings.cpp msgid "UI Accept" -msgstr "" +msgstr "قبول" #: core/project_settings.cpp -#, fuzzy msgid "UI Select" -msgstr "ØØ¯Ø¯" +msgstr "ØªØØ¯ÙŠØ¯" #: core/project_settings.cpp -#, fuzzy msgid "UI Cancel" msgstr "إلغاء" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Next" -msgstr "مسار التركيز" +msgstr "ØØ¯Ø¯ التالي" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Prev" -msgstr "مسار التركيز" +msgstr "ØØ¯Ø¯ السابق" #: core/project_settings.cpp -#, fuzzy msgid "UI Left" -msgstr "ÙÙŠ الأعلى يساراً" +msgstr "يسار" #: core/project_settings.cpp -#, fuzzy msgid "UI Right" -msgstr "ÙÙŠ الأعلى يميناً" +msgstr "يمين" #: core/project_settings.cpp msgid "UI Up" -msgstr "" +msgstr "أعلى" #: core/project_settings.cpp -#, fuzzy msgid "UI Down" msgstr "أسÙÙ„" #: core/project_settings.cpp -#, fuzzy msgid "UI Page Up" -msgstr "Ø§Ù„ØµÙØØ©: " +msgstr "Ø§Ù„ØµÙØØ© السابقة / up" #: core/project_settings.cpp msgid "UI Page Down" -msgstr "" +msgstr "Ø§Ù„ØµÙØØ© التالية / down" #: core/project_settings.cpp msgid "UI Home" -msgstr "" +msgstr "الرئيسي (home)" #: core/project_settings.cpp -#, fuzzy msgid "UI End" -msgstr "ÙÙŠ النهاية" +msgstr "النهاية" #: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp #: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp @@ -838,9 +773,8 @@ msgstr "ÙÙŠ النهاية" #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp -#, fuzzy msgid "Physics" -msgstr " (Ùيزيائي)" +msgstr "الÙيزياء" #: core/project_settings.cpp editor/editor_settings.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -850,7 +784,7 @@ msgstr " (Ùيزيائي)" #: scene/3d/physics_body.cpp scene/resources/world.cpp #: servers/physics/space_sw.cpp servers/physics_server.cpp msgid "3D" -msgstr "" +msgstr "ثلاثي الأبعاد 3D" #: core/project_settings.cpp #, fuzzy @@ -866,9 +800,8 @@ msgstr "إنشاء متصادم تراميش قريب" #: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp #: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp -#, fuzzy msgid "Rendering" -msgstr "Ù…ÙØØ±Ùƒ الإخراج البصري:" +msgstr "استدعاء" #: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp @@ -878,17 +811,17 @@ msgstr "Ù…ÙØØ±Ùƒ الإخراج البصري:" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "جودة" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" -msgstr "Ù…Ø±Ø´ØØ§Øª:" +msgstr "Ù…Ø±Ø´ØØ§Øª" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" -msgstr "" +msgstr "Ø´ØØ° Ø§Ù„ÙƒØ«Ø§ÙØ©" #: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp @@ -904,9 +837,8 @@ msgstr "تصØÙŠØ الأخطاء" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp -#, fuzzy msgid "Settings" -msgstr "الإعدادات:" +msgstr "الإعدادات" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp @@ -914,14 +846,12 @@ msgid "Profiler" msgstr "Ù…Ùنشئ Ø§Ù„Ù…Ù„ÙØ§Øª التعريÙية Profiler" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "عمل دالة" +msgstr "أقصى عمل" #: core/project_settings.cpp scene/3d/vehicle_body.cpp -#, fuzzy msgid "Compression" -msgstr "ØªØØ¯ÙŠØ¯ التعبير" +msgstr "ضغط" #: core/project_settings.cpp #, fuzzy @@ -934,15 +864,15 @@ msgstr "" #: core/project_settings.cpp msgid "Long Distance Matching" -msgstr "" +msgstr "مطابقة Ø§Ù„Ù…Ø³Ø§ÙØ§Øª الطويلة" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "ضغط المستوى" #: core/project_settings.cpp msgid "Window Log Size" -msgstr "" +msgstr "ØØ¬Ù… Ù†Ø§ÙØ°Ø© سجل" #: core/project_settings.cpp msgid "Zlib" @@ -954,20 +884,19 @@ msgstr "" #: core/project_settings.cpp platform/android/export/export.cpp msgid "Android" -msgstr "" +msgstr "أندرويد" #: core/project_settings.cpp msgid "Modules" -msgstr "" +msgstr "ÙˆØØ¯Ø§Øª" #: core/register_core_types.cpp msgid "TCP" msgstr "" #: core/register_core_types.cpp -#, fuzzy msgid "Connect Timeout Seconds" -msgstr "الاتصالات لدالة:" +msgstr "Ù†ÙØ° وقت الإتصال" #: core/register_core_types.cpp msgid "Packet Peer Stream" @@ -982,9 +911,8 @@ msgid "SSL" msgstr "" #: core/register_core_types.cpp main/main.cpp -#, fuzzy msgid "Certificates" -msgstr "القمم:" +msgstr "الشهادات" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp @@ -993,9 +921,8 @@ msgid "Resource" msgstr "مورد" #: core/resource.cpp -#, fuzzy msgid "Local To Scene" -msgstr "اغلاق المشهد" +msgstr "مشهد Ù…ØÙ„ÙŠ" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp @@ -1005,22 +932,20 @@ msgid "Path" msgstr "المسار" #: core/script_language.cpp -#, fuzzy msgid "Source Code" -msgstr "مصدر" +msgstr "مصدر الرمز" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" msgstr "Ù…ØÙ„ÙŠ" #: core/translation.cpp -#, fuzzy msgid "Test" -msgstr "أختبار" +msgstr "إختبار" #: core/translation.cpp scene/resources/font.cpp msgid "Fallback" -msgstr "" +msgstr "تقهقر" #: core/ustring.cpp scene/resources/segment_shape_2d.cpp msgid "B" @@ -1406,9 +1331,8 @@ msgid "Anim Clips:" msgstr "مقاطع الرسوم Ø§Ù„Ù…ØªØØ±ÙƒØ©:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "تغيير مسار الطريق/المقطع" +msgstr "تغيير مسار مقطع Ø§Ù„ØØ±ÙƒØ©/الانيميشن" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." @@ -1424,16 +1348,15 @@ msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "وضع Ø§Ù„ØªÙØ§Ù الØÙ„قة (استكمال النهاية مع البداية ÙÙŠ الØÙ„قة)" +msgstr "وضع Ø§Ù„ØªÙØ§Ù الØÙ„قة (مزج النهاية مع البداية ÙÙŠ الØÙ„قة)" #: editor/animation_track_editor.cpp msgid "Remove this track." msgstr "إزالة هذا المسار." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "الوقت(ثواني): " +msgstr "الوقت(ثواني):" #: editor/animation_track_editor.cpp #, fuzzy @@ -1713,9 +1636,8 @@ msgid "Add Method Track Key" msgstr "Ø£Ø¶Ù’Ù Ù…ÙØªØ§Ø لمقطع الدالة (Method Track)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "دالة لم توجد ÙÙŠ الكائن: " +msgstr "دالة لم توجد ÙÙŠ الكائن:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2320,8 +2242,8 @@ msgid "Open" msgstr "Ø¥ÙØªØ" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ملاك:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2539,7 +2461,7 @@ msgstr "ÙØ´Ù„ استخراج Ø§Ù„Ù…Ù„ÙØ§Øª التالية من Ø§Ù„ØØ²Ù…Ø© \" #: editor/editor_asset_installer.cpp msgid "(and %s more files)" -msgstr "(Ùˆ %s Ù…Ù„ÙØ§Øª اكثر)" +msgstr "(Ùˆ %s Ù…Ù„ÙØ§Øª اخرى)" #: editor/editor_asset_installer.cpp msgid "Asset \"%s\" installed successfully!" @@ -2623,7 +2545,7 @@ msgid "Bus Options" msgstr "‎خيارات مسار الصوت (BUS)" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "تكرير" @@ -2880,6 +2802,25 @@ msgid "Choose" msgstr "إختر" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "نسخ مسار العÙقدة" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "اكتمل بنجاØ." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "ÙØ´Ù„:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "تخزين الملÙ:" @@ -2892,6 +2833,31 @@ msgid "Packing" msgstr "ÙŠÙŽØØ²Ù…\"ينتج المل٠المضغوط\"" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "ØÙظ بأسم" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "لا يمكن إنشاء المجلد." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "لا يمكن ÙØªØ المل٠للكتابة:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "ØÙظ بأسم" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2962,9 +2928,8 @@ msgid "Release" msgstr "الإصدار" #: editor/editor_export.cpp -#, fuzzy msgid "Binary Format" -msgstr "Ù…ÙØ´ØºÙ‘Ù„ اللون." +msgstr "تنسيق ثنائي" #: editor/editor_export.cpp msgid "64 Bits" @@ -3012,11 +2977,33 @@ msgstr "نمودج تصØÙŠØ الأخطاء غير موجود." msgid "Custom release template not found." msgstr "قالب الإصدار المخصص ليس موجود." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "إدارة القوالب" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "مسار التصدير Ø§Ù„Ù…ÙØ²ÙˆØ¯ غير موجود:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "مل٠النموذج غير موجود:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "إدارة قوالب التصدير:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "الØÙˆØ§Ù Padding" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "لا يمكن Ù„Ù…ÙØµØ¯Ø±Ø§Øª 32-bit التي تتضمن PCK أن تكون أكبر من 4 GiB." @@ -3185,9 +3172,9 @@ msgid "Import" msgstr "استيراد" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "تصدير" @@ -3298,9 +3285,8 @@ msgid "Save a File" msgstr "ØÙظ ملÙ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Access" -msgstr "تم بشكل ناجØ!" +msgstr "الوصول (للملÙ)" #: editor/editor_file_dialog.cpp editor/editor_settings.cpp #, fuzzy @@ -3874,7 +3860,7 @@ msgstr "ينشئ الصورة المصغرة" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "هذه العميلة لا يمكن إجرائها من غير جذر/اساس رئيسي للشجرة." +msgstr "هذه العميلة لا يمكن إجرائها من غير جذر رئيسي للشجرة." #: editor/editor_node.cpp msgid "" @@ -4338,15 +4324,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "مشهد" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "المسار للمشهد:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4475,6 +4452,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "إدارة الإصدارات (Version Control)" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "إعادة التسمية" @@ -4503,6 +4484,10 @@ msgstr "تمكين/إيقا٠الوضع الخالي من الإلهاء." msgid "Add a new scene." msgstr "Ø¥Ø¶Ø§ÙØ© مشهد جديد." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "مشهد" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "اذهب الي المشهد Ø§Ù„Ù…ÙØªÙˆØ مسبقا." @@ -5184,9 +5169,8 @@ msgid "Size:" msgstr "Ø§Ù„ØØ¬Ù…:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Ø§Ù„ØµÙØØ©: " +msgstr "Ø§Ù„ØµÙØØ©:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5284,6 +5268,11 @@ msgstr "" "من ÙØ¶Ù„Ùƒ أضÙÙ’ إعداد تصدير ÙÙŠ قائمة التصدير أو عر٠إعداد تصدير موجود كقابل " "للتشغيل(عامل)." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "مشروع" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "أكتب منطقك ÙÙŠ الطريقة ()run_." @@ -5567,7 +5556,9 @@ msgid "Draw Spaces" msgstr "استدعاءات الرسم:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "تنقل" @@ -6137,9 +6128,8 @@ msgstr "الواجهة View الأمامية" #: editor/editor_settings.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp -#, fuzzy msgid "Remote Host" -msgstr "من بعد " +msgstr "المضي٠عن بعد" #: editor/editor_settings.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp @@ -7052,7 +7042,7 @@ msgstr "" #: scene/resources/material.cpp scene/resources/particles_material.cpp #: scene/resources/texture.cpp scene/resources/visual_shader.cpp msgid "Flags" -msgstr "" +msgstr "أعلام" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/animation/tween.cpp @@ -7062,7 +7052,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Ù…Ø±Ø´ØØ§Øª:" @@ -7126,9 +7116,8 @@ msgid "Octahedral Compression" msgstr "ØªØØ¯ÙŠØ¯ التعبير" #: editor/import/resource_importer_obj.cpp -#, fuzzy msgid "Optimize Mesh Flags" -msgstr "Ø§Ù„ØØ¬Ù…: " +msgstr "ØªØØ³ÙŠÙ† أعلام المجسّم" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -7330,9 +7319,8 @@ msgid "Generating Lightmaps" msgstr "انشاء خارطة الضوء" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "انشاء من اجل المجسم: " +msgstr "توليد للمجسّم:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7359,6 +7347,18 @@ msgid "Saving..." msgstr "جاري الØÙظ..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -7416,9 +7416,8 @@ msgid "Normal Map Invert Y" msgstr "ØØ¬Ù… عشوائي:" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Size Limit" -msgstr "Ø§Ù„ØØ¬Ù…: " +msgstr "Ø§Ù„ØØ¯ الأقصى Ù„Ù„ØØ¬Ù…" #: editor/import/resource_importer_texture.cpp msgid "Detect 3D" @@ -8336,9 +8335,8 @@ msgstr "" "ØªØØ¯ÙŠØ¯ الرسومية Ø§Ù„Ù…ØªØØ±ÙƒØ© الخاصة بالنهاية. سيكون ذلك Ù…Ùيداً Ù„Ù„ØØ±ÙƒØ§Øª Ø§Ù„ÙØ±Ø¹ÙŠØ©." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "الانتقال: " +msgstr "المراØÙ„ الانتقالية:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9517,7 +9515,7 @@ msgstr "قناع الانبعاث" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Solid Pixels" -msgstr "البكسيلات الأساسية (Solid Pixels)" +msgstr "البكسلات غير Ø§Ù„Ø´ÙØ§ÙØ©" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -10042,9 +10040,8 @@ msgid "Generate Visibility Rect" msgstr "توليد Rect الرؤية" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Can only set point into a ParticlesMaterial process material" -msgstr "لا يمكن إنشاء سوى نقطة ÙˆØÙŠØ¯Ø© داخل معالج المواد لـ ParticlesMaterial" +msgstr "لا يمكن ØªØØ¯ÙŠØ¯ نقطة سوى ÙÙŠ الParticlesMaterial لمعالج المواد" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Convert to CPUParticles2D" @@ -10096,9 +10093,8 @@ msgid "Volume" msgstr "ØØ¬Ù…" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "مصدر الانبعاث: " +msgstr "مصدر الانبعاث:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10333,6 +10329,7 @@ msgid "Points" msgstr "النقاط" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Ø§Ù„Ù…ÙØ¶Ù„عات" @@ -11196,15 +11193,13 @@ msgstr "ترجم" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "ÙŠÙØØ¬Ù…: " +msgstr "ØªØØ¬ÙŠÙ…:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "يترجم: " +msgstr "Ø§Ù„ØªØØ±ÙŠÙƒ:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11252,7 +11247,7 @@ msgstr "القمم:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "FPS: %d (%s جزء من الثانية)" +msgstr "عدد الإطارات ÙÙŠ الثانية: %d (%s ميلي ثانية)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -11716,7 +11711,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "هندسياً غير ØµØ§Ù„ØØŒ لا يمكن استبداله Ø¨Ø³Ø·Ø (mesh)." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "تØÙˆÙŠÙ„ إلى Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11748,19 +11744,16 @@ msgid "Sprite" msgstr "رسومية" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "التبسيط: " +msgstr "التبسيط:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "التقلص (Pixels): " +msgstr "التقلص (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "التكبير (Pixels): " +msgstr "التكبير (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -11955,7 +11948,7 @@ msgstr "{num} خط (خطوط)" #: editor/plugins/theme_editor_plugin.cpp msgid "No fonts found." -msgstr "لم يتم العثور على الخطوط." +msgstr "لا توجد خطوط." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" @@ -12712,8 +12705,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "اختر الشكل أو البلاط Ø§Ù„ÙØ±Ø¹ÙŠ Ø£Ùˆ البلاط، السابق." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "الإقليم" @@ -14257,36 +14249,10 @@ msgid "Delete preset '%s'?" msgstr "ØØ°Ù Ø§Ù„Ù…ÙØ¹Ø¯ Ù…ÙØ³Ø¨Ù‚اً '%s'ØŸ" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"أخÙÙ‚ تصدير المشروع لمنصة '%s'.\n" -"على ما يبدو قوالب التصدير Ù…Ùقودة أو غير ØµØ§Ù„ØØ©." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"أخÙÙ‚ تصدير المشروع لمنصة '%s'.\n" -"قد يعود ذلك إلى خلل تهيئة ÙÙŠ الإعدادات Ø§Ù„Ù…ÙØ¹Ø¯Ù‘Ø© Ø³Ù„ÙØ§Ù‹ أو إعدادات التصدير الخاصة " -"بك." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "تصدير الكÙÙ„" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "مسار التصدير Ø§Ù„Ù…ÙØ²ÙˆØ¯ غير موجود:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "قوالب تصدير هذه المنصة Ù…Ùقودة / ØªØ§Ù„ÙØ©:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "مسار التصدير" @@ -14434,6 +14400,11 @@ msgid "Export templates for this platform are missing:" msgstr "قوالب التصدير لهذه المنصة Ù…Ùقودة:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "مؤسسون المشروع" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "إدارة قوالب التصدير" @@ -15971,9 +15942,8 @@ msgid "Attach Node Script" msgstr "ألØÙ‚ نص برمجي للعÙقدة" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote %s:" -msgstr "من بعد " +msgstr "من بعد %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16859,7 +16829,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Ø§Ù„Ù…ÙØ¶Ù„عات" @@ -17037,9 +17007,8 @@ msgid "Disabled GDNative Singleton" msgstr "تعطيل نمط البرمجة Singleton Ù„ GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries:" -msgstr "مكتبات: " +msgstr "مكتبات:" #: modules/gdnative/nativescript/nativescript.cpp #, fuzzy @@ -17105,7 +17074,7 @@ msgstr "لا تستند الى نص برمجي" #: modules/gdscript/gdscript_functions.cpp msgid "Not based on a resource file" -msgstr "لا تستند على مل٠مورد" +msgstr "لا يعتمد على مل٠موارد" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" @@ -17484,7 +17453,6 @@ msgid "Use In Baked Light" msgstr "طبخ (إعداد) خرائط الضوء" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17514,6 +17482,19 @@ msgstr "المنتصÙ" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "تنقل" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "وضع التنقل" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "التبويب التالي" @@ -17935,18 +17916,16 @@ msgstr "" "Ø£ØµÙ„Ø Ø§Ù„Ø¹Ù‚Ø¯Ø© من ÙØ¶Ù„Ùƒ." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "أرجعت العÙقدة تسلسلاً Ù…ÙØ®Ø±Ø¬Ø§Ù‹ غير صالØ: " +msgstr "أرجعت العÙقدة تسلسلاً Ù…ÙØ®Ø±Ø¬Ø§Ù‹ غير صالØ:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "عثر على تسلسل بت ولكن ليس العقدة ÙÙŠ المكدس ,Ø§Ø±ÙØ¹ تقرير عن الخطأ!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Stack overflow with stack depth:" -msgstr "ØØ¯ÙˆØ« تجاوز للتكدس ( Stack overflow) مع عمق التكدس: " +msgstr "ØØ¯ÙˆØ« تجاوز للتكدس ( Stack overflow) مع عمق التكدس:" #: modules/visual_script/visual_script.cpp #, fuzzy @@ -18320,18 +18299,16 @@ msgid "for (elem) in (input):" msgstr "لكل (عنصر) ÙÙŠ (معلومات-الإدخال):" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Input type not iterable:" -msgstr "نوع الإدخال غير متوقع: " +msgstr "نوع الإدخال لا يمكن التكرار عليه:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" msgstr "Ø£ØµØ¨Ø Ø§Ù„Ù…Ùكرر غير ØµØ§Ù„ØØ§Ù‹" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Iterator became invalid:" -msgstr "Ø£ØµØ¨Ø Ø§Ù„Ù…Ùكرر غير ØµØ§Ù„ØØ§Ù‹: " +msgstr "Ø£ØµØ¨Ø Ø§Ù„Ù…Ùكرر غير ØµØ§Ù„ØØ§Ù‹:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -18503,14 +18480,12 @@ msgid "Operator" msgstr "Ù…ÙØ´ØºÙ„ التراكم." #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid argument of type:" -msgstr ": معامل النوع غير صØÙŠØ: " +msgstr "معامل غير صØÙŠØ من النوع:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid arguments:" -msgstr ": معاملات غير ØµØ§Ù„ØØ©: " +msgstr "معاملات غير ØµØ§Ù„ØØ©:" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -18522,14 +18497,12 @@ msgid "Var Name" msgstr "الأسم" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script:" -msgstr "لم يتم إيجاد VariableGet ÙÙŠ النص البرمجي: " +msgstr "لم يتم إيجاد VariableGet ÙÙŠ النص البرمجي:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script:" -msgstr "لم يتم إيجاد (Ù…ÙØØ¯Ø¯ Ø§Ù„Ù…ÙØªØºÙŠØ±) VariableSet ÙÙŠ النص البرمجي: " +msgstr "لم يتم إيجاد VariableSet ÙÙŠ النص البرمجي:" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy @@ -19083,10 +19056,6 @@ msgid "Could not execute on device." msgstr "لا يمكن إنشاء المجلد." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "تعذر العثور على أداة توقيع تطبيق اندرويد\"apksigner\"." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19222,17 +19191,20 @@ msgstr "" "إصدار \"ØØ²Ù…Ø© التطوير البرمجية Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©\" يجب أن يكون أعلى من أو يساوي إصدار " "\"Min Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "الإشاراة" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" -"تعذر العثور على 'apksigner'.\n" -"تأكد من ÙØ¶Ù„Ùƒ إن كان الأمر موجوداً ÙÙŠ دليل Ù…Ù„ÙØ§Øª أدوات-بناء الأندرويد Android " -"SDK build-tools.\n" -"لم يتم توقيع الناتج %s." +"تعذر العثور على 'apksigner'. تأكد من ÙØ¶Ù„Ùƒ إن كان الأمر موجوداً ÙÙŠ دليل Ù…Ù„ÙØ§Øª " +"أدوات-بناء ØØ²Ù…Ø© تطوير الأندرويد Android SDK build-tools. لم يتم توقيع الناتج " +"%s." #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." @@ -19247,6 +19219,10 @@ msgid "Could not find keystore, unable to export." msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø المتجر، لا يمكن التصدير." #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "تعذر بدء تشغيل apksigner ." + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "أعاد 'apksigner' الخطأ التالي #%d" @@ -19277,8 +19253,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "أسم المل٠غير صالØ! يتطلب مل٠اندرويد APK أمتداد *.apk لتعمل." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" -msgstr "صيغة تصدير غير مدعومة!\n" +msgid "Unsupported export format!" +msgstr "تنسيق تصدير غير مدعوم!" #: platform/android/export/export_plugin.cpp msgid "" @@ -19290,25 +19266,22 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" -"نسخ بناء Android غير متواÙقة:\n" -"\tقوالب Ù…Ùنصبة: %s\n" -"\tإصدار غودوت: %s\n" -"من ÙØ¶Ù„Ùƒ أعد تنصيب قالب بناء الأندرويد Android من قائمة \"المشروع\"." +"نسخ بناء Android غير متواÙقة: قوالب Ù…Ùنصبة: %s إصدار غودوت: %s. من ÙØ¶Ù„Ùƒ أعد " +"تنصيب قالب بناء الأندرويد من قائمة 'المشروع'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "تعذرت كتابة overwrite Ù…Ù„ÙØ§Øª res://android/build/res/*.xml مع اسم المشروع" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "لم يتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع إلى مشروع gradle\n" +msgid "Could not export project files to gradle project." +msgstr "لم يتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع إلى مشروع gradle." #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19320,15 +19293,15 @@ msgstr "بناء مشروع الأندرويد (gradle)" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"أخÙÙ‚ بناء مشروع الأندرويد، تÙقد Ø§Ù„Ù…ÙØ®Ø±Ø¬Ø§Øª للإطلاع على الخطأ.\n" -"بصورة بديلة يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد." +"أخÙÙ‚ بناء مشروع الأندرويد، تÙقد Ø§Ù„Ù…ÙØ®Ø±Ø¬Ø§Øª للإطلاع على الخطأ. بصورة بديلة " +"يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد." #: platform/android/export/export_plugin.cpp msgid "Moving output" -msgstr "نقل المخرجات" +msgstr "جاري ØªØØ±ÙŠÙƒ المخرجات" #: platform/android/export/export_plugin.cpp msgid "" @@ -19338,7 +19311,7 @@ msgstr "تعذر نسخ وإعادة تسمية المل٠المصدر، تÙÙ‚ #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "لم يتم إيجاد الرسم Ø§Ù„Ù…ØªØØ±Ùƒ: '%s'" #: platform/android/export/export_plugin.cpp @@ -19347,23 +19320,18 @@ msgid "Creating APK..." msgstr "إنشاء المØÙŠØ·..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" -"لم يتم إيجاد قالب APK للتصدير:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." +msgstr "لم يتم إيجاد قالب APK للتصدير: \"%s\"." #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" -"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.\n" -"ابن قالب التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات " -"الناقصة من خيارات التصدير المعدّة مسبقاً." +"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.ابن قالب " +"التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات الناقصة من " +"خيارات التصدير المعدّة مسبقاً." #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19371,7 +19339,8 @@ msgid "Adding files..." msgstr "Ø¥Ø¶Ø§ÙØ© %s..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع" #: platform/android/export/export_plugin.cpp @@ -19507,9 +19476,8 @@ msgid "Capabilities" msgstr "إلصق الخاصيات" #: platform/iphone/export/export.cpp -#, fuzzy msgid "Access Wi-Fi" -msgstr "تم بشكل ناجØ!" +msgstr "الوصول للواي-ÙØ§ÙŠ" #: platform/iphone/export/export.cpp #, fuzzy @@ -19614,6 +19582,17 @@ msgstr "قص العÙقد" msgid "Custom BG Color" msgstr "قص العÙقد" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "إدارة القوالب" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "قالب الإصدار المخصص ليس موجود." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19637,23 +19616,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "شغل مل٠HTML Ø§Ù„Ù…ÙØµØ¯Ø± ÙÙŠ Ø§Ù„Ù…ØªØµÙØ Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù„Ù†Ø¸Ø§Ù…." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "لا يمكن ÙØªØ القالب من أجل التصدير:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "إدارة قوالب التصدير:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "لا يمكن كتابة الملÙ:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ØªØØ¯ÙŠØ¯ الهامش" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "لا يمكن كتابة الملÙ:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Ø§Ù„ØªØ¨Ø§Ø¹ÙØ¯Ø§Øª:" @@ -19729,15 +19720,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "لا يمكن قراءة مل٠HTML مخصص:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "لا يمكن إنشاء مجلد خادم ال HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "خطأ ÙÙŠ بدء تشغيل خادم HTTP:" #: platform/javascript/export/export.cpp @@ -20038,9 +20031,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "تعذر بدء تشغيل xcrun." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "توطين" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20056,20 +20067,75 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "لم توجد ايقونات." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "خطأ ÙÙŠ تØÙ…يل الملÙ: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "الاتجاهات" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "تعذر بدء المل٠التنÙيذي hdiutil." + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "ينشئ الصورة المصغرة" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "لم يتم إيجاد قالب التطبيق (Template app) للتصدير:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "إدارة قوالب التصدير:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20077,7 +20143,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20119,6 +20185,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "مشروع" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "تعذر ÙØªØ المل٠للقراءة من المسار \"%s\"." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ù…ÙØØ¯Ø¯ غير صالØ:" @@ -20434,6 +20509,11 @@ msgid "Debug Algorithm" msgstr "Ù…ÙÙ†Ù‚Ø Ø§Ù„Ø£Ø®Ø·Ø§Ø¡" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "لا يمكن ØØ°Ù مل٠مؤقت:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20481,6 +20561,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "دوران عشوائي:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø المتجر، لا يمكن التصدير." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø المتجر، لا يمكن التصدير." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø المتجر، لا يمكن التصدير." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø المتجر، لا يمكن التصدير." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ù…ÙØØ¯Ø¯ غير صالØ:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "اسم غير صالØ." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "لا يمكن ØØ°Ù مل٠مؤقت:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20499,6 +20643,23 @@ msgid "Invalid product version:" msgstr "Ù…ÙØ¹Ø±Ù GUID (Ø§Ù„Ù…ÙØ¹Ø±Ù‘Ù Ø§Ù„ÙØ±ÙŠØ¯ العالمي) للمنتج غير صالØ:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "صيغة غير ØµØ§Ù„ØØ©." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Ù†Ø§ÙØ°Ø© جديدة" @@ -20515,6 +20676,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20642,7 +20807,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:" @@ -21037,9 +21203,8 @@ msgstr "قناع الانبعاث" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Sphere Radius" -msgstr "مصدر الانبعاث: " +msgstr "قطر الجسم الكروى" #: scene/2d/cpu_particles_2d.cpp #, fuzzy @@ -21107,9 +21272,8 @@ msgstr "خطي" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Accel" -msgstr "تم بشكل ناجØ!" +msgstr "التسارع" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -21524,17 +21688,19 @@ msgstr "" "العقدة. ÙŠÙØ±Ø¬Ù‰ تعيين خاصية أو رسم مضلع." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"يجب أن يكون نموذج-المضلع-المتنقل (NavigationPolygonInstance) تابعًا أو ØÙيدًا " -"لعقدة التنقل-ثنائي-الأبعاد (Navigation2D). انه Ùقط ÙŠÙˆÙØ± بيانات التنقل." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ÙÙŠ أسÙÙ„ المنتصÙ" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Ø§Ù„Ø³ÙØ±" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -21809,9 +21975,8 @@ msgid "Safe Margin" msgstr "ØªØØ¯ÙŠØ¯ الهامش" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp -#, fuzzy msgid "Sync To Physics" -msgstr " (Ùيزيائي)" +msgstr "تزامن مع الÙيزياء" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy @@ -22788,14 +22953,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"يجب أن يكون نموذج-مجسم-التنقل (NavigationMeshInstance) تابعًا أو ØÙيدًا لعقدة " -"التنقل (Navigation node). انه ÙŠÙˆÙØ± Ùقط بيانات التنقل." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -23324,9 +23481,8 @@ msgid "A RoomGroup should not be a child or grandchild of a Portal." msgstr "" #: scene/3d/portal.cpp -#, fuzzy msgid "Portal Active" -msgstr " [البوابات Ù…ÙØ¹Ù„Ø©]" +msgstr "البوابة نشطة" #: scene/3d/portal.cpp scene/resources/occluder_shape_polygon.cpp msgid "Two Way" @@ -24342,9 +24498,8 @@ msgid "Pass On Modal Close Click" msgstr "" #: scene/gui/control.cpp -#, fuzzy msgid "Size Flags" -msgstr "Ø§Ù„ØØ¬Ù…: " +msgstr "أعلام Ø§Ù„ØØ¬Ù…" #: scene/gui/control.cpp #, fuzzy @@ -24707,9 +24862,8 @@ msgid "Max Value" msgstr "القيمة" #: scene/gui/range.cpp -#, fuzzy msgid "Page" -msgstr "Ø§Ù„ØµÙØØ©: " +msgstr "ØµÙØØ©" #: scene/gui/range.cpp #, fuzzy @@ -25127,9 +25281,8 @@ msgid "Download File" msgstr "تنزيل" #: scene/main/http_request.cpp -#, fuzzy msgid "Download Chunk Size" -msgstr "جاري التنزيل" +msgstr "ØØ¬Ù… جزء التنزيل" #: scene/main/http_request.cpp msgid "Body Size Limit" @@ -25200,9 +25353,8 @@ msgid "Custom Multiplayer" msgstr "ØªØØ¯ÙŠØ¯ التكرار:" #: scene/main/node.cpp -#, fuzzy msgid "Process Priority" -msgstr "تمكين الأولوية" +msgstr "أولوية العملية" #: scene/main/scene_tree.cpp scene/main/timer.cpp #, fuzzy @@ -25270,9 +25422,8 @@ msgid "Draw 2D Outlines" msgstr "أنشئ Ø§Ù„ØØ¯" #: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy msgid "Reflections" -msgstr "الاتجاهات" +msgstr "الانعكاسات" #: scene/main/scene_tree.cpp #, fuzzy @@ -25436,84 +25587,82 @@ msgid "Enable 2D" msgstr "ØªÙØ¹ÙŠÙ„" #: scene/main/viewport.cpp -#, fuzzy msgid "Enable 3D" -msgstr "ØªÙØ¹ÙŠÙ„" +msgstr "ØªÙØ¹ÙŠÙ„ 3D" #: scene/main/viewport.cpp -#, fuzzy msgid "Object Picking" -msgstr "ØªÙØ¹ÙŠÙ„ تقشير البصل" +msgstr "اختيار الكائن" #: scene/main/viewport.cpp -#, fuzzy msgid "Disable Input" -msgstr "عنصر معطّل" +msgstr "تعطيل الإدخال" #: scene/main/viewport.cpp servers/visual_server.cpp -#, fuzzy msgid "Shadow Atlas" -msgstr "أطلس جديد" +msgstr "أطلس الظل" #: scene/main/viewport.cpp msgid "Quad 0" -msgstr "" +msgstr "رباعي 0" #: scene/main/viewport.cpp msgid "Quad 1" -msgstr "" +msgstr "رباعية 1" #: scene/main/viewport.cpp msgid "Quad 2" -msgstr "" +msgstr "رباعية 2" #: scene/main/viewport.cpp msgid "Quad 3" -msgstr "" +msgstr "رباعية 3" #: scene/main/viewport.cpp -#, fuzzy msgid "Canvas Transform" -msgstr "Ù…ØÙˆ التَØÙŽÙˆÙ‘Ù„" +msgstr "تØÙˆÙŠÙ„ Ø§Ù„Ù„ÙˆØØ©" #: scene/main/viewport.cpp -#, fuzzy msgid "Global Canvas Transform" -msgstr "Ø§Ù„Ø§ØØªÙاظ بالتØÙˆÙ‘Ù„ الشمولي Global" +msgstr "تØÙˆÙŠÙ„ Ø§Ù„Ù„ÙˆØØ© الشامل (global)" #: scene/main/viewport.cpp msgid "Tooltip Delay (sec)" -msgstr "" +msgstr "تأخير ØªÙ„Ù…ÙŠØ Ø§Ù„Ø£Ø¯ÙˆØ§Øª (ثانية)" #: scene/register_scene_types.cpp -#, fuzzy msgid "Swap OK Cancel" -msgstr "إلغاء" +msgstr "مبادلة مواÙÙ‚ إلغاء" #: scene/register_scene_types.cpp -#, fuzzy msgid "Layer Names" -msgstr "الأسم" +msgstr "أسماء الطبقات" #: scene/register_scene_types.cpp -#, fuzzy msgid "2D Render" -msgstr "Ù…ÙØØ±Ùƒ الإخراج البصري:" +msgstr "إنشاء صورة 2D" #: scene/register_scene_types.cpp -#, fuzzy msgid "3D Render" -msgstr "Ù…ÙØØ±Ùƒ الإخراج البصري:" +msgstr "إنشاء صورة 3D" #: scene/register_scene_types.cpp -#, fuzzy msgid "2D Physics" -msgstr " (Ùيزيائي)" +msgstr "Ùيزياء 2D" #: scene/register_scene_types.cpp -#, fuzzy msgid "3D Physics" -msgstr " (Ùيزيائي)" +msgstr "Ùيزياء 3D" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "تنقل" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "تنقل" #: scene/register_scene_types.cpp msgid "Use hiDPI" @@ -26596,9 +26745,8 @@ msgid "Distance" msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:" #: scene/resources/environment.cpp -#, fuzzy msgid "Transition" -msgstr "الانتقال: " +msgstr "الانتقال" #: scene/resources/environment.cpp msgid "DOF Near Blur" @@ -26621,7 +26769,7 @@ msgstr "" #: scene/resources/environment.cpp #: servers/audio/effects/audio_effect_chorus.cpp msgid "2" -msgstr "" +msgstr "2" #: scene/resources/environment.cpp #: servers/audio/effects/audio_effect_chorus.cpp @@ -26934,16 +27082,15 @@ msgid "Subsurf Scatter" msgstr "" #: scene/resources/material.cpp -#, fuzzy msgid "Transmission" -msgstr "الانتقال: " +msgstr "الإنتقال" #: scene/resources/material.cpp #, fuzzy msgid "Refraction" msgstr "Ø§Ù„ØªØ¨Ø§Ø¹ÙØ¯Ø§Øª:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27028,7 +27175,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "ØªØØ¬ÙŠÙ…:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "ØØ¯Ø¯ نوع المتغير" #: scene/resources/navigation_mesh.cpp @@ -27046,10 +27198,15 @@ msgid "Source Group Name" msgstr "مصدر" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "معاملات المشهد الرئيس:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27059,11 +27216,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "الإقليم" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "دمج من المشهد" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27077,6 +27239,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "أظهر Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:" @@ -27094,7 +27261,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27143,9 +27310,8 @@ msgid "Point Texture" msgstr "نقاط الانبعاث:" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Normal Texture" -msgstr "مصدر الانبعاث: " +msgstr "نقش طبيعي" #: scene/resources/particles_material.cpp #, fuzzy @@ -27349,9 +27515,8 @@ msgid "Base Texture" msgstr "إزالة النقش" #: scene/resources/texture.cpp -#, fuzzy msgid "Image Size" -msgstr "Ø§Ù„ØµÙØØ©: " +msgstr "ØØ¬Ù… الصورة" #: scene/resources/texture.cpp #, fuzzy @@ -27509,6 +27674,11 @@ msgid "Scenario" msgstr "مشهد" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "تنقل" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27526,6 +27696,26 @@ msgstr "الخط اليساري" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Ø§ÙØªØ±Ø§Ø¶ÙŠ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ØªØØ¯ÙŠØ« Ø§Ù„Ù…ÙØ¹Ø§ÙŠÙ†Ø©" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "أختبار" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "تعديل الإتصال:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/az.po b/editor/translations/az.po index f6269e61aa..6e8dfbf1f3 100644 --- a/editor/translations/az.po +++ b/editor/translations/az.po @@ -210,9 +210,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -372,6 +373,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Metod çağırma izi" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -556,7 +566,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -639,24 +650,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -764,7 +774,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Siqnalları filtirlÉ™" @@ -2219,8 +2230,8 @@ msgid "Open" msgstr "Aç" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Bunların SahiblÉ™ri:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2529,7 +2540,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2785,6 +2796,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2797,6 +2824,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2899,8 +2946,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3072,9 +3136,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4157,14 +4221,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4281,6 +4337,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4308,6 +4368,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5042,6 +5106,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "LayihÉ™ Qurucuları" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5300,7 +5369,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6709,7 +6780,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Siqnalları filtirlÉ™" @@ -6987,6 +7058,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9882,6 +9965,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11241,8 +11325,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "'%s' ilÉ™ '%s' qoÅŸ" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12210,8 +12295,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13647,31 +13731,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13806,6 +13869,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "LayihÉ™ Qurucuları" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16069,7 +16137,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16638,7 +16706,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16664,6 +16731,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Hamısını Seç/SeçmÉ™" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "%s növünü dÉ™yiÅŸdirin" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18123,10 +18203,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18230,12 +18306,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18251,6 +18330,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18279,7 +18362,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18290,19 +18373,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18315,7 +18396,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18330,7 +18411,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18338,15 +18419,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18356,7 +18434,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18590,6 +18668,15 @@ msgstr "Funksiyalar:" msgid "Custom BG Color" msgstr "Funksiyalar:" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18611,19 +18698,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "%s baza növü üçün %s növünün sÉ™hv indeksi" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ÆlaqÉ™ni redaktÉ™ edin:" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18698,15 +18795,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18982,9 +19079,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Animasiyanı TÉ™mizlÉ™mÉ™" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19000,18 +19114,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "İzah:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "3D Transformasya izi" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19019,7 +19186,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19060,6 +19227,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "LayihÉ™ Qurucuları" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19357,6 +19533,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19399,6 +19579,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "'%s' qurmaq üçün etibarsız arqumentlÉ™r" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19417,6 +19654,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19432,6 +19685,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19543,7 +19800,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20314,13 +20572,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21411,12 +21671,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23882,6 +24136,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Hamısını Seç/SeçmÉ™" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Hamısını Seç/SeçmÉ™" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25186,7 +25450,7 @@ msgstr "" msgid "Refraction" msgstr "İzah:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25263,8 +25527,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Ölçüm NisbÉ™ti:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "İzah:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25279,7 +25549,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25291,11 +25565,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Yalnız Seçim" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25308,6 +25587,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25324,7 +25607,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25702,6 +25985,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "%s növünü dÉ™yiÅŸdirin" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25717,6 +26005,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "DÉ™yÉ™r:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Bunun üçün DÉ™yiÅŸdirmÉ™ Axtar:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Bunun üçün DÉ™yiÅŸdirmÉ™ Axtar:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ÆlaqÉ™ni redaktÉ™ edin:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index b7dc36f666..9370a48a79 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -232,9 +232,10 @@ msgid "Data" msgstr "Данни" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Профилиране на мрежата" @@ -396,6 +397,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "МакÑимален размер (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Режим на премеÑтване" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -591,7 +601,8 @@ msgstr "ОпиÑание" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "ПуÑкане" @@ -678,6 +689,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Път на Ñцената:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -685,19 +701,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Контрол на верÑиите" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Контрол на верÑиите" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Име на приÑтавката:" +msgid "Version Control Plugin Name" +msgstr "Контрол на верÑиите" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -810,7 +822,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Филтри:" @@ -2231,8 +2244,8 @@ msgid "Open" msgstr "ОтварÑне" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "СобÑтвеници на:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2530,7 +2543,7 @@ msgid "Bus Options" msgstr "ÐаÑтройки на шината" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2787,6 +2800,22 @@ msgid "Choose" msgstr "Избиране" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2799,6 +2828,31 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Запазване" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Папката не може да бъде Ñъздадена." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Файловете на проекта не могат да бъдат изнеÑени" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Файлът не може да бъде отворен за запиÑ:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Запазване" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2901,9 +2955,31 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Управление на шаблоните" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "ПоÑочениÑÑ‚ път не ÑъщеÑтвува." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" -msgstr "" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "Пакетът не е намерен: %s" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Файлът Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸Ñ‚Ðµ за изнаÑÑне не може да Ñе отвори." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "ОтÑтъп" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -3072,9 +3148,9 @@ msgid "Import" msgstr "ВнаÑÑне" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "ИзнаÑÑне" @@ -4186,15 +4262,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Сцена" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Път на Ñцената:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4321,6 +4388,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Контрол на верÑиите" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "ПотребителÑко име" @@ -4348,6 +4419,10 @@ msgstr "" msgid "Add a new scene." msgstr "ДобавÑне на нови нова Ñцена." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Сцена" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5098,6 +5173,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Проект" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5372,7 +5452,9 @@ msgid "Draw Spaces" msgstr "Ð˜Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° изчертаване:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "ÐавигациÑ" @@ -6828,7 +6910,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Филтри:" @@ -7121,6 +7203,18 @@ msgid "Saving..." msgstr "Запазване..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10061,6 +10155,7 @@ msgid "Points" msgstr "Точки" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Полигони" @@ -11442,7 +11537,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Ðеправилна геометриÑ. Ðе може да Ñе замени Ñ Ð¿Ð¾Ð»Ð¸Ð³Ð¾Ð½Ð½Ð° мрежа." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Преобразуване в Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12416,8 +12512,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Регион" @@ -13858,31 +13953,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ИзнаÑÑне на вÑичко" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Шаблоните за изнаÑÑне за тази платформа липÑват или Ñа повредени:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Път за изнаÑÑне" @@ -14026,6 +14100,11 @@ msgid "Export templates for this platform are missing:" msgstr "Шаблоните за изнаÑÑне за тази ÑиÑтема липÑват:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ОÑнователи на проекта" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Управление на шаблоните за изнаÑÑне" @@ -16333,7 +16412,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Полигони" @@ -16944,7 +17023,6 @@ msgid "Use In Baked Light" msgstr "Изпичане на карти на оÑветеноÑÑ‚" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16974,6 +17052,19 @@ msgstr "По Ñредата горе" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "ÐавигациÑ" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Режим на навигациÑ" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Следваща равнина" @@ -18474,10 +18565,6 @@ msgid "Could not execute on device." msgstr "Изпълнението на уÑтройÑтвото е невъзможно." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "ИнÑтрументът „apksigner“ не може да бъде намерен." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18595,12 +18682,17 @@ msgstr "" "„Целева верÑÐ¸Ñ Ð½Ð° SDK“ трÑбва да бъде по-голÑма или равна на „Мин. верÑÐ¸Ñ Ð½Ð° " "SDK“." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Сигнал" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "Командата „apksigner“ не може да бъде намерена.\n" "Проверете дали командата е налична в папката „build-tools“ на Android SDK.\n" @@ -18619,6 +18711,10 @@ msgid "Could not find keystore, unable to export." msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно." #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "„apksigner“ завърши Ñ Ð³Ñ€ÐµÑˆÐºÐ° #%d" @@ -18647,7 +18743,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Ðеправилно име! Android APK изиÑква разширение *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Ðеподдържан формат за изнаÑÑне!\n" #: platform/android/export/export_plugin.cpp @@ -18658,21 +18755,21 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "файловете res://android/build/res/*.xml не могат да бъдат презапиÑани Ñ " "името на проекта" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "" "Файловете на проекта не могат да бъдат изнеÑени като проект на gradle.\n" @@ -18685,8 +18782,9 @@ msgid "Building Android Project (gradle)" msgstr "Компилиране на проект за Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Компилирането на проекта за Android беше неуÑпешно. Вижте изхода за " @@ -18707,7 +18805,8 @@ msgstr "" "в папката на проекта на gradle." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Пакетът не е намерен: %s" #: platform/android/export/export_plugin.cpp @@ -18715,17 +18814,16 @@ msgid "Creating APK..." msgstr "Създаване на APK…" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Ðе е намерен шаблонен файл APK за изнаÑÑне:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18738,7 +18836,8 @@ msgid "Adding files..." msgstr "ДобавÑне на файлове..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Файловете на проекта не могат да бъдат изнеÑени" #: platform/android/export/export_plugin.cpp @@ -18974,6 +19073,17 @@ msgstr "ПерÑонализиран обект" msgid "Custom BG Color" msgstr "ПерÑонализиран обект" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Управление на шаблоните" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Шаблоните за изнаÑÑне за тази ÑиÑтема липÑват:" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18995,22 +19105,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Шаблонът не може да Ñе отвори за изнаÑÑне:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Ðеправилно разширение." #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Файлът не може да бъде запиÑан:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Задаване на отÑтъп" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Файлът не може да бъде прочетен:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Разделение:" @@ -19085,15 +19208,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "ПерÑонализираната HTML-обвивка не може да бъде прочетена:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Папката на HTTP-Ñървъра не може да бъде Ñъздадена:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Грешка при Ñтартирането на HTTP-Ñървър:" #: platform/javascript/export/export.cpp @@ -19393,9 +19519,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Файловете на проекта не могат да бъдат изнеÑени" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Изпълнението на уÑтройÑтвото е невъзможно." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ÐавигациÑ" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19411,19 +19556,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "ÐÑма намерени конÑтанти." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Грешка при запазването на файла: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ÐаправлениÑ" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Създаване на пакета на приложението" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Ðе е намерено шаблонно приложение за изнаÑÑне:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ðеправилен базов път." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19431,7 +19631,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19472,6 +19672,17 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Проект" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "" +"Файловете на проекта не могат да бъдат изнеÑени като проект на gradle.\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Ðеправилен идентификатор на пакета:" @@ -19780,6 +19991,11 @@ msgid "Debug Algorithm" msgstr "Дебъгер" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "ВременниÑÑ‚ файл не може да бъде премахнат:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19826,6 +20042,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "ИзвеÑтиÑ" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ðеправилни аргументи за изграждане на „%s“" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ðеправилно име." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "ВременниÑÑ‚ файл не може да бъде премахнат:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19844,6 +20124,23 @@ msgid "Invalid product version:" msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° продукта:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Ðеправилно разширение." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19859,6 +20156,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19982,7 +20283,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20826,15 +21128,16 @@ msgstr "" "МолÑ, задайте ÑвойÑтво или нариÑувайте полигон." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -"NavigationPolygonInstance трÑбва да бъде дъщерен или под-дъщерен на обект от " -"тип Navigation2D. Той дава Ñамо навигационна информациÑ." -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "По Ñредата долу" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22014,14 +22317,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance трÑбва да бъде дъщерен или под-дъщерен на обект от " -"тип Navigation. Той Ñамо предоÑÑ‚Ð°Ð²Ñ Ð´Ð°Ð½Ð½Ð¸Ñ‚Ðµ за навигирането." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -24641,6 +24936,16 @@ msgid "3D Physics" msgstr "Следващ кадър на физичната ÑиÑтема" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ÐавигациÑ" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ÐавигациÑ" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26040,7 +26345,7 @@ msgstr "Преход" msgid "Refraction" msgstr "Пречупване" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26119,8 +26424,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Скалиране: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Разделение:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -26136,10 +26447,15 @@ msgid "Source Group Name" msgstr "Източник за полигонна мрежа:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Гизмота" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26148,11 +26464,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Регион" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26165,6 +26486,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Показване на Ñтандартните" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26181,7 +26507,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26589,6 +26915,11 @@ msgid "Scenario" msgstr "Сцена" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ÐавигациÑ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26606,6 +26937,26 @@ msgstr "Линейно отлÑво" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Стандартен предварителен преглед" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Стандартен предварителен преглед" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ТеÑтово" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Редактиране на Връзката:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 21de62a1af..265a7fb58a 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -11,13 +11,14 @@ # Mokarrom Hossain <mhb2016.bzs@gmail.com>, 2020, 2021. # Sagen Soren <sagensoren03@gmail.com>, 2020. # Hasibul Hasan <d1hasib@yahoo.com>, 2020. +# saitama <atik.wowspace@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-03 06:20+0000\n" -"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" +"Last-Translator: saitama <atik.wowspace@gmail.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -25,67 +26,62 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "টà§à¦¯à¦¾à¦¬à¦²à§‡à¦Ÿ ডà§à¦°à¦¾à¦‡à¦à¦¾à¦°" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "রিসোরà§à¦¸à§‡à¦° কà§à¦²à§€à¦ªà¦¬à§‹à¦°à§à¦¡ খালি!" +msgstr "কà§à¦²à§€à¦ªà¦¬à§‹à¦°à§à¦¡" #: core/bind/core_bind.cpp -#, fuzzy msgid "Current Screen" -msgstr "বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯" +msgstr "বরà§à¦¤à¦®à¦¾à¦¨ পরà§à¦¦à¦¾" #: core/bind/core_bind.cpp msgid "Exit Code" -msgstr "" +msgstr "ফেরত সংকেত" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" +msgstr "à¦à¦¿-সিঙà§à¦• সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" #: core/bind/core_bind.cpp main/main.cpp +#, fuzzy msgid "V-Sync Via Compositor" -msgstr "" +msgstr "কমà§à¦ªà¦¸à¦¿à¦Ÿà¦° দà§à¦¬à¦¾à¦°à¦¾ à¦à¦¿-সিঙà§à¦• করা" #: core/bind/core_bind.cpp main/main.cpp +#, fuzzy msgid "Delta Smoothing" -msgstr "" +msgstr "ডেলà§à¦Ÿà¦¾ মসৃণ করন" #: core/bind/core_bind.cpp #, fuzzy msgid "Low Processor Usage Mode" -msgstr "মোড (Mode) সরান" +msgstr "পà§à¦°à¦¸à§‡à¦¸à¦° à¦à¦° কম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° Mode" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" -msgstr "" +msgstr "কম পà§à¦°à¦¸à§‡à¦¸à¦° বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° মোড বিরতি (sec)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy msgid "Keep Screen On" -msgstr "ডিবাগার খোলা রাখà§à¦¨" +msgstr "পরà§à¦¦à¦¾ চালৠরাখà§à¦¨" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:" +msgstr "সরà§à¦¬à¦¨à¦¿à¦®à§à¦¨ উইনà§à¦¡à§‹ আকার" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:" +msgstr "সরà§à¦¬à§‹à¦šà§à¦š উইনà§à¦¡à§‹ আকার" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" +msgstr "পরà§à¦¦à¦¾ à¦à§‹à¦à¦•/ উপসà§à¦¥à¦¾à¦ªà¦¨" #: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp #: platform/uwp/os_uwp.cpp @@ -95,39 +91,36 @@ msgstr "উইনà§à¦¡à§‹" #: core/bind/core_bind.cpp core/project_settings.cpp msgid "Borderless" -msgstr "" +msgstr "সিমানà§à¦¤à¦¬à¦¿à¦¹à§€à¦¨" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "পà§à¦°à¦¤à¦¿ পিকà§à¦¸à§‡à¦² সà§à¦¬à¦šà§à¦›à¦¤à¦¾ চালৠকরà§à¦¨" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Fullscreen" -msgstr "পূরà§à¦£-পরà§à¦¦à¦¾ অদলবদল/টগল করà§à¦¨" +msgstr "পূরà§à¦£-পরà§à¦¦à¦¾" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "সরà§à¦¬à§‹à¦šà§à¦šà¦•ৃত" #: core/bind/core_bind.cpp -#, fuzzy msgid "Minimized" -msgstr "বড় হাতের অকà§à¦·à¦°à§‡ পরিবরà§à¦¤à¦¨à§‡ করà§à¦¨" +msgstr "সরà§à¦¬à¦¨à¦¿à¦®à§à¦¨" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" -msgstr "" +msgstr "আকার-পরিবরà§à¦¤à¦¨à¦¯à§‹à¦—à§à¦¯" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "ডà§à¦• পজিশন" +msgstr "অবসà§à¦¥à¦¾à¦¨" #: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp #: main/main.cpp modules/gridmap/grid_map.cpp @@ -138,32 +131,28 @@ msgstr "ডà§à¦• পজিশন" #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp -#, fuzzy msgid "Size" -msgstr "সেল (Cell)-à¦à¦° আকার:" +msgstr "আকার" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "à¦à¦¨à§à¦¡à¦¿à§Ÿà¦¾à¦¨ সোয়াপ" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (Edit)" +msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦•রন আà¦à¦¾à¦¸" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "তà§à¦°à§à¦Ÿà¦¿ বারà§à¦¤à¦¾à¦—à§à¦²à§‹ ছাপান" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "ইনà§à¦Ÿà¦¾à¦°à¦ªà§‹à¦²à§‡à¦¶à¦¨ মোড" +msgstr "পà§à¦°à¦¤à¦¿ সেকেনà§à¦¡à§‡ চকà§à¦°" #: core/bind/core_bind.cpp -#, fuzzy msgid "Target FPS" -msgstr "টারà§à¦—েট" +msgstr "লকà§à¦·à§à¦¯-à¦à¦«à¦ªà¦¿à¦à¦¸(ফà§à¦°à§‡à¦®-পà§à¦°à¦¤à¦¿-সেকেনà§à¦¡)" #: core/bind/core_bind.cpp #, fuzzy @@ -190,13 +179,12 @@ msgid "Error Line" msgstr "সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে" #: core/bind/core_bind.cpp -#, fuzzy msgid "Result" -msgstr "সাহাযà§à¦¯ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨" +msgstr "ফলাফল" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "সà§à¦®à§ƒà¦¤à¦¿" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -207,7 +195,7 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "সীমাগà§à¦²à§‹" #: core/command_queue_mt.cpp #, fuzzy @@ -216,7 +204,7 @@ msgstr "টান: ঘূরà§à¦£à¦¨" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "মালà§à¦Ÿà¦¿à¦¥à§à¦°à§‡à¦¡à¦¿à¦‚ সারি আকার (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp @@ -229,12 +217,13 @@ msgstr "ফাংশনগà§à¦²à¦¿:" #: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Data" -msgstr "" +msgstr "তথà§à¦¯" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "পà§à¦°à¦•লà§à¦ª à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" @@ -394,6 +383,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "মোড (Mode) সরান" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -596,7 +595,8 @@ msgstr "বরà§à¦£à¦¨à¦¾:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "চালান" @@ -688,6 +688,11 @@ msgid "Main Run Args" msgstr "পà§à¦°à¦§à¦¾à¦¨ দৃশà§à¦¯à§‡à¦° মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "দৃশà§à¦¯à§‡à¦° পথ:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -695,20 +700,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "সংসà§à¦•রণ:" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ" +msgid "Version Control Plugin Name" +msgstr "সংসà§à¦•রণ:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -826,7 +826,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" @@ -2301,8 +2302,8 @@ msgid "Open" msgstr "খà§à¦²à§à¦¨" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীসমূহ:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2617,7 +2618,7 @@ msgid "Bus Options" msgstr "বাস অপশন" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট" @@ -2888,6 +2889,25 @@ msgid "Choose" msgstr "পছনà§à¦¦ করà§à¦¨" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সমà§à¦ªà¦¨à§à¦¨ হয়েছে!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "বà§à¦¯à¦°à§à¦¥:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "সংরকà§à¦·à¦¿à¦¤ ফাইল:" @@ -2903,6 +2923,31 @@ msgid "Packing" msgstr "পà§à¦¯à¦¾à¦•/গà§à¦šà§à¦›à¦¿à¦¤ করা" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "লেখার জনà§à¦¯ ফাইলটি খোলায় সমসà§à¦¯à¦¾ হয়েছে:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -3009,12 +3054,32 @@ msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ ডিবাগ (debug) পà§à¦¯à¦¾à¦•à§ msgid "Custom release template not found." msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ রিলিস (release) পà§à¦¯à¦¾à¦•েজ খà§à¦à¦œà§‡ পাওয়া যায়নি।" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "ফাইলটি বিদà§à¦¯à¦®à¦¾à¦¨ নয়।" + #: editor/editor_export.cpp platform/javascript/export/export.cpp #, fuzzy -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." msgstr "টেমপà§à¦²à§‡à¦Ÿ ফাইল পাওয়া যায়নি:\n" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3204,9 +3269,9 @@ msgid "Import" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ" @@ -4431,15 +4496,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "দৃশà§à¦¯" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "দৃশà§à¦¯à§‡à¦° পথ:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4570,6 +4626,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "সংসà§à¦•রণ:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" @@ -4599,6 +4660,10 @@ msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড" msgid "Add a new scene." msgstr "নতà§à¦¨ টà§à¦°à§à¦¯à¦¾à¦•/পথ-সমূহ যোগ করà§à¦¨à¥¤" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "দৃশà§à¦¯" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "পূরà§à¦¬à§‡ খোলা দৃশà§à¦¯à§‡ যান।" @@ -5425,6 +5490,11 @@ msgstr "" "কাংখিত পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ গà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ কোন à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ পà§à¦°à¦¿à¦¸à§‡à¦Ÿ খà§à¦à¦œà§‡ পাওয়া যায়নি।\n" "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মেনà§à¦¤à§‡ à¦à¦•টি সঠিক পà§à¦°à¦¿à¦¸à§‡à¦Ÿ যোগ করà§à¦¨à¥¤" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "আপনার লজিক/যà§à¦•à§à¦¤à¦¿-সমূহ _run() মেথডে লিখà§à¦¨à¥¤" @@ -5708,7 +5778,9 @@ msgid "Draw Spaces" msgstr "ডà§à¦° কলস" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Navigation Mesh তৈরি করà§à¦¨" @@ -7281,7 +7353,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" @@ -7582,6 +7654,18 @@ msgid "Saving..." msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10760,6 +10844,7 @@ msgid "Points" msgstr "বিনà§à¦¦à§ সরান" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "পলিগন->UV" @@ -12263,7 +12348,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." #: editor/plugins/sprite_editor_plugin.cpp @@ -13367,8 +13452,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "চালানোর মোড:" @@ -14929,36 +15013,12 @@ msgid "Delete preset '%s'?" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ করবেন?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡" #: editor/project_export.cpp #, fuzzy -msgid "The given export path doesn't exist:" -msgstr "ফাইলটি বিদà§à¦¯à¦®à¦¾à¦¨ নয়।" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকারি à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦—à§à¦²à¦¿ কà§à¦·à¦¤à¦¿à¦—à§à¦°à¦¸à§à¦¥ হয়েছে অথবা খà§à¦à¦œà§‡ পাওয়া " -"যাচà§à¦›à§‡ না:" - -#: editor/project_export.cpp -#, fuzzy msgid "Export Path" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° পà§à¦°à¦¿à¦¸à§‡à¦Ÿ:" @@ -15115,6 +15175,11 @@ msgstr "à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকা #: editor/project_export.cpp #, fuzzy +msgid "Project Export" +msgstr "পà§à¦°à¦œà§‡à¦•à§à¦Ÿ ফাউনà§à¦¡à¦¾à¦°" + +#: editor/project_export.cpp +#, fuzzy msgid "Manage Export Templates" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" @@ -17628,7 +17693,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "পলিগন->UV" @@ -18260,7 +18325,6 @@ msgid "Use In Baked Light" msgstr "লাইটà§à¦®à§à¦¯à¦¾à¦ªà§‡ হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨:" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -18290,6 +18354,19 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦à§‚ত করà msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19929,10 +20006,6 @@ msgid "Could not execute on device." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -20037,12 +20110,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "সংকেতসমূহ" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -20062,6 +20139,11 @@ msgid "Could not find keystore, unable to export." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦à¦¬ হয়নি!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -20092,7 +20174,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -20103,20 +20185,18 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" #: platform/android/export/export_plugin.cpp @@ -20130,7 +20210,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -20146,7 +20226,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সরঞà§à¦œà¦¾à¦®à¦¸à¦®à§‚হ" #: platform/android/export/export_plugin.cpp @@ -20156,15 +20236,12 @@ msgstr "ওকটà§à¦°à§€ (octree) গঠনবিনà§à¦¯à¦¾à¦¸ তৈরি #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -20176,7 +20253,7 @@ msgstr "%s সংযà§à¦•à§à¦¤ হচà§à¦›à§‡..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" #: platform/android/export/export_plugin.cpp @@ -20419,6 +20496,17 @@ msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨" msgid "Custom BG Color" msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ রিলিস (release) পà§à¦¯à¦¾à¦•েজ খà§à¦à¦œà§‡ পাওয়া যায়নি।" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -20443,25 +20531,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "হà§à¦¯à¦¾à¦¨à§à¦¡à§‡à¦² সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "বিচà§à¦›à§‡à¦¦:" @@ -20537,17 +20634,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "দৃশà§à¦¯ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে।" #: platform/javascript/export/export.cpp @@ -20846,9 +20943,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦à¦¬ হয়নি!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼à¦•রণ" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20864,21 +20980,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "খà§à¦à¦œà§‡ পাওয়া যায়নি!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "TileSet সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "অংশাদি:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦à¦¬ হয়নি!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦² তৈরি হচà§à¦›à§‡" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20886,7 +21057,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20928,6 +21099,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦à¦¬ হয়নি।" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:" @@ -21241,6 +21422,11 @@ msgid "Debug Algorithm" msgstr "ডিবাগার" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "থিমটি ফাইলে সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হয়নি:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -21288,6 +21474,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "যথেচà§à¦› ঘূরà§à¦£à¦¾à§Ÿà¦¨:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ নাম।" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "থিমটি ফাইলে সংরকà§à¦·à¦£ করা সমà§à¦à¦¬ হয়নি:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -21309,6 +21559,23 @@ msgid "Invalid product version:" msgstr "পণà§à¦¯à§‡à¦° অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ GUID।" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "উইনà§à¦¡à§‹" @@ -21325,6 +21592,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -21453,7 +21724,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" @@ -22310,17 +22582,19 @@ msgstr "" "করতে হবে। অনà§à¦—à§à¦°à¦¹ করে à¦à¦•টি বৈশিষà§à¦Ÿà§à¦¯ নিরà§à¦§à¦¾à¦°à¦¨ করà§à¦¨ বা à¦à¦•টি পলিগন/বহà§à¦à§à¦œ আà¦à¦•à§à¦¨à¥¤" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance-কে অবশà§à¦¯à¦‡ Navigation2D-à¦à¦° অংশ অথবা অংশের অংশ হতে " -"হবে। à¦à¦Ÿà¦¾ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নà§à¦¯à¦¾à¦à¦¿à¦—েশনের তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨ করে।" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "নিমà§à¦¨" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "à¦à§à¦°à¦®à¦£" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -23528,14 +23802,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance-কে অবশà§à¦¯à¦‡ Navigation-à¦à¦° অংশ অথবা অংশের অংশ হতে হবে। " -"à¦à¦Ÿà¦¾ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নà§à¦¯à¦¾à¦à¦¿à¦—েশনের তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨ করে।" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -26214,6 +26480,16 @@ msgid "3D Physics" msgstr "সà§à¦¥à¦¿à¦°/বদà§à¦§ ফà§à¦°à§‡à¦® %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27637,7 +27913,7 @@ msgstr "টà§à¦°à§à¦¯à¦¾à¦¨à¦œà¦¿à¦¶à¦¨/সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦°à¦£" msgid "Refraction" msgstr "বিচà§à¦›à§‡à¦¦:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27722,7 +27998,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "সà§à¦•েল/মাপ:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦² সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨:" #: scene/resources/navigation_mesh.cpp @@ -27740,10 +28021,15 @@ msgid "Source Group Name" msgstr "উৎস:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "পà§à¦°à¦§à¦¾à¦¨ দৃশà§à¦¯à§‡à¦° মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27753,11 +28039,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "চালানোর মোড:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "দৃশà§à¦¯ হতে à¦à¦•তà§à¦°à¦¿à¦¤ করবেন" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27771,6 +28062,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "লোড ডিফলà§à¦Ÿ" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" @@ -27788,7 +28084,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -28204,6 +28500,11 @@ msgid "Scenario" msgstr "দৃশà§à¦¯" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigation Mesh তৈরি করà§à¦¨" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -28221,6 +28522,26 @@ msgstr "রৈখিক/লিনিয়ার" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "সাধারণ/ডিফলà§à¦Ÿ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ পà§à¦°à¦¿à¦à¦¿à¦‰" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" @@ -28948,6 +29269,5 @@ msgid "Log Active Async Compiles Count" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Shader Cache Size (MB)" -msgstr "Camera à¦à¦° আকার পরিবরà§à¦¤à¦¨ করà§à¦¨" +msgstr "শেডার কà§à¦¯à¦¾à¦¸à§‡ আকার (MB)" diff --git a/editor/translations/br.po b/editor/translations/br.po index c98db2ab4a..3d1ca48f3f 100644 --- a/editor/translations/br.po +++ b/editor/translations/br.po @@ -209,9 +209,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -362,6 +363,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Roudenn Galv Metodenn" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -544,7 +554,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -627,24 +638,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -752,7 +762,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2160,7 +2171,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2451,7 +2462,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2707,6 +2718,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2719,6 +2746,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2821,8 +2868,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2993,9 +3057,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4074,14 +4138,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4197,6 +4253,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4224,6 +4284,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4952,6 +5016,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5210,7 +5278,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6600,7 +6670,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Aktivañ ar Roudenn" @@ -6874,6 +6944,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9755,6 +9837,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11108,7 +11191,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12068,8 +12151,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13491,31 +13573,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13650,6 +13711,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15902,7 +15967,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16466,7 +16531,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16492,6 +16556,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Talvoud :" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17935,10 +18012,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18042,12 +18115,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18063,6 +18139,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18091,7 +18171,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18102,19 +18182,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18127,7 +18205,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18142,7 +18220,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18150,15 +18228,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18168,7 +18243,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18396,6 +18471,15 @@ msgstr "Fonksionoù :" msgid "Custom BG Color" msgstr "Fonksionoù :" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18417,19 +18501,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Indeks fall a dip %s evit an tip diazez %s" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Tro Fiñvskeudenn" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18503,15 +18597,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18781,9 +18875,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Tro Fiñvskeudenn" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18799,18 +18910,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Fonksionoù :" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Roudenn Treuzfurmadur 3D" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -18818,7 +18982,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18859,6 +19023,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Tro Fiñvskeudenn" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19155,6 +19328,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19195,6 +19372,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Argumant fall evit sevel '%s'" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19213,6 +19447,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19228,6 +19478,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19339,7 +19593,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20099,13 +20354,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21185,12 +21442,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23621,6 +23872,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24894,7 +25155,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24971,10 +25232,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Tro Fiñvskeudenn" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24987,7 +25253,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24999,11 +25269,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Fonksionoù :" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25016,6 +25291,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25032,7 +25311,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25402,6 +25681,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Tro Fiñvskeudenn" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25417,6 +25701,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Talvoud :" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Talvoud :" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Talvoud :" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Tro Fiñvskeudenn" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 142ea75e28..380a247ac7 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -16,13 +16,14 @@ # Roberto Pérez <djleizar@gmail.com>, 2021. # Joel Garcia Cascalló <jocsencat@gmail.com>, 2021. # DFC <damiafluixacanals28@gmail.com>, 2021. +# Roger VC <rogervilarasau@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-03 13:13+0000\n" -"Last-Translator: roger <616steam@gmail.com>\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" +"Last-Translator: Roger VC <rogervilarasau@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" "Language: ca\n" @@ -30,11 +31,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.12-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "Controlador de tauleta" #: core/bind/core_bind.cpp msgid "Clipboard" @@ -46,20 +47,19 @@ msgstr "Escena Actual" #: core/bind/core_bind.cpp msgid "Exit Code" -msgstr "" +msgstr "Codi de sortida" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "V-Sync Activat" +msgstr "Sincronització Vertical habilitada" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" -msgstr "" +msgstr "V-Sync mitjançant Compositor" #: core/bind/core_bind.cpp main/main.cpp msgid "Delta Smoothing" -msgstr "" +msgstr "Suavitzat delta" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode" @@ -91,13 +91,12 @@ msgid "Window" msgstr "Finestra" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Borderless" msgstr "Sense Vores" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "Transparència per pÃxel activada" #: core/bind/core_bind.cpp core/project_settings.cpp msgid "Fullscreen" @@ -105,7 +104,7 @@ msgstr "Pantalla Completa" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Maximitzat" #: core/bind/core_bind.cpp msgid "Minimized" @@ -114,7 +113,7 @@ msgstr "Minimitzat" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" -msgstr "" +msgstr "Redimensionable" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp @@ -146,7 +145,7 @@ msgstr "Suggeriment de l'Editor" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "Imprimeix missatges d'error" #: core/bind/core_bind.cpp msgid "Iterations Per Second" @@ -184,7 +183,7 @@ msgstr "Resultat" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "Memòria" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -195,7 +194,7 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "LÃmits" #: core/command_queue_mt.cpp msgid "Command Queue" @@ -203,7 +202,7 @@ msgstr "Cua de Comandes" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "Mida de la cua de multiprocés (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp @@ -215,19 +214,19 @@ msgstr "Funció" #: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Data" -msgstr "" +msgstr "Dades" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Xarxa" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "Remot " +msgstr "FS remot" #: core/io/file_access_network.cpp msgid "Page Size" @@ -239,7 +238,7 @@ msgstr "" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "" +msgstr "Mode de bloqueig activat" #: core/io/http_client.cpp msgid "Connection" @@ -260,7 +259,7 @@ msgstr "Activa l'Efecte Paper Ceba" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Rebutja les noves connexions de xarxa" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp #, fuzzy @@ -286,11 +285,11 @@ msgstr "" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" -msgstr "" +msgstr "Mida mà xima del buffer d'entrada" #: core/io/packet_peer.cpp msgid "Output Buffer Max Size" -msgstr "" +msgstr "Mida mà xima del buffer de sortida" #: core/io/packet_peer.cpp msgid "Stream Peer" @@ -302,16 +301,15 @@ msgstr "" #: core/io/stream_peer.cpp msgid "Data Array" -msgstr "" +msgstr "Matriu de dades" #: core/io/stream_peer_ssl.cpp msgid "Blocking Handshake" msgstr "" #: core/io/udp_server.cpp -#, fuzzy msgid "Max Pending Connections" -msgstr "Editar Connexió:" +msgstr "Mà xim de connexions pendents" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -360,7 +358,7 @@ msgstr "En la crida a '%s':" #: core/math/random_number_generator.cpp #: modules/opensimplex/open_simplex_noise.cpp msgid "Seed" -msgstr "" +msgstr "Llavor" #: core/math/random_number_generator.cpp msgid "State" @@ -368,11 +366,21 @@ msgstr "Estat" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "Cua de missatges" #: core/message_queue.cpp msgid "Max Size (KB)" -msgstr "" +msgstr "Mida mà xima (KB)" + +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mode de moviment" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Elimina l'Entrada" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -386,7 +394,7 @@ msgstr "Tot" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: core/os/input_event.cpp msgid "Control" @@ -394,7 +402,7 @@ msgstr "Control" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "Meta" #: core/os/input_event.cpp #, fuzzy @@ -414,11 +422,11 @@ msgstr "Explora" #: core/os/input_event.cpp msgid "Physical Scancode" -msgstr "" +msgstr "Codi d'escaneig fÃsic" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" @@ -438,13 +446,12 @@ msgid "Factor" msgstr "Factor" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "Ãndex del Botó del ratolÃ:" +msgstr "Ãndex de botons" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "Doble clic" #: core/os/input_event.cpp msgid "Tilt" @@ -520,9 +527,8 @@ msgid "Instrument" msgstr "" #: core/os/input_event.cpp -#, fuzzy msgid "Controller Number" -msgstr "Nombre de controlador" +msgstr "Número de controlador" #: core/os/input_event.cpp msgid "Controller Value" @@ -539,9 +545,8 @@ msgid "Config" msgstr "Configuració" #: core/project_settings.cpp -#, fuzzy msgid "Project Settings Override" -msgstr "Configuració del Projecte..." +msgstr "Anul·lació de la configuració del projecte" #: core/project_settings.cpp core/resource.cpp #: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp @@ -564,7 +569,8 @@ msgstr "Descripció" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Executar" @@ -650,9 +656,12 @@ msgid "Editor" msgstr "Editor" #: core/project_settings.cpp -#, fuzzy msgid "Main Run Args" -msgstr "Arguments de l'Escena Principal:" +msgstr "Arguments d'execució principal" + +#: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Nomenclatura de l'escena" #: core/project_settings.cpp msgid "Search In File Extensions" @@ -662,18 +671,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Control de Versions" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Sistema de control de versions" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nom del Connector" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Control de Versions" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -791,7 +797,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtres" @@ -871,9 +878,8 @@ msgid "TCP" msgstr "" #: core/register_core_types.cpp -#, fuzzy msgid "Connect Timeout Seconds" -msgstr "Connexions al mètode:" +msgstr "Segons de temps d'espera de connexió" #: core/register_core_types.cpp msgid "Packet Peer Stream" @@ -1158,9 +1164,8 @@ msgstr "Localització" #: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp #: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp -#, fuzzy msgid "Rotation" -msgstr "Pas de la Rotació:" +msgstr "Rotació" #: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp @@ -1168,9 +1173,8 @@ msgid "Value" msgstr "Valor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Arg Count" -msgstr "Quantitat:" +msgstr "Quantitat d'arguments" #: editor/animation_track_editor.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp @@ -1202,14 +1206,12 @@ msgid "Stream" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start Offset" -msgstr "òfset de la quadrÃcula:" +msgstr "Desplaçament d'inici" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End Offset" -msgstr "òfset:" +msgstr "Desplaçament final" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/import/resource_importer_scene.cpp @@ -1333,14 +1335,12 @@ msgid "Remove this track." msgstr "Treu la Pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Temps (s): " +msgstr "Temps (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "Posició" +msgstr "Posició:" #: editor/animation_track_editor.cpp #, fuzzy @@ -1362,9 +1362,8 @@ msgid "Type:" msgstr "Tipus:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "Plantilla d'exportació no và lida:" +msgstr "(No và lid, tipus esperat: %s)" #: editor/animation_track_editor.cpp #, fuzzy @@ -1617,9 +1616,8 @@ msgid "Add Method Track Key" msgstr "Afegir Clau de Pista de Mètode" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "No s'ha trobat el mètode en l'objecte: " +msgstr "Mètode no trobat a l'objecte:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2232,8 +2230,8 @@ msgid "Open" msgstr "Obre" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Propietaris de:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2437,17 +2435,15 @@ msgid "%s (already exists)" msgstr "%s (ja existeix)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "" -"El contingut del(s) fitxer(s) d'asset \"%s\" - %d entra en conflicte amb el " -"vostre project:" +"El contingut del recurs \"%s\" - %d fitxer(s) entra en conflicte amb el " +"vostre projecte:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" -"Continguts de l'asset \"%s\" - Cap fitxer entra en conflicte amb el vostre " +"Contingut del recurs \"%s\": no hi ha cap fitxer en conflicte amb el vostre " "projecte:" #: editor/editor_asset_installer.cpp @@ -2464,9 +2460,8 @@ msgid "(and %s more files)" msgstr "(i %s fitxer(s) més)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "El asset \"%s\" s'ha instal·lat exitosament!" +msgstr "El recurs \"%s\" s'ha instal·lat correctament!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2547,7 +2542,7 @@ msgid "Bus Options" msgstr "Opcions del Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplica" @@ -2600,9 +2595,8 @@ msgid "There is no '%s' file." msgstr "No hi ha cap fitxer '%s'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "Desar Disseny" +msgstr "Disseny:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2725,9 +2719,8 @@ msgid "%s is an invalid path. File does not exist." msgstr "%s es un camà no và lid. El fitxer no existeix." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "%s es un camà no và lid. No està en el camà del recurs (res://)." +msgstr "%s no és un camà và lid. No a la ruta del recurs (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -2806,6 +2799,23 @@ msgid "Choose" msgstr "Tria" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "Completat amb errors." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Completat amb èxit." + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "Fallit:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Emmagatzemant Fitxer:" @@ -2818,6 +2828,29 @@ msgid "Packing" msgstr "Compressió" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Anomena i Desa" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "No s'ha pogut crear el directori." + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "No s'han pogut exportar els fitxers del projecte." + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "No es pot obrir el fitxer per llegir-lo des del camà \"%s\"." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Anomena i Desa" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2892,9 +2925,8 @@ msgid "Release" msgstr "alliberat" #: editor/editor_export.cpp -#, fuzzy msgid "Binary Format" -msgstr "Operador Color." +msgstr "Format binari" #: editor/editor_export.cpp msgid "64 Bits" @@ -2941,9 +2973,28 @@ msgstr "No s'ha trobat cap plantilla de depuració personalitzada." msgid "Custom release template not found." msgstr "No s'ha trobat cap plantilla de publicació personalitzada." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Administrar Plantilles" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "El camà d'exportació donat no existeix:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" -msgstr "No s'ha trobat la Plantilla:" +msgid "Template file not found: \"%s\"." +msgstr "No s'ha trobat el fitxer de plantilla: \"%s\"." + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "No s'ha pogut copiar la plantilla d'exportació." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Farciment" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -2992,9 +3043,8 @@ msgid "Allows to edit scripts using the integrated script editor." msgstr "Permet editar scripts utilitzant l'editor de scripts integrat." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Provides built-in access to the Asset Library." -msgstr "Proveeix accés integrat a la Llibreria de Assets." +msgstr "Proporciona accés integrat a la Biblioteca de Recursos." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." @@ -3124,9 +3174,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportar" @@ -3240,14 +3290,12 @@ msgid "Save a File" msgstr "Desa un Fitxer" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Access" -msgstr "Èxit!" +msgstr "Accés" #: editor/editor_file_dialog.cpp editor/editor_settings.cpp -#, fuzzy msgid "Display Mode" -msgstr "Mode de Reproducció:" +msgstr "Mode de visualització" #: editor/editor_file_dialog.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -3265,19 +3313,16 @@ msgid "Mode" msgstr "Mode d'Escombratge lateral" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Current Dir" -msgstr "Actual:" +msgstr "Directori actual" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Current File" -msgstr "Perfil Actual:" +msgstr "Fitxer actual" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Current Path" -msgstr "Actual:" +msgstr "Camà actual" #: editor/editor_file_dialog.cpp editor/editor_settings.cpp #: scene/gui/file_dialog.cpp @@ -3608,9 +3653,8 @@ msgid "Checked" msgstr "Element validat" #: editor/editor_inspector.cpp -#, fuzzy msgid "Draw Red" -msgstr "Crides de Dibuix:" +msgstr "Dibuixa en vermell" #: editor/editor_inspector.cpp #, fuzzy @@ -3999,10 +4043,9 @@ msgid "Save changes to '%s' before closing?" msgstr "Desar els canvis a '%s' abans de tancar?" #: editor/editor_node.cpp -#, fuzzy msgid "%s no longer exists! Please specify a new save location." msgstr "" -"%s ja no existeix! Si us plau especifiqueu una nova localització de guardat." +"%s ja no existeix! Si us plau especifiqueu una nova ubicació per desar." #: editor/editor_node.cpp msgid "" @@ -4303,15 +4346,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Escena" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Camà de l'Escena:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4400,9 +4434,8 @@ msgid "Inspector" msgstr "Inspector" #: editor/editor_node.cpp -#, fuzzy msgid "Default Property Name Style" -msgstr "Camà del Projecte:" +msgstr "Estil de nom de propietat per defecte" #: editor/editor_node.cpp msgid "Default Float Step" @@ -4440,6 +4473,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versions" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Reanomena" @@ -4468,6 +4505,10 @@ msgstr "Commutar el Mode Lliure de Distraccions." msgid "Add a new scene." msgstr "Afegeix una escena nova." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Escena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Vés a l'escena oberta anteriorment." @@ -4824,9 +4865,8 @@ msgid "Update All Changes" msgstr "Actualitzar quan es canvia" #: editor/editor_node.cpp -#, fuzzy msgid "Update Vital Changes" -msgstr "Canvis de Material:" +msgstr "Actualitza els canvis vitals" #: editor/editor_node.cpp msgid "Hide Update Spinner" @@ -5162,9 +5202,8 @@ msgid "Size:" msgstr "Mida:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Pà gina: " +msgstr "Pà gina:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5251,9 +5290,8 @@ msgid "Extend Script" msgstr "Estendre l'script" #: editor/editor_resource_picker.cpp -#, fuzzy msgid "Script Owner" -msgstr "Nom de l'script:" +msgstr "Propietari de l'script" #: editor/editor_run_native.cpp #, fuzzy @@ -5265,6 +5303,11 @@ msgstr "" "No s'ha trobat cap patró d'exportació executable per aquesta plataforma. \n" "Afegiu un patró predeterminat en el menú d'exportació." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projecte" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escriu la lògica en el mètode _run()." @@ -5426,14 +5469,12 @@ msgid "Directories" msgstr "Direccions" #: editor/editor_settings.cpp -#, fuzzy msgid "Autoscan Project Path" -msgstr "Camà del Projecte:" +msgstr "Escaneja automà ticament la ruta del projecte" #: editor/editor_settings.cpp -#, fuzzy msgid "Default Project Path" -msgstr "Camà del Projecte:" +msgstr "Camà del projecte per defecte" #: editor/editor_settings.cpp #, fuzzy @@ -5455,9 +5496,8 @@ msgid "File Dialog" msgstr "Dià leg XForm" #: editor/editor_settings.cpp -#, fuzzy msgid "Thumbnail Size" -msgstr "Miniatura..." +msgstr "Mida de la miniatura" #: editor/editor_settings.cpp msgid "Docks" @@ -5539,17 +5579,17 @@ msgid "Convert Indent On Save" msgstr "Converteix la Sagnia en Espais" #: editor/editor_settings.cpp scene/gui/text_edit.cpp -#, fuzzy msgid "Draw Tabs" -msgstr "Crides de Dibuix:" +msgstr "Dibuixa pestanyes" #: editor/editor_settings.cpp scene/gui/text_edit.cpp -#, fuzzy msgid "Draw Spaces" -msgstr "Crides de Dibuix:" +msgstr "Dibuixa espais" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Mode Navegació" @@ -5580,9 +5620,8 @@ msgid "Appearance" msgstr "" #: editor/editor_settings.cpp scene/gui/text_edit.cpp -#, fuzzy msgid "Show Line Numbers" -msgstr "LÃnia:" +msgstr "Mostra els números de lÃnia" #: editor/editor_settings.cpp #, fuzzy @@ -5728,9 +5767,8 @@ msgid "Add Type Hints" msgstr "Tipus" #: editor/editor_settings.cpp -#, fuzzy msgid "Use Single Quotes" -msgstr "Utilitzar Cometes Simples" +msgstr "Utilitza cometes simples" #: editor/editor_settings.cpp #, fuzzy @@ -5754,9 +5792,8 @@ msgid "Grid Map" msgstr "Mapa de Graella" #: editor/editor_settings.cpp modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Pick Distance" -msgstr "Trieu la distà ncia:" +msgstr "Trieu la distà ncia" #: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -5809,14 +5846,12 @@ msgid "Shape" msgstr "" #: editor/editor_settings.cpp -#, fuzzy msgid "Primary Grid Steps" -msgstr "Pas de la QuadrÃcula:" +msgstr "Passos de la quadrÃcula primà ria" #: editor/editor_settings.cpp -#, fuzzy msgid "Grid Size" -msgstr "Pas de la QuadrÃcula:" +msgstr "Mida de la quadrÃcula" #: editor/editor_settings.cpp msgid "Grid Division Level Max" @@ -6001,7 +6036,7 @@ msgstr "Elimina Elements de Classe" #: editor/editor_settings.cpp #, fuzzy msgid "Bone Selected Color" -msgstr "Perfil Actual:" +msgstr "Color seleccionat de l'os" #: editor/editor_settings.cpp msgid "Bone IK Color" @@ -6012,9 +6047,8 @@ msgid "Bone Outline Color" msgstr "" #: editor/editor_settings.cpp -#, fuzzy msgid "Bone Outline Size" -msgstr "Mida del Contorn:" +msgstr "Mida del contorn de l'os" #: editor/editor_settings.cpp msgid "Viewport Border Color" @@ -6108,9 +6142,8 @@ msgid "Auto Save" msgstr "Auto Tall" #: editor/editor_settings.cpp -#, fuzzy msgid "Save Before Running" -msgstr "Desar l'escena abans de executar-la..." +msgstr "Desa abans d'executar-lo" #: editor/editor_settings.cpp #, fuzzy @@ -6119,9 +6152,8 @@ msgstr "Vista Frontal" #: editor/editor_settings.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp -#, fuzzy msgid "Remote Host" -msgstr "Remot " +msgstr "Amfitrió remot" #: editor/editor_settings.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp @@ -6155,9 +6187,8 @@ msgstr "Gestor del Projecte" #. TRANSLATORS: Project Manager here refers to the tool used to create/manage Godot projects. #: editor/editor_settings.cpp -#, fuzzy msgid "Sorting Order" -msgstr "Reanomenant directori:" +msgstr "Ordre d'ordenació" #: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp msgid "Symbol Color" @@ -6189,16 +6220,14 @@ msgid "Comment Color" msgstr "" #: editor/editor_settings.cpp -#, fuzzy msgid "String Color" -msgstr "Emmagatzemant Fitxer:" +msgstr "Color de la cadena" #: editor/editor_settings.cpp platform/javascript/export/export.cpp #: platform/uwp/export/export.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Background Color" -msgstr "Color de fons no và lid." +msgstr "Color de fons" #: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp #, fuzzy @@ -6228,14 +6257,12 @@ msgid "Text Color" msgstr "Planta Següent" #: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Line Number Color" -msgstr "LÃnia:" +msgstr "Color del número de lÃnia" #: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Safe Line Number Color" -msgstr "LÃnia:" +msgstr "Color del número de lÃnia segura" #: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp msgid "Caret Color" @@ -6361,9 +6388,8 @@ msgid "%s Error" msgstr "Error" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open the folder containing these templates." -msgstr "Obrir la carpeta que conte aquestes plantilles." +msgstr "Obriu la carpeta que conté aquestes plantilles." #: editor/export_template_manager.cpp msgid "Uninstall these templates." @@ -6380,9 +6406,8 @@ msgid "Retrieving the mirror list..." msgstr "S'estan buscant rèpliques..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Starting the download..." -msgstr "Començant la descarrega..." +msgstr "S'està iniciant la baixada..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -6411,18 +6436,16 @@ msgid "Request failed." msgstr "Ha fallat la sol·licitud." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "La sol·licitud a acabat en un bucle de redirecció." +msgstr "La sol·licitud ha acabat en un bucle de redirecció." #: editor/export_template_manager.cpp msgid "Request failed:" msgstr "La Sol·licitud ha fallat:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download complete; extracting templates..." -msgstr "Descarrega completa; extraient plantilles..." +msgstr "S'ha completat la baixada; s'estan extraient les plantilles..." #: editor/export_template_manager.cpp #, fuzzy @@ -6449,7 +6472,6 @@ msgstr "" "informeu d'aquest problema!" #: editor/export_template_manager.cpp -#, fuzzy msgid "Best available mirror" msgstr "Millor mirall disponible" @@ -6575,9 +6597,8 @@ msgid "Uninstall" msgstr "Desinstal·lar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Valor inicial per al comptador." +msgstr "Desinstal·la les plantilles de la versió actual." #: editor/export_template_manager.cpp msgid "Download from:" @@ -6617,9 +6638,8 @@ msgid "Install from File" msgstr "Instal·lar des d'un Fitxer" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Instal·lar plantilles des d'un fitxer local." +msgstr "Instal·la plantilles des d'un fitxer local." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -7091,10 +7111,9 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp -#, fuzzy +#: scene/gui/control.cpp msgid "Filter" -msgstr "Filtres:" +msgstr "Filtre" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp @@ -7121,17 +7140,15 @@ msgstr "Auto Tall" #: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp #: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp #: scene/resources/style_box.cpp -#, fuzzy msgid "Horizontal" -msgstr "Horitzontal:" +msgstr "Horitzontal" #: editor/import/resource_importer_layered_texture.cpp #: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp #: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp #: scene/resources/style_box.cpp -#, fuzzy msgid "Vertical" -msgstr "Vertical:" +msgstr "Vertical" #: editor/import/resource_importer_obj.cpp #, fuzzy @@ -7211,9 +7228,8 @@ msgid "Root Type" msgstr "Tipus de Membre" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Root Name" -msgstr "Remot " +msgstr "Nom de l'arrel" #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -7226,18 +7242,16 @@ msgid "Custom Script" msgstr "Talla els Nodes" #: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp -#, fuzzy msgid "Storage" -msgstr "Emmagatzemant Fitxer:" +msgstr "Emmagatzematge" #: editor/import/resource_importer_scene.cpp msgid "Use Legacy Names" msgstr "" #: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp -#, fuzzy msgid "Materials" -msgstr "Canvis de Material:" +msgstr "Materials" #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -7314,14 +7328,12 @@ msgid "Enabled" msgstr "Activar" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Max Linear Error" -msgstr "Error Lineal Max.:" +msgstr "Error lineal mà xim" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Max Angular Error" -msgstr "Error Angular Max.:" +msgstr "Error angular mà xim" #: editor/import/resource_importer_scene.cpp #, fuzzy @@ -7341,9 +7353,8 @@ msgstr "Talls d'Animació" #: editor/import/resource_importer_scene.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp #: scene/3d/particles.cpp scene/resources/environment.cpp -#, fuzzy msgid "Amount" -msgstr "Quantitat:" +msgstr "Quantitat" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7359,9 +7370,8 @@ msgid "Generating Lightmaps" msgstr "S'estan generant els Lightmaps" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "S'està generant per a la Malla: " +msgstr "S'està generant per malla:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7388,6 +7398,18 @@ msgid "Saving..." msgstr "Desant..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -7445,9 +7467,8 @@ msgid "Normal Map Invert Y" msgstr "Escala aleatòria:" #: editor/import/resource_importer_texture.cpp -#, fuzzy msgid "Size Limit" -msgstr "Mida: " +msgstr "LÃmit de mida" #: editor/import/resource_importer_texture.cpp msgid "Detect 3D" @@ -7465,14 +7486,12 @@ msgid "" msgstr "" #: editor/import/resource_importer_texture_atlas.cpp -#, fuzzy msgid "Atlas File" -msgstr "Mida del Contorn:" +msgstr "Fitxer Atles" #: editor/import/resource_importer_texture_atlas.cpp -#, fuzzy msgid "Import Mode" -msgstr "Mode d'Exportació:" +msgstr "Mode d'importació" #: editor/import/resource_importer_texture_atlas.cpp #, fuzzy @@ -7484,9 +7503,8 @@ msgid "Trim Alpha Border From Region" msgstr "" #: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp -#, fuzzy msgid "Force" -msgstr "Malla d'Origen:" +msgstr "Força" #: editor/import/resource_importer_wav.cpp msgid "8 Bit" @@ -7607,9 +7625,8 @@ msgid "Failed to load resource." msgstr "No s'ha pogut carregar el recurs." #: editor/inspector_dock.cpp -#, fuzzy msgid "Property Name Style" -msgstr "Nom del Projecte:" +msgstr "Estil del nom de la propietat" #: editor/inspector_dock.cpp scene/gui/color_picker.cpp msgid "Raw" @@ -7961,9 +7978,8 @@ msgid "Blend:" msgstr "Mescla:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Parà metre Canviat:" +msgstr "Parà metre canviat:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -8041,14 +8057,12 @@ msgstr "" "que no es poden recuperar els noms de les pistes." #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Anim Clips" -msgstr "Talls d'Animació" +msgstr "Clips d'animació" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Audio Clips" -msgstr "Talls d'Àudio" +msgstr "Clips d'à udio" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Functions" @@ -8376,9 +8390,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "Definiu l'animació final. Això és útil per a sub-transicions." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "Transició: " +msgstr "Transició:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -8645,9 +8658,8 @@ msgid "Download Error" msgstr "Error en la Baixada" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Available URLs" -msgstr "Perfils Disponibles:" +msgstr "URL disponibles" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" @@ -8710,9 +8722,8 @@ msgid "All" msgstr "Tot" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Search templates, projects, and demos" -msgstr "Buscar plantilles, projectes i demos." +msgstr "Cerca plantilles, projectes i demostracions" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" @@ -9760,9 +9771,8 @@ msgstr "" #: editor/plugins/item_list_editor_plugin.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Separator" -msgstr "Separació:" +msgstr "Separador" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -9853,9 +9863,8 @@ msgid "No mesh to debug." msgstr "Cap malla per depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "El model no té UVs en aquesta capa." +msgstr "La malla no té UV a la capa %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -10195,9 +10204,8 @@ msgid "Volume" msgstr "Volum" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "Font d'Emissió: " +msgstr "Font d'emissió:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10430,6 +10438,7 @@ msgid "Points" msgstr "Punts" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgons" @@ -10610,9 +10619,8 @@ msgid "Room Generate Points" msgstr "Recompte de punts generats" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Recompte de punts generats" +msgstr "Generar punts" #: editor/plugins/room_manager_editor_plugin.cpp #, fuzzy @@ -10929,9 +10937,8 @@ msgid "Script Temperature History Size" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Current Script Background Color" -msgstr "Color de fons no và lid." +msgstr "Color de fons de l'script actual" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -10944,9 +10951,8 @@ msgid "Sort Scripts By" msgstr "Crea un Script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "List Script Names As" -msgstr "Nom de l'script:" +msgstr "Llista els noms dels scripts com a" #: editor/plugins/script_editor_plugin.cpp msgid "Exec Flags" @@ -11330,9 +11336,8 @@ msgstr "Translació" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "Escala: " +msgstr "Escalat:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp @@ -11362,27 +11367,22 @@ msgid "Yaw:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Objectes Dibuixats:" +msgstr "Objectes dibuixats:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Canvis de Material:" +msgstr "Canvis del Material:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Canvis de Shader:" +msgstr "Canvis del Shader:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Canvis de superfÃcie:" +msgstr "Canvis de la superfÃcie:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" msgstr "Crides de Dibuix:" @@ -11862,7 +11862,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "La geometria no és và lida, no es pot substituir per una malla." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Convertir a Malla2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11896,19 +11897,16 @@ msgid "Sprite" msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "Simplificació: " +msgstr "Simplificació:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "Redueix (PÃxels): " +msgstr "Redueix (PÃxels):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "Engrandeix (PÃxels): " +msgstr "Engrandeix (PÃxels):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12166,9 +12164,8 @@ msgid "With Data" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Selecciona un Node:" +msgstr "Seleccioneu per tipus de dades:" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items." @@ -12237,19 +12234,16 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Col·lapsar tot." +msgstr "Col·lapsar els tipus." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Expandir tot." +msgstr "Expandir els tipus." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Seleccioneu un Fitxer de Plantilla." +msgstr "Seleccioneu tots els elements del tema." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -12418,9 +12412,8 @@ msgid "Add Type:" msgstr "Tipus:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Afegeix un Element:" +msgstr "Afegeix un element:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -12428,9 +12421,8 @@ msgid "Add StyleBox Item" msgstr "Afegeix tots els Elements" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Elimina Element:" +msgstr "Suprimeix els elements:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" @@ -12471,9 +12463,8 @@ msgid "Editor Theme" msgstr "Editar Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Elimina el Recurs:" +msgstr "Seleccioneu un altre recurs de tema:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -12500,9 +12491,8 @@ msgid "Available Node-based types:" msgstr "Perfils Disponibles:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Type name is empty!" -msgstr "El nom del fitxer és buit." +msgstr "El nom del tipus és buit!" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -12918,8 +12908,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Seleccioneu la forma, el subtile o el Tile anterior." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Mode Regió" @@ -12952,9 +12941,8 @@ msgid "Priority" msgstr "Mode Prioritat" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/node_2d.cpp -#, fuzzy msgid "Z Index" -msgstr "Ãndex" +msgstr "Ãndex Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" @@ -14537,34 +14525,10 @@ msgstr "Esborrar la configuració '%s' ?" #: editor/project_export.cpp #, fuzzy -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"No s'ha pogut exportar el projecte per la plataforma '%s'.\n" -"Les plantilles d'exportació semblen absents o son invalides." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp -#, fuzzy msgid "Exporting All" msgstr "Exportant tot" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "El camà d'exportació donat no existeix:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Manquen d'exportació per aquesta plataforma o s'han malmès:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Camà d'exportació" @@ -14711,6 +14675,11 @@ msgid "Export templates for this platform are missing:" msgstr "Manquen les plantilles d'exportació per aquesta plataforma:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadors del Projecte" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gestor de Plantilles d'Exportació" @@ -17186,7 +17155,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgons" @@ -17816,7 +17785,6 @@ msgid "Use In Baked Light" msgstr "Precalcular Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17846,6 +17814,19 @@ msgstr "Centre" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Mode Navegació" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Mode Navegació" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Pla següent" @@ -19454,10 +19435,6 @@ msgid "Could not execute on device." msgstr "No s'ha pogut crear el directori." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -19573,12 +19550,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Senyal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19595,6 +19576,11 @@ msgid "Could not find keystore, unable to export." msgstr "No es pot obrir la plantilla per exportar." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "No s'ha pogut començar el subprocés!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19625,7 +19611,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Format d'exportació no suportat.\n" #: platform/android/export/export_plugin.cpp @@ -19640,9 +19627,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "La versió de compilació d'Android no coincideix:\n" @@ -19653,11 +19638,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "No s'han pogut exportar fitxers de projecte a gradle project\n" #: platform/android/export/export_plugin.cpp @@ -19672,7 +19658,7 @@ msgstr "Construint Projecte Android (gradle)" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "La construcció del projecte Android ha fallat, comproveu la sortida per " @@ -19692,7 +19678,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animació no trobada: '%s'" #: platform/android/export/export_plugin.cpp @@ -19701,17 +19687,15 @@ msgid "Creating APK..." msgstr "Creant els contorns..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "No s'ha trobat la plantilla APK per a exportar:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19723,7 +19707,7 @@ msgstr "Afegint %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "No s'ha pogut escriure el fitxer" #: platform/android/export/export_plugin.cpp @@ -19965,6 +19949,17 @@ msgstr "Talla els Nodes" msgid "Custom BG Color" msgstr "Talla els Nodes" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Administrar Plantilles" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "No s'ha trobat cap plantilla de publicació personalitzada." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19986,23 +19981,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Executa l'HTML exportat en el navegador per defecte." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "No es pot obrir la plantilla per exportar:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Plantilla d'exportació no và lida:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "No s'ha pogut escriure el fitxer:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Establir Marge" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "No s'ha pogut escriure el fitxer:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Separació:" @@ -20078,17 +20085,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "No es pot llegir l'intèrpret personalitzat d’ordres HTML:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "No s'ha pogut crear el directori:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Error en desar l'escena:" #: platform/javascript/export/export.cpp @@ -20388,9 +20395,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "No s'ha pogut escriure el fitxer" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "No s'ha pogut començar el subprocés!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localització" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20406,23 +20432,78 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "No s'ha trobat cap icona." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "S'ha produit un error al desar el fitxer! %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direccions" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "No s'ha pogut començar el subprocés!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Creant Miniatura" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" "No s'ha trobat la plantilla APK per a exportar:\n" "%s" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Plantilla d'exportació no và lida:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20430,7 +20511,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20472,6 +20553,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projecte" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "No s'han pogut exportar fitxers de projecte a gradle project\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Identificador no và lid:" @@ -20788,6 +20879,11 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "No es pot desar el Tema:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20835,6 +20931,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rotació aleatòria:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "No es pot obrir la plantilla per exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "No es pot obrir la plantilla per exportar." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "No es pot obrir la plantilla per exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "No es pot obrir la plantilla per exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identificador no và lid:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nom no và lid." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "No es pot desar el Tema:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20856,6 +21016,23 @@ msgid "Invalid product version:" msgstr "GUID del producte no và lid." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "L'extensió no és và lida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Finestra nova" @@ -20872,6 +21049,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -21001,7 +21182,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Trieu la distà ncia:" @@ -21868,17 +22050,19 @@ msgstr "" "polÃgon." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance ha de ser fill o nét d'un node Navigation2D. Només " -"proporciona dades de navegació." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Part inferior" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viatge" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -23118,14 +23302,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només " -"proporciona dades de navegació." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25838,6 +26014,16 @@ msgid "3D Physics" msgstr "Fotograma de FÃsica %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Mode Navegació" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Mode Navegació" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27265,7 +27451,7 @@ msgstr "Transició: " msgid "Refraction" msgstr "Separació:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27350,7 +27536,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Escala: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Estableix el Tipus de Variable" #: scene/resources/navigation_mesh.cpp @@ -27368,10 +27559,15 @@ msgid "Source Group Name" msgstr "Font" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Arguments de l'Escena Principal:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27381,11 +27577,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Mode Regió" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Combina-ho a partir de l'Escena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27399,6 +27600,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Carrega Valors predeterminats" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Trieu la distà ncia:" @@ -27416,7 +27622,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27833,6 +28039,11 @@ msgid "Scenario" msgstr "Escena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Mode Navegació" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27850,6 +28061,26 @@ msgstr "Lineal Esquerra" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Predeterminat" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Actualitzar Previsualització" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Provant" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Editar Connexió:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 2a02b432f7..9c3aea1d27 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -249,9 +249,10 @@ msgid "Data" msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "SÃÅ¥ový profiler" @@ -413,6 +414,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Režim pÅ™esouvánÃ" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Odstranit vstup" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -615,7 +626,8 @@ msgstr "Popis" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Spustit" @@ -706,6 +718,11 @@ msgid "Main Run Args" msgstr "Argumenty hlavnà scény:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Cesta ke scénÄ›:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -713,19 +730,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Správa verzÃ" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Verzovánà (VCS)" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Název pluginu:" +msgid "Version Control Plugin Name" +msgstr "Správa verzÃ" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -845,7 +858,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtry:" @@ -2291,8 +2305,8 @@ msgid "Open" msgstr "OtevÅ™Ãt" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "VlastnÃci:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2595,7 +2609,7 @@ msgid "Bus Options" msgstr "Možnosti sbÄ›rnice" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikovat" @@ -2853,6 +2867,25 @@ msgid "Choose" msgstr "Vyberte" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "KopÃrovat cestu k uzlu" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "BalÃÄek byl úspěšnÄ› nainstalován!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Selhalo:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Ukládám soubor:" @@ -2865,6 +2898,31 @@ msgid "Packing" msgstr "BalÃm" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Uložit jako" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nelze vytvoÅ™it složku." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Nelze exportovat soubory projektu" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nelze otevÅ™Ãt soubor pro zápis:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Uložit jako" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2984,11 +3042,33 @@ msgstr "Vlastnà ladÃcà šablona nebyla nalezena." msgid "Custom release template not found." msgstr "Vlastnà šablona k uveÅ™ejnÄ›nà nebyla nalezena." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Spravovat Å¡ablony" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Zadaná cesta pro export neexistuje:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Soubor Å¡ablony nenalezen:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Neplatná Å¡ablona pro export:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "ZarovnávánÃ" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "PÅ™i 32-bitovým exportu vestavÄ›né PCK nemůže být vÄ›tšà než 4 GiB." @@ -3158,9 +3238,9 @@ msgid "Import" msgstr "Import" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Export" @@ -4319,15 +4399,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scéna" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Cesta ke scénÄ›:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4456,6 +4527,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Správa verzÃ" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "PÅ™ejmenovat" @@ -4484,6 +4559,10 @@ msgstr "Zapnout nerozptylujÃcà režim." msgid "Add a new scene." msgstr "PÅ™idat novou scénu." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scéna" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "PÅ™ejÃt na pÅ™edchozà scénu." @@ -5272,6 +5351,11 @@ msgstr "" "PÅ™idejte prosÃm spustitelné pÅ™ednastavenà v exportovacÃm menu nebo definujte " "existujÃcà pÅ™ednastavenà jako spustitelné." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "NapiÅ¡te svůj kód v _run() metodÄ›." @@ -5555,7 +5639,9 @@ msgid "Draw Spaces" msgstr "Vykreslovacà volánÃ:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigace" @@ -7057,7 +7143,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtry:" @@ -7354,6 +7440,18 @@ msgid "Saving..." msgstr "UkládánÃ..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10335,6 +10433,7 @@ msgid "Points" msgstr "Body" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Polygony" @@ -11732,7 +11831,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Neplatná geometrie, nelze nahradit sÃtÃ." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Konvertovat na Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12754,8 +12854,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Vybrat pÅ™edchozà tvar, dÃlÄà dlaždici nebo dlaždici." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Oblast" @@ -14289,36 +14388,10 @@ msgid "Delete preset '%s'?" msgstr "Odstranit pÅ™edvolbu '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Export projektu pro platformu \"%s\" se nezdaÅ™il.\n" -"Zdá se, že Å¡ablony exportu chybà nebo jsou neplatné." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Export projektu pro platformu \"%s\" se nezdaÅ™il.\n" -"Může to být způsobeno problémem s konfiguracà v export profilu nebo v " -"nastavenà exportu." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exportovánà vÅ¡eho" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Zadaná cesta pro export neexistuje:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Å ablony exportu pro tuto platformu chybà nebo jsou poÅ¡kozené:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Exportovat cestu" @@ -14466,6 +14539,11 @@ msgid "Export templates for this platform are missing:" msgstr "Å ablony exportu pro tuto platformu chybÃ:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Zakladatelé projektu" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Spravovat Å¡ablony exportu" @@ -16873,7 +16951,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Polygony" @@ -17497,7 +17575,6 @@ msgid "Use In Baked Light" msgstr "Zapéct lightmapy" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17527,6 +17604,19 @@ msgstr "UprostÅ™ed" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigace" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "NavigaÄnà režim" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Dalšà rovina" @@ -19088,10 +19178,6 @@ msgid "Could not execute on device." msgstr "Nelze vytvoÅ™it složku." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Nelze najÃt nástroj 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19215,12 +19301,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signál" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19236,6 +19326,11 @@ msgid "Could not find keystore, unable to export." msgstr "NepodaÅ™ilo se najÃt úložiÅ¡tÄ› klÃÄů, nelze exportovat." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nelze spustit podproces!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19264,7 +19359,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Neplatné jméno souboru! Android APK vyžaduje pÅ™Ãponu *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Nepodporovaný formát exportu!\n" #: platform/android/export/export_plugin.cpp @@ -19276,10 +19372,9 @@ msgstr "" "verzi. PÅ™einstalujte jej z nabÃdky \"Projekt\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Neshoda verzà Android buildu:\n" @@ -19289,11 +19384,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Nelze exportovat soubory projektu do projektu gradle\n" #: platform/android/export/export_plugin.cpp @@ -19305,8 +19401,9 @@ msgid "Building Android Project (gradle)" msgstr "Buildovánà projektu pro Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Buildovánà projektu pro Android se nezdaÅ™ilo, zkontrolujte chybový výstup.\n" @@ -19326,7 +19423,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animace nenalezena: '%s'" #: platform/android/export/export_plugin.cpp @@ -19334,17 +19431,15 @@ msgid "Creating APK..." msgstr "VytvářÃm APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "NepodaÅ™ilo se najÃt Å¡ablonu APK pro export:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19354,7 +19449,8 @@ msgid "Adding files..." msgstr "PÅ™idávám soubory..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Nelze exportovat soubory projektu" #: platform/android/export/export_plugin.cpp @@ -19597,6 +19693,17 @@ msgstr "Vyjmout uzly" msgid "Custom BG Color" msgstr "Vyjmout uzly" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Spravovat Å¡ablony" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Vlastnà šablona k uveÅ™ejnÄ›nà nebyla nalezena." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat." @@ -19618,22 +19725,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Spustit vyexportované HTML ve výchozÃm prohlÞeÄi." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Nelze otevÅ™Ãt Å¡ablonu pro export:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Neplatná Å¡ablona pro export:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Nelze zapsat soubor:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Nastavit okraj" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Nelze pÅ™eÄÃst soubor:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "OddÄ›lenÃ:" @@ -19709,15 +19829,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Nebylo možné pÅ™eÄÃst HTML shell:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "NepodaÅ™ilo se vytvoÅ™it adresář serveru HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Chyba pÅ™i spuÅ¡tÄ›nà serveru HTTP:" #: platform/javascript/export/export.cpp @@ -20017,9 +20139,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Nelze exportovat soubory projektu" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nelze spustit podproces!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalizace" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20035,20 +20176,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Nebyly nalezeny žádné ikony." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Chyba pÅ™i ukládánà souboru: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "SmÄ›ry" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nelze spustit podproces!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "VytvářÃm náhled" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "NepodaÅ™ilo se najÃt Å¡ablonu APK pro export:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Neplatná Å¡ablona pro export:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20056,7 +20253,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20098,6 +20295,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Nelze exportovat soubory projektu do projektu gradle\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Neplatný identifikátor:" @@ -20410,6 +20617,11 @@ msgid "Debug Algorithm" msgstr "Ladicà program" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nelze odstranit doÄasný soubor:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20457,6 +20669,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Náhodná rotace:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "NepodaÅ™ilo se najÃt úložiÅ¡tÄ› klÃÄů, nelze exportovat." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "NepodaÅ™ilo se najÃt úložiÅ¡tÄ› klÃÄů, nelze exportovat." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "NepodaÅ™ilo se najÃt úložiÅ¡tÄ› klÃÄů, nelze exportovat." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "NepodaÅ™ilo se najÃt úložiÅ¡tÄ› klÃÄů, nelze exportovat." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Neplatný identifikátor:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Neplatný název." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nelze odstranit doÄasný soubor:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20476,6 +20752,23 @@ msgid "Invalid product version:" msgstr "Neplatné GUID produktu." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Neplatná pÅ™Ãpona." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nové okno" @@ -20492,6 +20785,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20619,7 +20916,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Vybrat vzdálenost:" @@ -21486,17 +21784,19 @@ msgstr "" "NavigationPolygon. Nastavte prosÃm vlastnost nebo nakreslete mnohoúhelnÃk." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance musà být dÃtÄ›tem nebo vnouÄetem uzlu Navigation2D. " -"Poskytuje pouze data pro navigaci." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "UprostÅ™ed dole" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Cestovat" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22727,14 +23027,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance musà být dÃtÄ›tem nebo vnouÄetem uzlu Navigation. " -"Poskytuje pouze data pro navigaci." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25452,6 +25744,16 @@ msgid "3D Physics" msgstr "Fyzikálnà snÃmek %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigace" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigace" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26879,7 +27181,7 @@ msgstr "PÅ™echod: " msgid "Refraction" msgstr "OddÄ›lenÃ:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26964,7 +27266,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Å kálovánÃ: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Nastavit typ promÄ›nné" #: scene/resources/navigation_mesh.cpp @@ -26982,10 +27289,15 @@ msgid "Source Group Name" msgstr "Zdroj" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumenty hlavnà scény:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26995,11 +27307,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Oblast" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "SlouÄit ze scény" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27013,6 +27330,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Zobrazit výchozÃ" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Vybrat vzdálenost:" @@ -27030,7 +27352,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27448,6 +27770,11 @@ msgid "Scenario" msgstr "Scéna" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigace" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27465,6 +27792,26 @@ msgstr "Levé lineárnÃ" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "VýchozÃ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Výchozà náhled" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testované" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Upravit spojenÃ:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/da.po b/editor/translations/da.po index 73819a0c91..a90d207941 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -224,9 +224,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Eksporter Projekt" @@ -384,6 +385,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Skifter Modus" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Fjern Input" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -582,7 +593,8 @@ msgstr "Beskrivelse" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -671,6 +683,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scene Sti:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -678,20 +695,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "Versionskontrol" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Node Navn:" +msgid "Version Control Plugin Name" +msgstr "Versionskontrol" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -806,7 +818,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filter:" @@ -2283,8 +2296,8 @@ msgid "Open" msgstr "Ã…ben" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Ejere af:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2598,7 +2611,7 @@ msgid "Bus Options" msgstr "Bus muligheder" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikér" @@ -2868,6 +2881,24 @@ msgid "Choose" msgstr "Vælg" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakke installeret med succes!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Fejlet:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Lagrings Fil:" @@ -2880,6 +2911,31 @@ msgid "Packing" msgstr "Pakker" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Gem som" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Kunne ikke oprette mappe." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Kunne ikke skrive til fil:\n" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Kan ikke Ã¥bne fil til skrivning:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Gem som" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2998,11 +3054,32 @@ msgstr "Brugerdefineret debug skabelonfil ikke fundet." msgid "Custom release template not found." msgstr "Brugerdefineret release skabelonfil ikke fundet." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Organiser Eksport Skabeloner" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Fil eksisterer ikke." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Skabelonfil ikke fundet:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ugyldigt eksport skabelon:\n" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Den indlejrede PCK kan ikke overstige 4 GiB ved 32-bit eksport." @@ -3191,9 +3268,9 @@ msgid "Import" msgstr "Importer" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksport" @@ -4372,15 +4449,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scene" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scene Sti:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4509,6 +4577,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "Versionskontrol" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "Omdøb" @@ -4536,6 +4609,10 @@ msgstr "Skift distraktions-fri modus." msgid "Add a new scene." msgstr "Tilføj en ny scene." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scene" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "GÃ¥ til den forrige Ã¥bnede scene." @@ -5332,6 +5409,11 @@ msgstr "" "Ingen kørbare eksport forudindstillinger fundet til denne platform.\n" "Tilføj venligst en kørbar forudindstilling i eksportmenuen." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Skriv din logik i metoden _run ()." @@ -5609,7 +5691,9 @@ msgid "Draw Spaces" msgstr "Kald" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Rediger Poly" @@ -7127,7 +7211,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filter:" @@ -7419,6 +7503,18 @@ msgid "Saving..." msgstr "Gemmer..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10481,6 +10577,7 @@ msgid "Points" msgstr "Fjern punkt" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Rediger Poly" @@ -11920,7 +12017,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Konverter Til %s" #: editor/plugins/sprite_editor_plugin.cpp @@ -12980,8 +13077,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Interpolationsmetode" @@ -14514,32 +14610,11 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "Eksporter" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Eksporter Projekt" @@ -14682,6 +14757,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projekt grundlæggere" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Organiser Eksport Skabeloner" @@ -17080,7 +17160,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Rediger Poly" @@ -17685,7 +17765,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17715,6 +17794,19 @@ msgstr "Vælg Node" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Rediger Poly" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Rediger Poly" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19289,10 +19381,6 @@ msgid "Could not execute on device." msgstr "Kunne ikke oprette mappe." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19397,12 +19485,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signaler" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19422,6 +19514,11 @@ msgid "Could not find keystore, unable to export." msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Kunne ikke starte underproces!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19452,7 +19549,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19463,20 +19560,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Kunne ikke skrive til fil:\n" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19489,7 +19585,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19505,7 +19601,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animations Længde (i sekunder)." #: platform/android/export/export_plugin.cpp @@ -19515,15 +19611,12 @@ msgstr "Forbinder..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19535,7 +19628,7 @@ msgstr "Filtrer filer..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Kunne ikke skrive til fil:\n" #: platform/android/export/export_plugin.cpp @@ -19778,6 +19871,17 @@ msgstr "Indsæt Node" msgid "Custom BG Color" msgstr "Indsæt Node" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Organiser Eksport Skabeloner" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Brugerdefineret release skabelonfil ikke fundet." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19801,25 +19905,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "Ugyldigt eksport skabelon:\n" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "Kunne ikke skrive til fil:\n" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Indhold:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Kunne ikke skrive til fil:\n" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Tællinger:" @@ -19895,17 +20008,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Kan ikke læse brugerdefineret HTML shell:\n" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Kunne ikke oprette mappe." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Error loading skrifttype." #: platform/javascript/export/export.cpp @@ -20202,9 +20315,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Kunne ikke skrive til fil:\n" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Kunne ikke starte underproces!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Rediger Poly" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20220,21 +20352,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ikke fundet!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Fejl, kan ikke gemme TileSet!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Retninger" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Kunne ikke starte underproces!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Opretter Thumbnail" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ugyldigt eksport skabelon:\n" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20242,7 +20429,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20284,6 +20471,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Navnet er ikke et gyldigt id:" @@ -20598,6 +20795,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Kan ikke fjerne:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20644,6 +20846,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstant" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Kan ikke Ã¥bne skabelon til eksport:\n" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Navnet er ikke et gyldigt id:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ugyldigt navn." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Kan ikke fjerne:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20665,6 +20931,23 @@ msgid "Invalid product version:" msgstr "Ugyldig skriftstørrelse." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Du skal bruge en gyldig udvidelse." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20680,6 +20963,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20804,7 +21091,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instans" @@ -21631,17 +21919,19 @@ msgstr "" "virke. Sæt venligst en egenskab eller tegn en polygon." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance skal være et barn eller barnebarn til en " -"Navigation2D node. Det giver kun navigationsdata." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Vælg Node" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Rejse" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22811,14 +23101,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation " -"node. Det giver kun navigationsdata." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25441,6 +25723,16 @@ msgid "3D Physics" msgstr "Fysik Frame %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Rediger Poly" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Rediger Poly" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26840,7 +27132,7 @@ msgstr "Overgang: " msgid "Refraction" msgstr "Tællinger:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26921,7 +27213,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skalér:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Sæt Variabel Type" #: scene/resources/navigation_mesh.cpp @@ -26938,10 +27235,15 @@ msgid "Source Group Name" msgstr "Ressource" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumenter:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26950,11 +27252,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Interpolationsmetode" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26967,6 +27274,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Indlæs Default" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26983,7 +27295,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27388,6 +27700,11 @@ msgid "Scenario" msgstr "Scene" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Rediger Poly" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27405,6 +27722,26 @@ msgstr "Lineær" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Standard" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ForhÃ¥ndsvisning:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Tester" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Redigér Forbindelse:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/de.po b/editor/translations/de.po index 3e5f75a75d..795dbd5328 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -280,9 +280,10 @@ msgid "Data" msgstr "Daten" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Netzwerk" @@ -432,6 +433,16 @@ msgstr "Nachrichtenwarteschlange" msgid "Max Size (KB)" msgstr "Maximalgröße (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Bewegungsmodus" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Eingang löschen" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -611,7 +622,8 @@ msgstr "Beschreibung" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Ausführen" @@ -694,6 +706,10 @@ msgid "Main Run Args" msgstr "Laufzeitargumente für Main" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Szenenbenennung" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "In Dateierweiterungen suchen" @@ -701,18 +717,15 @@ msgstr "In Dateierweiterungen suchen" msgid "Script Templates Search Path" msgstr "Suchpfad für Skriptvorlagen" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versionsverwaltung" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Autoladen beim Start" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Pluginname" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Versionsverwaltung" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -819,7 +832,8 @@ msgid "Quality" msgstr "Qualität" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filter" @@ -2239,8 +2253,8 @@ msgid "Open" msgstr "Öffnen" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Besitzer von:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2548,7 +2562,7 @@ msgid "Bus Options" msgstr "Audiobusoptionen" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplizieren" @@ -2805,6 +2819,25 @@ msgid "Choose" msgstr "Wählen" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Dateipfade vervollständigen" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paket wurde erfolgreich installiert!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Fehlgeschlagen:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Speichere Datei:" @@ -2817,6 +2850,31 @@ msgid "Packing" msgstr "Packe" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Speichern unter" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Ordner konnte nicht erstellt werden." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Projektdateien konnten nicht exportiert werden" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Datei kann nicht zum Schreiben geöffnet werden:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Speichern unter" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2934,11 +2992,33 @@ msgstr "Selbst konfigurierte Debug-Exportvorlage nicht gefunden." msgid "Custom release template not found." msgstr "Selbst konfigurierte Release-Exportvorlage nicht gefunden." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Vorlagen verwalten" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Der angegebene Export-Pfad existiert nicht:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Vorlagendatei nicht gefunden:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ungültige Exportvorlage:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Versatz" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "In 32-bit-Exporten kann das eingebettete PCK nicht größer als 4 GiB sein." @@ -3118,9 +3198,9 @@ msgid "Import" msgstr "Importieren" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportieren" @@ -4283,14 +4363,6 @@ msgstr "" "In Datei ‚%s‘ kann nicht geschrieben werden. Die Datei wird bereits " "verwendet, sie ist gesperrt, oder es ist keine Schreibberechtigung vorhanden." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Szene" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Szenenbenennung" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4405,6 +4477,10 @@ msgid "Default Color Picker Mode" msgstr "Standard Farbwahlmodus" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versionsverwaltung" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nutzername" @@ -4432,6 +4508,10 @@ msgstr "Ablenkungsfreien Modus umschalten." msgid "Add a new scene." msgstr "Eine neue Szene hinzufügen." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Szene" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Gehe zu vorher geöffneter Szene." @@ -5223,6 +5303,11 @@ msgstr "" "Keine ausführbare Exportvorlage für diese Plattform gefunden.\n" "Im Exportmenü kann eine Vorlage als ausführbar erstellt oder markiert werden." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Spiellogik sollte mit der _run()-Methode beginnen." @@ -5476,7 +5561,9 @@ msgid "Draw Spaces" msgstr "Leerzeichen anzeigen" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigation" @@ -6889,7 +6976,7 @@ msgstr "Wiederholen" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filter" @@ -7154,6 +7241,18 @@ msgid "Saving..." msgstr "Speichere..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "2D, 3D erkennen" @@ -10126,6 +10225,7 @@ msgid "Points" msgstr "Punkte" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Polygone" @@ -11509,7 +11609,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Ungültige Geometrie, Mesh kann nicht ersetzt werden." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Zu Mesh2D umwandeln" #: editor/plugins/sprite_editor_plugin.cpp @@ -12496,8 +12597,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Die vorherige Form oder (Unter-)Kachel auswählen." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Bereich" @@ -14004,36 +14104,10 @@ msgid "Delete preset '%s'?" msgstr "Vorlage ‚%s‘ löschen?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Export des Projekts für die Plattform ‚%s‘ fehlgeschlagen.\n" -"Exportvorlagen scheinen zu fehlen oder ungültig zu sein." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Export des Projekts für die Plattform ‚%s‘ fehlgeschlagen.\n" -"Es könnte an einen fehlerhaften Einstellung in den Voreinstellungen oder den " -"individuellen Exporteinstellugen liegen." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exportiere alles" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Der angegebene Export-Pfad existiert nicht:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Exportpfad" @@ -14176,6 +14250,11 @@ msgid "Export templates for this platform are missing:" msgstr "Export-Templates für diese Systeme fehlen:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projektgründer" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Verwalte Exportvorlagen" @@ -16549,7 +16628,7 @@ msgstr "Ringseiten" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "Polygon" @@ -17106,7 +17185,6 @@ msgid "Use In Baked Light" msgstr "In Baked-Light verwenden" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "Zelle" @@ -17132,6 +17210,19 @@ msgstr "Z zentrieren" msgid "Mask" msgstr "Maske" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigation" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigationsgefühl" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Nächste Ebene" @@ -18590,10 +18681,6 @@ msgid "Could not execute on device." msgstr "Ließ sich nicht auf Gerät ausführen." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Das ‚apksigner‘-Hilfswerkzeug konnte nicht gefunden werden." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18727,12 +18814,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" "Die Version des „Target Sdk“ muss größer gleich der des „Min Sdk“ sein." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Codesignierendes DMG" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "‚apksigner‘ konnte nicht gefunden werden.\n" "Ist das Programm im Android SDK build-tools-Verzeichnis vorhanden?\n" @@ -18751,6 +18843,11 @@ msgid "Could not find keystore, unable to export." msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Unterprozess konnte nicht gestartet werden!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "‚apksigner‘ gab Fehlercode #%d zurück" @@ -18782,7 +18879,8 @@ msgstr "" "Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Nicht unterstütztes Exportformat!\n" #: platform/android/export/export_plugin.cpp @@ -18795,10 +18893,9 @@ msgstr "" "Menü benötigt." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Android-Build-Versionsinkompatibilität:\n" @@ -18807,14 +18904,16 @@ msgstr "" "Bitte Android-Build-Vorlage im ‚Projekt‘-Menü neu installieren." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Kann res://android/build/res/*.xml Dateien nicht mit Projektnamen " "überschreiben" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Konnte Projektdateien nicht als Gradle-Projekt exportieren\n" #: platform/android/export/export_plugin.cpp @@ -18826,8 +18925,9 @@ msgid "Building Android Project (gradle)" msgstr "Baue Android-Projekt (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Bauen des Android-Projekts fehlgeschlagen, Fehlerdetails befinden ich in der " @@ -18848,7 +18948,8 @@ msgstr "" "im Gradle Projektverzeichnis erscheinen." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Paket nicht gefunden: %s" #: platform/android/export/export_plugin.cpp @@ -18856,17 +18957,16 @@ msgid "Creating APK..." msgstr "Erzeuge APK…" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Konnte keine APK-Vorlage zum Exportieren finden:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18880,7 +18980,8 @@ msgid "Adding files..." msgstr "Füge Dateien hinzu…" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Projektdateien konnten nicht exportiert werden" #: platform/android/export/export_plugin.cpp @@ -19104,6 +19205,17 @@ msgstr "Eigene Hintergrundfarbe verwenden" msgid "Custom BG Color" msgstr "Eigene Hintergrundfarbe" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Vorlagen verwalten" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Selbst konfigurierte Release-Exportvorlage nicht gefunden." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19126,22 +19238,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Führe exportiertes HTML im Standard-Browser des Betriebssystems aus." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Konnte Vorlage nicht zum Export öffnen:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Ungültige Exportvorlage:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Konnte Datei nicht schreiben:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Symbolbildbegrenzung" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Konnte Datei nicht lesen:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Variant" msgstr "Variante" @@ -19210,15 +19335,18 @@ msgid "Icon 512 X 512" msgstr "Symbol 512 X 512" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Konnte HTML-Shell nicht lesen:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Konnte HTTP-Server-Verzeichnis nicht erstellen:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Fehler beim Starten des HTTP-Servers:" #: platform/javascript/export/export.cpp @@ -19483,9 +19611,29 @@ msgid "Apple Team ID" msgstr "Apple-Team-ID" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Projektdateien konnten nicht exportiert werden" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Unterprozess konnte nicht gestartet werden!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Beglaubigung" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Hinweis: Der Beglaubigungsprozess dauert gewöhnlich weniger als eine Stunde. " "Nach Ablauf wird eine Bestätigungsmail versandt." @@ -19507,18 +19655,83 @@ msgstr "" "Anwendung geheftet werden (optional):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Zeitstempel sind nicht mit Ad-hoc-Signaturen kompatibel, und werden " +"deaktiviert!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Die abgehärtete Laufzeitumgebung ist nicht mit Ad-hoc-Signaturen kompatibel, " +"und wird deaktiviert!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Keine Identität gefunden." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Fehler beim Speichern von Datei: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"Relative symbolische Links werden von diesem Betriebssystem nicht " +"unterstützt, das exportierte Projekt könnte fehlerhaft sein!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Richtung" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Unterprozess konnte nicht gestartet werden!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Erzeuge App-Bundle" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Es konnte keine Vorlagen-App zum Exportieren gefunden werden:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ungültige Exportvorlage:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19527,8 +19740,9 @@ msgstr "" "unterstützt, das exportierte Projekt könnte fehlerhaft sein!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Benötigte Vorlagen-Binary ‚%s‘ nicht gefunden. Es könnte im Vorlagen-Archiv " @@ -19575,6 +19789,16 @@ msgid "Sending archive for notarization" msgstr "Sende Archiv zur Beglaubigung" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projektion" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Konnte Projektdateien nicht als Gradle-Projekt exportieren\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Ungültiger Bundle-Bezeichner:" @@ -19902,6 +20126,11 @@ msgid "Debug Algorithm" msgstr "Debug-Algorithmus" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Temporäre Datei kann nicht entfernt werden:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "Identitäts-Typ" @@ -19942,6 +20171,78 @@ msgid "Trademarks" msgstr "Handelsmarken" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Pushnachrichten" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"Das Rcedit-Werkzeug muss in den Editoreinstellungen (Export > Windows > " +"Rcedit) festgelegt werden um Icon- oder Anwendungsinformation festlegen zu " +"können." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identitäts-Typ" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ungültiger Name." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"Das Rcedit-Werkzeug muss in den Editoreinstellungen (Export > Windows > " +"Rcedit) festgelegt werden um Icon- oder Anwendungsinformation festlegen zu " +"können." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Temporäre Datei kann nicht entfernt werden:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19963,6 +20264,23 @@ msgid "Invalid product version:" msgstr "Ungültige Produktversion:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Ungültige ausführbare Datei." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Windows" @@ -19978,6 +20296,10 @@ msgstr "Osslsigncode" msgid "Wine" msgstr "Wine" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -20088,7 +20410,8 @@ msgstr "Abspielen pausiert" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "Max Distanz" @@ -20873,18 +21196,19 @@ msgstr "" "Polygon zeichnen." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance muss ein Unterobjekt erster oder zweiter Ordnung " -"unterhalb eines Navigation2D-Node sein. Es liefert nur " -"Navigationsinformationen." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "Navpolygon" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Mitte unten" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Reisen" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -21997,14 +22321,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent kann nur unter einem Spatial-Node genutzt werden." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance muss ein Unterobjekt erster oder zweiter Ordnung " -"eines Navigation-Nodes sein. Es liefert nur Navigationsinformationen." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "NavMesh" @@ -24440,6 +24756,16 @@ msgid "3D Physics" msgstr "3D-Physik" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigation" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigation" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "hiDPI verwenden" @@ -25650,7 +25976,7 @@ msgstr "Übertragung" msgid "Refraction" msgstr "Brechung" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "Details" @@ -25723,7 +26049,13 @@ msgid "Visible Instance Count" msgstr "Sichtbare Instanzen Anzahl" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +#, fuzzy +msgid "Sampling" +msgstr "Skalierung: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Probeneinteilunstyp" #: scene/resources/navigation_mesh.cpp @@ -25739,7 +26071,13 @@ msgid "Source Group Name" msgstr "Quellen-Gruppenname" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +#, fuzzy +msgid "Cells" +msgstr "Zelle" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" msgstr "Agent" #: scene/resources/navigation_mesh.cpp @@ -25751,11 +26089,17 @@ msgid "Max Slope" msgstr "Maximale Neigung" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Bereich" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "Größe der Zusammenführung" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +#, fuzzy +msgid "Edges" msgstr "Kante" #: scene/resources/navigation_mesh.cpp @@ -25767,6 +26111,11 @@ msgid "Verts Per Poly" msgstr "Vert per Poly" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Details" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "Probendistanz" @@ -25783,7 +26132,8 @@ msgid "Ledge Spans" msgstr "Vorsprünge" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +#, fuzzy +msgid "Walkable Low Height Spans" msgstr "Ablaufbare Abstände niedriger Höhe aussortiern" #: scene/resources/occluder_shape.cpp @@ -26143,6 +26493,11 @@ msgid "Scenario" msgstr "Szenario" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigation" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "Direkter Raum Zustand" @@ -26158,6 +26513,26 @@ msgstr "Standard lineare Dämpfung" msgid "Default Angular Damp" msgstr "Standard Winkeldämpfung" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Standard Gleitkommaschritte" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Zellen Größe" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Zellenhöhe" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Kantenverbindungsbegrenzung" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "Canvas/ Leinwand" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index e3c129d482..169d40ebd7 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -196,9 +196,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -346,6 +347,14 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +msgid "Mouse Mode" +msgstr "" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -525,7 +534,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -608,24 +618,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -733,7 +742,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2114,7 +2124,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2405,7 +2415,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2661,6 +2671,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2673,6 +2699,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2773,8 +2819,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2944,9 +3007,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4022,14 +4085,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4144,6 +4199,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4171,6 +4230,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4897,6 +4960,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5150,7 +5217,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6530,7 +6599,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6792,6 +6861,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9658,6 +9739,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11008,7 +11090,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11966,8 +12048,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13377,31 +13458,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13534,6 +13594,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15779,7 +15843,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16333,7 +16397,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16359,6 +16422,17 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +msgid "Bake Navigation" +msgstr "" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +msgid "Navigation Layers" +msgstr "" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17784,10 +17858,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -17891,12 +17961,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17912,6 +17985,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -17940,7 +18017,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -17951,19 +18028,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17976,7 +18051,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -17991,7 +18066,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17999,15 +18074,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18017,7 +18089,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18241,6 +18313,15 @@ msgstr "" msgid "Custom BG Color" msgstr "" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18262,19 +18343,27 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +msgid "Icon Creation" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18346,15 +18435,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18619,9 +18708,25 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization failed." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18637,15 +18742,66 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "DMG Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18656,7 +18812,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18697,6 +18853,14 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -18992,6 +19156,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19032,6 +19200,62 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19050,6 +19274,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19065,6 +19305,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19173,7 +19417,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -19919,13 +20164,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -20978,12 +21225,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23315,6 +23556,14 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +msgid "2D Navigation" +msgstr "" + +#: scene/register_scene_types.cpp +msgid "3D Navigation" +msgstr "" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24525,7 +24774,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24598,7 +24847,11 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Partition Type" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24614,7 +24867,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24626,11 +24883,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24642,6 +24903,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24658,7 +24923,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25016,6 +25281,10 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Navigation Map" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25031,6 +25300,22 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +msgid "Default Map Up" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Size" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Height" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Edge Connection Margin" +msgstr "" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index fba8b485a6..a3f5e815e1 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -218,9 +218,10 @@ msgid "Data" msgstr "ΔεδομÎνα" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Δίκτυο" @@ -375,6 +376,16 @@ msgstr "ΟυÏά Μηνυμάτων" msgid "Max Size (KB)" msgstr "ΜÎγιστο ΜÎγεθος (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "ΛειτουÏγία Μετακίνησης" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "ΔιαγÏαφή εισόδου" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -560,7 +571,8 @@ msgstr "ΠεÏιγÏαφή" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "ΕκτÎλεση" @@ -648,6 +660,10 @@ msgid "Main Run Args" msgstr "ΟÏίσματα κÏÏιας σκηνής" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Όνομα Σκηνής" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Αναζήτηση στις Επεκτάσεις ΑÏχείων" @@ -655,18 +671,15 @@ msgstr "Αναζήτηση στις Επεκτάσεις ΑÏχείων" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Έλεγχος Îκδοσης" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "ΣÏστημα ΕλÎγχου Έκδοσης" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Όνομα Î ÏοσθÎτου" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Έλεγχος Îκδοσης" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -785,7 +798,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "ΦίλτÏα" @@ -2237,8 +2251,8 @@ msgid "Open" msgstr "Άνοιγμα" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Ιδιοκτήτες του:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2551,7 +2565,7 @@ msgid "Bus Options" msgstr "ΕπιλογÎÏ‚ διαÏλου" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ΑναπαÏαγωγή" @@ -2812,6 +2826,25 @@ msgid "Choose" msgstr "ΕπιλÎξτε" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "ΑντιγÏαφή διαδÏομής κόμβου" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Το πακÎτο εγκαταστάθηκε επιτυχώς!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "ΑπÎτυχε:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "ΑÏχείο αποθήκευσης:" @@ -2824,6 +2857,31 @@ msgid "Packing" msgstr "ΠακετάÏισμα" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Αποθήκευση ÏŽÏ‚" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "ΑπÎτυχε η εγγÏαφή σε αÏχείο:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "ΑδÏνατο το άνοιγμα αÏχείου για εγγÏαφή:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Αποθήκευση ÏŽÏ‚" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2943,11 +3001,33 @@ msgstr "Δεν βÏÎθηκε Ï€ÏοσαÏμοσμÎνο πακÎτο αποσφ msgid "Custom release template not found." msgstr "Δεν βÏÎθηκε Ï€ÏοσαÏμοσμÎνο πακÎτο διανομής." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "ΔιαχείÏιση Î ÏοτÏπων" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Η δεδομÎνη διαδÏομή εξαγωγής δεν υπάÏχει:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Δεν βÏÎθηκε αÏχείο Ï€ÏοτÏπου:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "ΑναπλήÏωση" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Σε εξαγωγÎÏ‚ 32-bit, το ενσωματωμÎνο PCK δεν μποÏεί να υπεÏβαίνει τα 4 GiB." @@ -3122,9 +3202,9 @@ msgid "Import" msgstr "Εισαγωγή" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Εξαγωγή" @@ -4298,14 +4378,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Σκηνή" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Όνομα Σκηνής" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4423,6 +4495,10 @@ msgid "Default Color Picker Mode" msgstr "Î ÏοεπιλεγμÎνη ΛειτουÏγία ΕπιλογÎα ΧÏώματος" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Έλεγχος Îκδοσης" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Ψευδώνυμο" @@ -4450,6 +4526,10 @@ msgstr "Εναλλαγή λειτουÏγίας χωÏίς πεÏÎ¹ÏƒÏ€Î±ÏƒÎ¼Î¿Ï msgid "Add a new scene." msgstr "Î Ïοσθήκη νÎας σκηνής." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Σκηνή" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "ΕπιστÏοφή στην Ï€ÏοηγουμÎνως ανοιγμÎνη σκηνή." @@ -5253,6 +5333,11 @@ msgstr "" "Δεν βÏÎθηκε εκτελÎσιμη διαμόÏφωση εξαγωγής για αυτή την πλατφόÏμα.\n" "ΠαÏακαλοÏμε Ï€ÏοσθÎστε μία εκτελÎσιμη διαμόÏφωση στο Î¼ÎµÎ½Î¿Ï ÎµÎ¾Î±Î³Ï‰Î³Î®Ï‚." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "ΈÏγο" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "ΓÏάψτε τη λογική σας στη μÎθοδο _run()." @@ -5536,7 +5621,9 @@ msgid "Draw Spaces" msgstr "Κλήσεις σχεδίασης" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Πλοήγηση" @@ -7060,7 +7147,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "ΦίλτÏα:" @@ -7360,6 +7447,18 @@ msgid "Saving..." msgstr "Αποθήκευση..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10387,6 +10486,7 @@ msgid "Points" msgstr "Σημεία" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "ΠολÏγωνα" @@ -11822,7 +11922,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "ΆκυÏη γεωμετÏία, αδÏνατη η αντικατάσταση με πλÎγμα." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "ΜετατÏοπή σε Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12848,8 +12949,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Επιλογή Ï€ÏοηγοÏμενου σχήματος, υπό-πλακιδίου, ή πλακιδίου." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "ΠεÏιοχή" @@ -14402,37 +14502,10 @@ msgid "Delete preset '%s'?" msgstr "ΔιαγÏαφή διαμόÏφωσης '%s';" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Αποτυχία εξαγωγής ÎÏγου στην πλατφόÏμα «%s».\n" -"Τα Ï€Ïότυπα εξαγωγής λείπουν ή είναι άκυÏα." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Αποτυχία εξαγωγής ÎÏγου στην πλατφόÏμα «%s».\n" -"Αυτό μποÏεί να οφείλεται σε λάθος της διαμόÏφωσης εξαγωγής ή στις Ïυθμίσεις " -"εξαγωγής σας." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Εξαγωγή Όλων" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Η δεδομÎνη διαδÏομή εξαγωγής δεν υπάÏχει:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν ή είναι κατεστÏαμμÎνα:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "ΔιαδÏομή Εξαγωγής" @@ -14581,6 +14654,11 @@ msgid "Export templates for this platform are missing:" msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ΙδÏÏ…Ï„ÎÏ‚ του ÎÏγου" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "ΔιαχείÏιση Ï€ÏοτÏπων εξαγωγής" @@ -17013,7 +17091,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "ΠολÏγωνα" @@ -17640,7 +17718,6 @@ msgid "Use In Baked Light" msgstr "Î Ïοετοιμασία Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17670,6 +17747,19 @@ msgstr "ΚÎντÏο" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Πλοήγηση" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ΔημιουÏγία Πλοήγησης" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Επόμενο επίπεδο" @@ -19255,10 +19345,6 @@ msgid "Could not execute on device." msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19383,12 +19469,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Σήμα" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19405,6 +19495,11 @@ msgid "Could not find keystore, unable to export." msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19435,7 +19530,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19447,10 +19542,9 @@ msgstr "" "πληÏοφοÏίες Îκδοσης. ΠαÏακαλοÏμε κάντε επανεγκατάσταση από το Î¼ÎµÎ½Î¿Ï Â«ÎˆÏγο»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Ασυμφωνία εκδόσεων δόμησης Android:\n" @@ -19461,11 +19555,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Δεν ήταν δυνατή η εξαγωγή των αÏχείων ÎÏγου στο gradle ÎÏγο\n" #: platform/android/export/export_plugin.cpp @@ -19478,8 +19573,9 @@ msgid "Building Android Project (gradle)" msgstr "Δόμηση ΈÏγου Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Αποτυχία δόμησης ÎÏγου Android, ελÎγξτε την Îξοδο για το σφάλμα.\n" @@ -19498,7 +19594,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Δεν βÏÎθηκε η κίνηση: «%s»" #: platform/android/export/export_plugin.cpp @@ -19507,17 +19603,15 @@ msgid "Creating APK..." msgstr "ΔημιουÏγία πεÏιγÏαμμάτων..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Δεν βÏÎθηκε Ï€Ïότυπο APK για εξαγωγή:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19529,7 +19623,7 @@ msgstr "Î Ïοσθήκη %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "ΑπÎτυχε η εγγÏαφή σε αÏχείο:" #: platform/android/export/export_plugin.cpp @@ -19770,6 +19864,17 @@ msgstr "Αποκοπή κόμβων" msgid "Custom BG Color" msgstr "Αποκοπή κόμβων" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "ΔιαχείÏιση Î ÏοτÏπων" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Δεν βÏÎθηκε Ï€ÏοσαÏμοσμÎνο πακÎτο διανομής." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19793,23 +19898,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "ΕκτÎλεση εξαγόμενης HTMP στον Ï€ÏοεπιλεγμÎνο πεÏιηγητή του συστήματος." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "ΑπÎτυχε η εγγÏαφή σε αÏχείο:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ΟÏισμός ΠεÏιθωÏίου" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "ΑπÎτυχε η εγγÏαφή σε αÏχείο:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "ΔιαχωÏισμός:" @@ -19885,17 +20002,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Σφάλμα κατά την ανάγνωση Ï€ÏοσαÏμοσμÎνου κελÏφους HTML:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "ΑδÏνατη η δημιουÏγία φακÎλου." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Σφάλμα κατά την αποθήκευση σκηνής." #: platform/javascript/export/export.cpp @@ -20195,9 +20312,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "ΑπÎτυχε η εγγÏαφή σε αÏχείο:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Τοπική Ï€ÏοσαÏμογή" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20213,21 +20349,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Δεν βÏÎθηκε!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Σφάλμα αποθήκευσης αÏχείου: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Κατευθήνσεις" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "ΔημιουÏγία μικÏογÏαφίας" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20235,7 +20426,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20277,6 +20468,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "ΈÏγο" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Δεν ήταν δυνατή η εξαγωγή των αÏχείων ÎÏγου στο gradle ÎÏγο\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "ΆκυÏο ΑναγνωÏιστικό:" @@ -20589,6 +20790,11 @@ msgid "Debug Algorithm" msgstr "Αποσφαλματωτής" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Αδυναμία αφαίÏεσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20636,6 +20842,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Τυχαία πεÏιστÏοφή:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "ΆκυÏο ΑναγνωÏιστικό:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Μη ÎγκυÏο όνομα." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Αδυναμία αφαίÏεσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20657,6 +20927,23 @@ msgid "Invalid product version:" msgstr "ΆκυÏο GUID Ï€Ïοϊόντος." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "ΆκυÏη επÎκταση." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "ÎÎο ΠαÏάθυÏο" @@ -20673,6 +20960,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20800,7 +21091,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Επιλογή απόστασης:" @@ -21670,17 +21962,19 @@ msgstr "" "λειτουÏγήσει αυτός ο κόμβος. ΟÏίστε μία ιδιότητα ή ζωγÏαφίστε Îνα πολÏγωνο." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"Το NavigationPolygonInstance Ï€ÏÎπει να κληÏονομεί Îναν κόμβο Ï„Ïπου " -"Navigation2D, διότι διαθÎτει μόνο δεδομÎνα πλοήγησης." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ΚÎντÏο Κάτω" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Ταξίδι" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22925,14 +23219,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"Ένας κόμβος Ï„Ïπου στιγμιοτÏπου πλÎγματος πλοήγησης Ï€ÏÎπει να κληÏονομεί Îναν " -"κόμβο Ï„Ïπου πλοήγηση, διότι διαθÎτει μόνο δεδομÎνα πλοήγησης." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25655,6 +25941,16 @@ msgid "3D Physics" msgstr "KαÏΠφυσικής %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Πλοήγηση" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Πλοήγηση" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27081,7 +27377,7 @@ msgstr "Μετάβαση: " msgid "Refraction" msgstr "Διάθλαση" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27166,7 +27462,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Κλιμάκωση: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "ΟÏισμός Ï„Ïπου μεταβλητής" #: scene/resources/navigation_mesh.cpp @@ -27184,10 +27485,15 @@ msgid "Source Group Name" msgstr "Πηγή" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "ΟÏίσματα κÏÏιας σκηνής:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27197,11 +27503,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "ΠεÏιοχή" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Συγχώνευση από σκηνή" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27215,6 +27526,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "ΦόÏτωση Ï€Ïοεπιλογής" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Επιλογή απόστασης:" @@ -27232,7 +27548,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27647,6 +27963,11 @@ msgid "Scenario" msgstr "Σκηνή" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Πλοήγηση" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27664,6 +27985,26 @@ msgstr "ΑÏιστεÏή ΓÏαμμική" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Î ÏοεπιλεγμÎνο Βήμα Κινητής Υποδιαστολής" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ΑνανÎωση Î Ïοεπισκόπησης" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Δοκιμαστικά" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ΕπεξεÏγασία ΣÏνδεσης:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/en_Shaw.po b/editor/translations/en_Shaw.po index 174dfff1aa..14388e1c66 100644 --- a/editor/translations/en_Shaw.po +++ b/editor/translations/en_Shaw.po @@ -203,9 +203,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -356,6 +357,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "ð‘’ð‘·ð‘¤ ð‘¥ð‘§ð‘”ð‘©ð‘› ð‘‘ð‘®ð‘¨ð‘’" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -536,7 +546,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -619,24 +630,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -744,7 +754,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2135,7 +2146,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2426,7 +2437,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2682,6 +2693,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2694,6 +2721,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2796,8 +2843,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2967,9 +3031,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4045,14 +4109,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4167,6 +4223,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4194,6 +4254,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4920,6 +4984,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5176,7 +5244,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6560,7 +6630,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›" @@ -6831,6 +6901,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9706,6 +9788,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11057,7 +11140,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12015,8 +12098,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13434,31 +13516,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13592,6 +13653,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15840,7 +15905,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16398,7 +16463,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16424,6 +16488,18 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +msgid "Bake Navigation" +msgstr "" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ð‘ð‘¨ð‘¤ð‘¿:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17860,10 +17936,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -17967,12 +18039,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17988,6 +18063,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18016,7 +18095,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18027,19 +18106,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18052,7 +18129,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18067,7 +18144,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18075,15 +18152,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18093,7 +18167,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18320,6 +18394,15 @@ msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" msgid "Custom BG Color" msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18341,19 +18424,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "ð‘¦ð‘¯ð‘ð‘¨ð‘¤ð‘¦ð‘› ð‘¦ð‘¯ð‘›ð‘§ð‘’ð‘• ð‘ ð‘‘ð‘²ð‘ %s ð‘“ ð‘šð‘±ð‘• ð‘‘ð‘²ð‘ %s" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18426,15 +18519,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18704,9 +18797,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18722,18 +18832,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "3-ð‘› ð‘‘ð‘®ð‘¨ð‘¯ð‘•ð‘“ð‘¹ð‘¥ ð‘‘ð‘®ð‘¨ð‘’" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -18741,7 +18904,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18782,6 +18945,14 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19077,6 +19248,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19117,6 +19292,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "ð‘¦ð‘¯ð‘ð‘¨ð‘¤ð‘¦ð‘› ð‘¸ð‘œð‘˜ð‘©ð‘¥ð‘©ð‘¯ð‘‘ð‘• ð‘‘ ð‘’ð‘©ð‘¯ð‘•ð‘‘ð‘®ð‘³ð‘’ð‘‘ '%s'" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19135,6 +19367,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19150,6 +19398,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19260,7 +19512,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20014,13 +20267,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21094,12 +21349,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23512,6 +23761,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24776,7 +25035,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24852,10 +25111,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24868,7 +25132,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24880,11 +25148,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24897,6 +25169,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24913,7 +25189,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25281,6 +25557,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25296,6 +25577,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "ð‘ð‘¨ð‘¤ð‘¿:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ð‘ð‘¨ð‘¤ð‘¿:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ð‘ð‘¨ð‘¤ð‘¿:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index ac769e5242..46e8f898ce 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -231,9 +231,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Reta Profililo" @@ -393,6 +394,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Movada reÄimo" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -592,7 +602,8 @@ msgstr "Priskribo" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Ruli" @@ -680,6 +691,11 @@ msgid "Main Run Args" msgstr "Parametroj de ĉefa sceno:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scena dosierindiko:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -687,19 +703,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versikontrolo" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Versikontrolo" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Nomo de kromprogramon:" +msgid "Version Control Plugin Name" +msgstr "Versikontrolo" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -819,7 +831,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtriloj:" @@ -2260,8 +2273,8 @@ msgid "Open" msgstr "Malfermi" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Proprietuloj de:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2566,7 +2579,7 @@ msgid "Bus Options" msgstr "Agordoj de buso" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duobligi" @@ -2825,6 +2838,24 @@ msgid "Choose" msgstr "Elekti" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakaĵo instalis sukcese!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Eraris:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Memoras dosieron:" @@ -2837,6 +2868,31 @@ msgid "Packing" msgstr "Pakas" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Konservi kiel" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Ne povis krei dosierujon." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Ne eble komencas subprocezon!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Ne malfermeblas dosieron por skribi:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Konservi kiel" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2956,11 +3012,32 @@ msgstr "Propra sencimiga Åablonon ne trovitis." msgid "Custom release template not found." msgstr "Propra eldona Åablono ne trovitis." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Åœablono:" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "La provizinta dosierindiko ne ekzistas." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Åœablonan dosieron ne trovis:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ne eblas malfermi ZIP de eksportaj Åablonoj." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Sur 32-bita eksportoj la enigita PCK ne eblas esti pli granda ol 4 GiB." @@ -3132,9 +3209,9 @@ msgid "Import" msgstr "Enporti" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksporti" @@ -4299,15 +4376,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Sceno" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scena dosierindiko:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4436,6 +4504,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versikontrolo" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Renomi" @@ -4464,6 +4536,10 @@ msgstr "Baskuli sendistran reÄimon." msgid "Add a new scene." msgstr "Aldoni novan scenon." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Sceno" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Iri al antaÅe malfermitan scenon." @@ -5251,6 +5327,11 @@ msgstr "" "Bonvolu aldoni ruleblan antaÅagordon per la Eksporto menuo aÅ defini " "ekzistantan antaÅagordon kiel rulebla." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Skribu vian logikon en la _run() metodo." @@ -5532,7 +5613,9 @@ msgid "Draw Spaces" msgstr "Alvokoj" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Videbla navigacio" @@ -7042,7 +7125,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtriloj:" @@ -7338,6 +7421,18 @@ msgid "Saving..." msgstr "Konservas..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10329,6 +10424,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11721,8 +11817,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Konverti al CPUParticles2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12753,8 +12850,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14213,31 +14309,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14376,6 +14451,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fondintoj de la Projekto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Mastrumi eksportaj Åablonoj" @@ -16755,7 +16835,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Redakti plurlateron" @@ -17368,7 +17448,6 @@ msgid "Use In Baked Light" msgstr "Baki lummapojn" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17398,6 +17477,19 @@ msgstr "Centre" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Videbla navigacio" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Videbla navigacio" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18945,10 +19037,6 @@ msgid "Could not execute on device." msgstr "Ne povis krei dosierujon." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19052,12 +19140,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signalo" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19076,6 +19168,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Ne eble komencas subprocezon!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19105,7 +19202,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19116,20 +19213,18 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "Ne eblas redakti project.godot en projekta dosierindiko." #: platform/android/export/export_plugin.cpp @@ -19142,7 +19237,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19158,7 +19253,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Enhavo de pakaĵo:" #: platform/android/export/export_plugin.cpp @@ -19167,15 +19262,13 @@ msgid "Creating APK..." msgstr "Konektas..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Ne eble komencas subprocezon!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19187,7 +19280,7 @@ msgstr "Aldonas %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Ne eble komencas subprocezon!" #: platform/android/export/export_plugin.cpp @@ -19429,6 +19522,17 @@ msgstr "Eltondi nodo(j)n" msgid "Custom BG Color" msgstr "Eltondi nodo(j)n" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Mastrumi eksportaj Åablonoj" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Propra eldona Åablono ne trovitis." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19450,23 +19554,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Ne povis krei dosierujon." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Nevalida kromprogramo." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Ne povis krei dosierujon." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Enhavo:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Ne povis krei dosierujon." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Versio:" @@ -19542,17 +19658,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Ne povis krei dosierujon." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Ne povis krei dosierujon." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Eraras konservi TileSet!" #: platform/javascript/export/export.cpp @@ -19849,9 +19965,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ne eble komencas subprocezon!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Ne eble komencas subprocezon!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokaĵigado" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19867,18 +20002,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ne sub-risurcojn trovis." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Eraris konservi dosieron: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direktoj" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Ne eble komencas subprocezon!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Kreas bildeton" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Ne eble komencas subprocezon!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Malvalida baza dosierindiko." #: platform/osx/export/export.cpp msgid "" @@ -19888,7 +20079,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19929,6 +20120,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Ne eblas redakti project.godot en projekta dosierindiko." + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -20239,6 +20440,11 @@ msgid "Debug Algorithm" msgstr "Sencimigilo" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Ne eblas forigi provizoran dosieron:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20286,6 +20492,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Alglui animacion" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Malvalidaj argumentoj por konstrui '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Malvalida nomo." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Ne eblas forigi provizoran dosieron:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20307,6 +20573,23 @@ msgid "Invalid product version:" msgstr "Nevalida nomo de projekto." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Nevalida kromprogramo." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nova Fenestro" @@ -20323,6 +20606,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20447,7 +20734,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Ekzemplodoni" @@ -21268,15 +21556,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centre malsupre" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "VojaÄa" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22439,12 +22731,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25089,6 +25375,16 @@ msgid "3D Physics" msgstr "Fiziko-kadro %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Videbla navigacio" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Videbla navigacio" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26501,7 +26797,7 @@ msgstr "Transpaso: " msgid "Refraction" msgstr "Versio:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26583,7 +26879,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skalo:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "ÅœanÄu la tipon de %s" #: scene/resources/navigation_mesh.cpp @@ -26600,10 +26901,15 @@ msgid "Source Group Name" msgstr "Fonto" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Parametroj de ĉefa sceno:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26613,11 +26919,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Malfermi lastaj" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Kunigi el sceno" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26630,6 +26941,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Åœargi defaÅlton" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26646,7 +26962,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27056,6 +27372,11 @@ msgid "Scenario" msgstr "Sceno" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Videbla navigacio" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27073,6 +27394,26 @@ msgstr "Lineara maldekstro" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "DefaÅlto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "DefaÅlto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testada" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Redakti Konekton:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/es.po b/editor/translations/es.po index 7b51bbe077..d419b78e4b 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -84,8 +84,8 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-08 06:48+0000\n" -"Last-Translator: David MartÃnez <goddrinksjava@gmail.com>\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" +"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -93,7 +93,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -277,9 +277,10 @@ msgid "Data" msgstr "Datos" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Red" @@ -349,7 +350,7 @@ msgstr "Tamaño Máximo del Buffer de Salida" #: core/io/packet_peer.cpp msgid "Stream Peer" -msgstr "Stream Peer" +msgstr "Stream de Pares" #: core/io/stream_peer.cpp msgid "Big Endian" @@ -431,6 +432,16 @@ msgstr "Cola de Mensajes" msgid "Max Size (KB)" msgstr "Tamaño Máximo (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Modo de Movimiento" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Eliminar entrada" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -610,7 +621,8 @@ msgstr "Descripción" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Ejecutar" @@ -693,6 +705,10 @@ msgid "Main Run Args" msgstr "Argumentos de la Ejecución Principal" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Nombres de Escenas" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Buscar En Extensiones de Archivos" @@ -700,18 +716,15 @@ msgstr "Buscar En Extensiones de Archivos" msgid "Script Templates Search Path" msgstr "Ruta de Búsqueda de Plantillas de Scripts" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Control de Versiones" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Cargar automáticamente al inicio" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nombre del Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Control de Versiones" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -818,7 +831,8 @@ msgid "Quality" msgstr "Calidad" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtros" @@ -902,7 +916,7 @@ msgstr "Tiempo de Espera de Conexión en Segundos" #: core/register_core_types.cpp msgid "Packet Peer Stream" -msgstr "Packet Peer Stream" +msgstr "Stream de Paquetes de Pares" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" @@ -1075,7 +1089,7 @@ msgstr "Ponderar Muestras" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Voxel Cone Tracing" -msgstr "Voxel Cone Tracing" +msgstr "Trazado de Conos de Vóxeles" #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" @@ -1184,9 +1198,8 @@ msgid "Value" msgstr "Valor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Arg Count" -msgstr "Cuenta" +msgstr "Conteo de Argumentos" #: editor/animation_track_editor.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp @@ -1347,19 +1360,16 @@ msgid "Remove this track." msgstr "Eliminar esta pista." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Tiempo (s): " +msgstr "Tiempo (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "Posición" +msgstr "Posición:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "Rotación" +msgstr "Rotación:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1376,29 +1386,24 @@ msgid "Type:" msgstr "Tipo:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "Plantilla de exportación inválida:" +msgstr "(Inválido, tipo esperado: %s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "Entrada-Salida Suave" +msgstr "Relajación:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In-Handle:" -msgstr "Establecer Manipulador" +msgstr "In-Handle:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out-Handle:" -msgstr "Establecer Manipulador" +msgstr "Out-Handle:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Stream:" -msgstr "Stream Peer" +msgstr "Stream:" #: editor/animation_track_editor.cpp #, fuzzy @@ -1630,9 +1635,8 @@ msgid "Add Method Track Key" msgstr "Añadir Clave de Pista de Método" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "Método no encontrado en el objeto: " +msgstr "Método no encontrado en el objeto:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2244,8 +2248,8 @@ msgid "Open" msgstr "Abrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Propietarios De:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2549,7 +2553,7 @@ msgid "Bus Options" msgstr "Opciones de Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -2602,9 +2606,8 @@ msgid "There is no '%s' file." msgstr "No hay ningún archivo `%s'." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "Layout" +msgstr "Layout:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2806,6 +2809,23 @@ msgid "Choose" msgstr "Elegir" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "Completado con errores." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Completado con éxito." + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "Falló." + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Archivo de Almacenamiento:" @@ -2819,6 +2839,29 @@ msgid "Packing" msgstr "Empaquetando" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Guardar Como" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "No se pudo crear la carpeta." + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "Fallo en la exportación de los archivos del proyecto." + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "No se puede abrir el archivo a leer de la ruta \"%s\"." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Guardar Como" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2936,9 +2979,28 @@ msgstr "No se encontró la plantilla de depuración personalizada." msgid "Custom release template not found." msgstr "Plantilla release personalizada no encontrada." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Administrar Plantillas" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "La ruta de exportación proporcionada no existe." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" -msgstr "Archivo de plantilla no encontrado:" +msgid "Template file not found: \"%s\"." +msgstr "Archivo de plantilla no encontrado: \"%s\"." + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "Fallo al copiar la plantilla de exportación." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Relleno" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -3119,9 +3181,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportar" @@ -4275,14 +4337,6 @@ msgstr "" "No se puede escribir en el archivo '%s', archivo en uso, bloqueado o sin " "permisos." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Escena" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Nombres de Escenas" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4397,6 +4451,10 @@ msgid "Default Color Picker Mode" msgstr "Modo De Selección De Color Por Defecto" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versiones" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nombre de usuario" @@ -4424,6 +4482,10 @@ msgstr "Act./Desact. modo sin distracciones." msgid "Add a new scene." msgstr "Añadir nueva escena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Escena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ir a la escena abierta previamente." @@ -5120,9 +5182,8 @@ msgid "Size:" msgstr "Tamaño:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Página: " +msgstr "Página:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5219,6 +5280,11 @@ msgstr "" "Por favor, añade un preset ejecutable en el menú de exportación o define un " "preset existente como ejecutable." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proyecto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escribe tu lógica en el método _run()." @@ -5473,7 +5539,9 @@ msgid "Draw Spaces" msgstr "Dibujar Espacios" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navegación" @@ -5527,7 +5595,7 @@ msgstr "Plegado de Código" #: editor/editor_settings.cpp msgid "Word Wrap" -msgstr "" +msgstr "Ajuste de Palabras" #: editor/editor_settings.cpp msgid "Show Line Length Guidelines" @@ -5535,7 +5603,7 @@ msgstr "Mostrar GuÃas de Longitud de LÃnea" #: editor/editor_settings.cpp msgid "Line Length Guideline Soft Column" -msgstr "" +msgstr "Directriz de longitud de LÃnea de Columna Flexible" #: editor/editor_settings.cpp msgid "Line Length Guideline Hard Column" @@ -5636,9 +5704,8 @@ msgid "Complete File Paths" msgstr "Completar Rutas de Archivos" #: editor/editor_settings.cpp modules/gdscript/gdscript_editor.cpp -#, fuzzy msgid "Add Type Hints" -msgstr "Añadir Tipo" +msgstr "Añadir Sugerencias de Tipo" #: editor/editor_settings.cpp msgid "Use Single Quotes" @@ -5757,9 +5824,8 @@ msgid "Default Z Far" msgstr "Z Lejana por Defecto" #: editor/editor_settings.cpp -#, fuzzy msgid "Lightmap Baking Number Of CPU Threads" -msgstr "Número de Hilos de la CPU para Baking de Mapa de Luz" +msgstr "Número de hilos de la CPU para el Lightmap Baking" #: editor/editor_settings.cpp msgid "Navigation Scheme" @@ -5882,9 +5948,8 @@ msgid "Bone Selected Color" msgstr "Selección del Color de los Huesos" #: editor/editor_settings.cpp -#, fuzzy msgid "Bone IK Color" -msgstr "Color IK Hueso" +msgstr "Color del hueso IK" #: editor/editor_settings.cpp msgid "Bone Outline Color" @@ -6913,7 +6978,7 @@ msgstr "Repetir" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filtro" @@ -7171,9 +7236,8 @@ msgid "Generating Lightmaps" msgstr "Generando Lightmaps" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "Generando para la Malla: " +msgstr "Generar para el Mesh:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7201,6 +7265,18 @@ msgid "Saving..." msgstr "Guardando..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -8183,9 +8259,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "Asignar la animación de fin. Esto es útil para sub-transiciones." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "Transición: " +msgstr "Transición:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9963,9 +10038,8 @@ msgid "Volume" msgstr "Volumen" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "Fuente de Emisión: " +msgstr "Fuente de Emisión:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10198,6 +10272,7 @@ msgid "Points" msgstr "Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgonos" @@ -11063,15 +11138,13 @@ msgstr "Mover" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "Escalado: " +msgstr "Escala:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "Trasladar: " +msgstr "Trasladar:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11582,7 +11655,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "GeometrÃa inválida, no puede ser reemplazada por una malla." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Convertir a Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11614,19 +11688,16 @@ msgid "Sprite" msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "Simplificación: " +msgstr "Simplificación:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "Encoger (PÃxeles): " +msgstr "Reducción (PÃxeles):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "Crecer (Pixeles): " +msgstr "Crecimiento (PÃxeles):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12581,8 +12652,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Seleccionar la anterior forma, subtile, o Tile." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Región" @@ -14106,37 +14176,10 @@ msgid "Delete preset '%s'?" msgstr "¿Eliminar preajuste '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"No se pudo exportar el proyecto para la plataforma '%s'.\n" -"Las plantillas de exportación parecen faltar o ser inválidas." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"No se pudo exportar el proyecto para la plataforma '%s'.\n" -"Esto puede ser debido a un problema de configuración en el preset de " -"exportación o en la configuración de exportación." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exportar Todo" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "La ruta de exportación especificada no existe:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Las plantillas de exportación para esta plataforma faltan/están corruptas:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Ruta de Exportación" @@ -14279,6 +14322,11 @@ msgid "Export templates for this platform are missing:" msgstr "Faltan plantillas de exportación para esta plataforma:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadores del Proyecto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Administrar Plantillas de Exportación" @@ -15831,9 +15879,8 @@ msgid "Attach Node Script" msgstr "Añadir Script de Nodo" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote %s:" -msgstr "Remoto " +msgstr "Remoto %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16706,7 +16753,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgonos" @@ -16879,9 +16926,8 @@ msgid "Disabled GDNative Singleton" msgstr "GDNative Singleton desactivado" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries:" -msgstr "Bibliotecas: " +msgstr "LibrerÃas:" #: modules/gdnative/nativescript/nativescript.cpp msgid "Class Name" @@ -17316,7 +17362,6 @@ msgid "Use In Baked Light" msgstr "Calcular Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17346,6 +17391,19 @@ msgstr "Centro" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navegación" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Modo de Navegación" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Siguiente Plano" @@ -17760,9 +17818,8 @@ msgstr "" "trabajo de nodos. Prueba arreglando el nodo." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "El nodo devolvió una secuencia de salida incorrecta: " +msgstr "El nodo ha devuelto una secuencia de salida inválida:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -17771,9 +17828,8 @@ msgstr "" "problema!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Stack overflow with stack depth:" -msgstr "Desbordamiento de pila en el nivel: " +msgstr "Desbordamiento de pila con profundidad de pila:" #: modules/visual_script/visual_script.cpp #, fuzzy @@ -18143,18 +18199,16 @@ msgid "for (elem) in (input):" msgstr "for (elem) in (input):" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Input type not iterable:" -msgstr "El tipo de entrada no es iterable: " +msgstr "Tipo de entrada no iterable:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" msgstr "El iterador ya no es correcto" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Iterator became invalid:" -msgstr "El iterador ya no es correcto: " +msgstr "El iterador es inválido:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -18316,14 +18370,12 @@ msgid "Operator" msgstr "Iterador" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid argument of type:" -msgstr ": Argumento incorrecto de tipo: " +msgstr "Argumento inválido de tipo:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid arguments:" -msgstr ": Argumentos incorrectos: " +msgstr "Argumentos inválidos:" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -18335,14 +18387,12 @@ msgid "Var Name" msgstr "Nombre" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script:" -msgstr "VariableGet no encontrado en el script: " +msgstr "VariableGet no encontrada en el script:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script:" -msgstr "VariableSet no encontrado en el script: " +msgstr "VariableSet no encontrada en el script:" #: modules/visual_script/visual_script_nodes.cpp msgid "Preload" @@ -18871,10 +18921,6 @@ msgid "Could not execute on device." msgstr "No se ha podido ejecutar en el dispositivo." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "No se pudo encontrar la herramienta 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19009,17 +19055,20 @@ msgstr "" "La versión de \"Target Sdk\" debe ser mayor o igual que la versión de \"Min " "Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Firma de código DMG" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" -"No se ha encontrado 'apksigner'.\n" -"Por favor, compruebe que el comando está disponible en el directorio Android " -"SDK build-tools.\n" -"El resultado %s es sin firma." +"No se ha encontrado el 'apksigner'. Por favor, comprueba que el comando está " +"disponible en el directorio Android SDK build-tools. El resultado %s es sin " +"firma." #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." @@ -19034,6 +19083,10 @@ msgid "Could not find keystore, unable to export." msgstr "No se pudo encontrar la keystore, no se puedo exportar." #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "No se ha podido iniciar el ejecutable apksigner." + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' ha retornado con error #%d" @@ -19063,8 +19116,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" -msgstr "¡Formato de exportación no compatible!\n" +msgid "Unsupported export format!" +msgstr "¡Formato de exportación no compatible!" #: platform/android/export/export_plugin.cpp msgid "" @@ -19077,27 +19130,23 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" -"La versión de compilación de Android no coincide:\n" -" Plantilla instalada: %s\n" -" Versión de Godot: %s\n" -"Por favor, reinstala la plantilla de compilación de Android desde el menú " -"'Proyecto'." +"La versión de compilación de Android no coincide: Plantilla instalada: %s, " +"versión de Godot: %s. Reinstala la plantilla de compilación de Android desde " +"el menú \"Proyecto\"." #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "No se puede sobrescribir los archivos res://android/build/res/*.xml con el " -"nombre del proyecto" +"mismo nombre del proyecto." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle\n" +msgid "Could not export project files to gradle project." +msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle." #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19109,11 +19158,11 @@ msgstr "Construir Proyecto Android (gradle)" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"La construcción del proyecto Android falló, comprueba la salida del error.\n" -"También puedes visitar docs.godotengine.org para consultar la documentación " +"La compilación del proyecto Android ha fallado, comprueba la salida del " +"error. También puedes visitar docs.godotengine.org para ver la documentación " "de compilación de Android." #: platform/android/export/export_plugin.cpp @@ -19129,40 +19178,35 @@ msgstr "" "directorio del proyecto de gradle para ver los resultados." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" -msgstr "Paquete no encontrado:% s" +msgid "Package not found: \"%s\"." +msgstr "Paquete no encontrado: \"%s\"." #: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Creando APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" -"No se pudo encontrar la plantilla APK para exportar:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." +msgstr "No se pudo encontrar la plantilla APK para exportar: \"%s\"." #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" -"Faltan bibliotecas en la plantilla de exportación para las arquitecturas " -"seleccionadas: %s.\n" -"Por favor, construya una plantilla con todas las bibliotecas necesarias, o " -"desmarque las arquitecturas que faltan en el preajuste de exportación." +"Faltan librerÃas en la plantilla de exportación para las arquitecturas " +"seleccionadas: %s. Por favor, crea una plantilla con todas las librerÃas " +"necesarias, o desmarca las arquitecturas que faltan en el preset de " +"exportación." #: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Añadiendo archivos ..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "No se pudieron exportar los archivos del proyecto" +msgid "Could not export project files." +msgstr "No se han podido exportar los archivos del proyecto." #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -19401,6 +19445,17 @@ msgstr "CustomNode" msgid "Custom BG Color" msgstr "CustomNode" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Administrar Plantillas" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Plantilla release personalizada no encontrada." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19423,20 +19478,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "Ejecutar HTML exportado en el navegador predeterminado del sistema." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "No se pudo abrir la plantilla para exportar:" +msgid "Could not open template for export: \"%s\"." +msgstr "No se pudo abrir la plantilla para la exportación: \"%s\"." + +#: platform/javascript/export/export.cpp +msgid "Invalid export template: \"%s\"." +msgstr "Plantilla de exportación inválida: \"%s\"." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "Plantilla de exportación inválida:" +msgid "Could not write file: \"%s\"." +msgstr "No se pudo escribir el archivo: \"%s\"." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Asignar Margen" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "No se puede escribir en el archivo:" +msgid "Could not read file: \"%s\"." +msgstr "No se pudo leer el archivo: \"%s\"." #: platform/javascript/export/export.cpp -msgid "Could not read file:" -msgstr "No se pudo leer el archivo:" +msgid "PWA" +msgstr "" #: platform/javascript/export/export.cpp msgid "Variant" @@ -19512,16 +19576,16 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "No se pudo leer el shell HTML:" +msgid "Could not read HTML shell: \"%s\"." +msgstr "No se ha podido leer el HTML shell: \"%s\"." #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" -msgstr "No se pudo crear el directorio del servidor HTTP:" +msgid "Could not create HTTP server directory: %s." +msgstr "No se ha podido crear el directorio del servidor HTTP: %s." #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "Error al iniciar el servidor HTTP:" +msgid "Error starting HTTP server: %d." +msgstr "Error al iniciar el servidor HTTP: %d." #: platform/javascript/export/export.cpp msgid "Web" @@ -19812,9 +19876,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "No se ha podido abrir el archivo de icono \"%s\"." + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "No se ha podido iniciar el ejecutable xcrun." + +#: platform/osx/export/export.cpp +msgid "Notarization failed." +msgstr "La notarización ha fallado." + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Nota: El proceso de notarización generalmente toma menos de una hora. Cuando " "se complete el proceso, recibirá un correo electrónico." @@ -19836,16 +19917,76 @@ msgstr "" "notarial a la aplicación exportada (opcional):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"El sellado de tiempo no es compatible con la firma ad-hoc, y se desactivará!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Hardened Runtime no es compatible con la firma ad-hoc, y se desactivará!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "No se encontró identidad." #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "No se puede firmar el archivo %s." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"Los enlaces simbólicos relativos no son compatibles con este sistema " +"operativo, ¡el proyecto exportado podrÃa estar dañado!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direcciones" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "No se ha podido iniciar el ejecutable hdiutil." + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Crear paquete de aplicaciones" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "No se pudo encontrar la aplicación de plantilla para exportar:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" +"No se ha podido encontrar la plantilla de la aplicación a exportar: \"%s\"." + +#: platform/osx/export/export.cpp +msgid "Invalid export format." +msgstr "Formato de exportación inválido." #: platform/osx/export/export.cpp msgid "" @@ -19856,8 +19997,9 @@ msgstr "" "operativo, ¡el proyecto exportado podrÃa estar dañado!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Plantilla binaria solicitada '%s' no encontrada. Es posible que falte en el " @@ -19904,6 +20046,15 @@ msgid "Sending archive for notarization" msgstr "Enviando archivo para notarización" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proyecto" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "No se pudo abrir el archivo a leer de la ruta \"%s\"." + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificador de paquete no válido:" @@ -20257,6 +20408,10 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "Fallo al renombrar el archivo temporal \"%s\"." + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20301,6 +20456,76 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Notificaciones Push" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"La herramienta rcedit debe configurarse en la configuración del editor " +"(Exportar > Windows > Rcedit) para cambiar los datos de información del " +"Ãcono o la aplicación." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "Tipo de identificador inválido." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nombre inválido." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"La herramienta rcedit debe configurarse en la configuración del editor " +"(Exportar > Windows > Rcedit) para cambiar los datos de información del " +"Ãcono o la aplicación." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "No se ha podido eliminar el archivo temporal \"%s\"." + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20322,6 +20547,23 @@ msgid "Invalid product version:" msgstr "Versión de producto no válida:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Archivo ejecutable no válido." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nueva Ventana" @@ -20338,6 +20580,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20465,7 +20711,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "Distancia Maxima" @@ -21328,17 +21575,19 @@ msgstr "" "funcione. Por favor, establece la propiedad o dibuja un polÃgono." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance debe ser hijo o nieto de un nodo Navigation2D. " -"Solo provee datos de navegación." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centro Inferior" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viaje" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22563,14 +22812,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "El NavigationAgent sólo puede utilizarse bajo un nodo spatial." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance debe ser hijo o nieto de un nodo Navigation. Ya que " -"sólo proporciona los datos de navegación." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -23581,9 +23822,8 @@ msgid "Cast Shadow" msgstr "Sombra Proyectada" #: scene/3d/visual_instance.cpp -#, fuzzy msgid "Extra Cull Margin" -msgstr "Argumentos extras de llamada:" +msgstr "Margen de Sacrificio Extra" #: scene/3d/visual_instance.cpp #, fuzzy @@ -23674,9 +23914,8 @@ msgid "Delay" msgstr "" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Random Delay" -msgstr "Inclinación al azar:" +msgstr "Retraso Aleatorio" #: scene/animation/animation_blend_tree.cpp #, fuzzy @@ -24161,9 +24400,8 @@ msgid "Right Disconnects" msgstr "Desconectar" #: scene/gui/graph_edit.cpp -#, fuzzy msgid "Scroll Offset" -msgstr "Desplazamiento de CuadrÃcula:" +msgstr "Desplazamiento de Scroll" #: scene/gui/graph_edit.cpp msgid "Snap Distance" @@ -25267,6 +25505,16 @@ msgid "3D Physics" msgstr "FÃsica" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26001,12 +26249,11 @@ msgstr "Fuente Principal" #: scene/resources/default_theme/default_theme.cpp #, fuzzy msgid "Table H Separation" -msgstr "Separación:" +msgstr "Separación de Tabla H" #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Table V Separation" -msgstr "Separación:" +msgstr "Separación de Tabla V" #: scene/resources/default_theme/default_theme.cpp msgid "Margin Left" @@ -26265,9 +26512,8 @@ msgid "Max Steps" msgstr "Paso" #: scene/resources/environment.cpp -#, fuzzy msgid "Fade In" -msgstr "Fundido de entrada (s):" +msgstr "Fundido de Entrada" #: scene/resources/environment.cpp msgid "Fade Out" @@ -26409,9 +26655,8 @@ msgid "Color Correction" msgstr "Corrección del Color" #: scene/resources/font.cpp -#, fuzzy msgid "Ascent" -msgstr "Recientes:" +msgstr "Aumento" #: scene/resources/font.cpp #, fuzzy @@ -26424,9 +26669,8 @@ msgid "Raw Data" msgstr "Profundidad" #: scene/resources/gradient.cpp -#, fuzzy msgid "Offsets" -msgstr "Offset:" +msgstr "Desplazamientos" #: scene/resources/height_map_shape.cpp msgid "Map Width" @@ -26662,7 +26906,7 @@ msgstr "Transmisión" msgid "Refraction" msgstr "Refracción" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26744,8 +26988,12 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Sampling" +msgstr "Muestreo" + +#: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Partition Type" msgstr "Establecer tipo de base de variación" #: scene/resources/navigation_mesh.cpp @@ -26762,10 +27010,15 @@ msgid "Source Group Name" msgstr "Fuente" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Segmentos" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26775,11 +27028,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Región" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Unir desde escena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26791,6 +27049,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Mostrar Por Defecto" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "Distancia de Muestreo" @@ -26807,7 +27070,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27209,6 +27472,11 @@ msgid "Scenario" msgstr "Escena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navegación" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27226,6 +27494,26 @@ msgstr "Izquierda Lineal" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Escalonado de Flotantes por Defecto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Vista Previa Por Defecto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Prueba" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Margen de Conexión de Bordes" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" @@ -27309,9 +27597,8 @@ msgstr "" #: servers/audio/effects/audio_effect_chorus.cpp #: servers/audio/effects/audio_effect_delay.cpp #: servers/audio/effects/audio_effect_panner.cpp -#, fuzzy msgid "Pan" -msgstr "Plano:" +msgstr "Pan" #: servers/audio/effects/audio_effect_compressor.cpp #: servers/audio/effects/audio_effect_filter.cpp @@ -27929,7 +28216,7 @@ msgstr "Ver Eliminación de Oclusión" #: servers/visual_server.cpp msgid "Max Active Spheres" -msgstr "" +msgstr "Esferas Activas Máximas" #: servers/visual_server.cpp msgid "Max Active Polygons" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 0ee8ba09ff..c79bf0828f 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -19,13 +19,14 @@ # Joakker <joaquinandresleon108@gmail.com>, 2020. # M3CG <cgmario1999@gmail.com>, 2021, 2022. # Manuel González <mgoopazo@gmail.com>, 2021. +# emnrx <emanuelermancia@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-28 13:54+0000\n" -"Last-Translator: M3CG <cgmario1999@gmail.com>\n" +"PO-Revision-Date: 2022-06-16 18:57+0000\n" +"Last-Translator: emnrx <emanuelermancia@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -33,19 +34,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" -msgstr "" +msgstr "Controlador de Tableta" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" -msgstr "El portapapeles está vacÃo!" +msgstr "Portapapeles" #: core/bind/core_bind.cpp -#, fuzzy msgid "Current Screen" msgstr "Escena Actual" @@ -54,75 +53,65 @@ msgid "Exit Code" msgstr "" #: core/bind/core_bind.cpp -#, fuzzy msgid "V-Sync Enabled" -msgstr "Activar" +msgstr "V-Sync Activado" #: core/bind/core_bind.cpp main/main.cpp msgid "V-Sync Via Compositor" -msgstr "" +msgstr "V-Sync Via Compositor" #: core/bind/core_bind.cpp main/main.cpp msgid "Delta Smoothing" -msgstr "" +msgstr "Suavizado Delta" #: core/bind/core_bind.cpp -#, fuzzy msgid "Low Processor Usage Mode" -msgstr "Modo Mover" +msgstr "Modo de Bajo Uso del Procesador" #: core/bind/core_bind.cpp msgid "Low Processor Usage Mode Sleep (µsec)" msgstr "" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy msgid "Keep Screen On" -msgstr "Mantener el Depurador Abierto" +msgstr "Mantener Pantalla Encendida" #: core/bind/core_bind.cpp -#, fuzzy msgid "Min Window Size" -msgstr "Tamaño de Outline:" +msgstr "Tamaño MÃnimo de Ventana" #: core/bind/core_bind.cpp -#, fuzzy msgid "Max Window Size" -msgstr "Tamaño de Outline:" +msgstr "Tamaño Máximo de Ventana" #: core/bind/core_bind.cpp -#, fuzzy msgid "Screen Orientation" -msgstr "Operador Screen(trama)." +msgstr "Orientación de Pantalla" #: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp #: platform/uwp/os_uwp.cpp -#, fuzzy msgid "Window" -msgstr "Nueva Ventana" +msgstr "Ventana" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Borderless" -msgstr "PÃxeles del Borde" +msgstr "Sin Bordes" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "Transparencia Por PÃxel Activada" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Fullscreen" -msgstr "Act./Desact. Pantalla Completa" +msgstr "Pantalla Completa" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Maximizada" #: core/bind/core_bind.cpp -#, fuzzy msgid "Minimized" -msgstr "Inicializar" +msgstr "Minimizada" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp @@ -134,9 +123,8 @@ msgstr "" #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "Posición del Panel" +msgstr "Posición" #: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp #: main/main.cpp modules/gridmap/grid_map.cpp @@ -147,9 +135,8 @@ msgstr "Posición del Panel" #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp -#, fuzzy msgid "Size" -msgstr "Tamaño:" +msgstr "Tamaño" #: core/bind/core_bind.cpp msgid "Endian Swap" @@ -162,12 +149,11 @@ msgstr "Editor" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "Imprimir Mensajes de Error" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "Modo de Interpolación" +msgstr "Iteraciones Por Segundo" #: core/bind/core_bind.cpp #, fuzzy @@ -175,9 +161,8 @@ msgid "Target FPS" msgstr "Objetivo" #: core/bind/core_bind.cpp -#, fuzzy msgid "Time Scale" -msgstr "Nodo TimeScale" +msgstr "Escala de Tiempo" #: core/bind/core_bind.cpp main/main.cpp #, fuzzy @@ -194,18 +179,16 @@ msgid "Error String" msgstr "Error al Guardar" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "Error al Guardar" +msgstr "LÃnea de Error" #: core/bind/core_bind.cpp -#, fuzzy msgid "Result" -msgstr "Resultados de la Búsqueda" +msgstr "Resultado" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "Memoria" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -216,12 +199,11 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "LÃmites" #: core/command_queue_mt.cpp -#, fuzzy msgid "Command Queue" -msgstr "Command: Rotar" +msgstr "Cola de comando" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" @@ -241,9 +223,10 @@ msgid "Data" msgstr "Con Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Profiler de Red" @@ -254,9 +237,8 @@ msgid "Remote FS" msgstr "Remoto " #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Size" -msgstr "Página: " +msgstr "Tamaño de Página" #: core/io/file_access_network.cpp msgid "Page Read Ahead" @@ -267,18 +249,16 @@ msgid "Blocking Mode Enabled" msgstr "" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" -msgstr "Conectar" +msgstr "Conección" #: core/io/http_client.cpp msgid "Read Chunk Size" msgstr "" #: core/io/marshalls.cpp -#, fuzzy msgid "Object ID" -msgstr "Objetos Dibujados:" +msgstr "ID de Objeto" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp #, fuzzy @@ -300,14 +280,12 @@ msgid "Root Node" msgstr "Nombre del nodo raÃz" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "Conectar" +msgstr "Rechazar Nuevas Conexiones" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "Tipo de Transformación" +msgstr "Modo de Transferencia" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" @@ -406,28 +384,36 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Modo Mover" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Eliminar Entrada" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" msgstr "Dispositivo" #: core/os/input_event.cpp -#, fuzzy msgid "Alt" -msgstr "Todos" +msgstr "Alt" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: core/os/input_event.cpp -#, fuzzy msgid "Control" -msgstr "Control de Versiones" +msgstr "Control" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "Meta" #: core/os/input_event.cpp #, fuzzy @@ -437,9 +423,8 @@ msgstr "Comunidad" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Pressed" -msgstr "Preset" +msgstr "Presionado" #: core/os/input_event.cpp #, fuzzy @@ -453,35 +438,32 @@ msgstr "Tecla FÃsica" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" msgstr "" #: core/os/input_event.cpp scene/gui/base_button.cpp -#, fuzzy msgid "Button Mask" -msgstr "Botón" +msgstr "Máscara de Botón" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp #, fuzzy msgid "Global Position" -msgstr "Constante Global" +msgstr "Posición Global" #: core/os/input_event.cpp -#, fuzzy msgid "Factor" -msgstr "Vector" +msgstr "Factor" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "Indice de Botones de Mouse:" +msgstr "Ãndice de Botones" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "Dobleclick" #: core/os/input_event.cpp msgid "Tilt" @@ -501,9 +483,8 @@ msgstr "Ajuste Relativo" #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Speed" -msgstr "Velocidad:" +msgstr "Velocidad" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp @@ -511,14 +492,12 @@ msgid "Axis" msgstr "Eje" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "Fijar Valor" +msgstr "Valor de Eje" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Index" -msgstr "Indice:" +msgstr "Ãndice" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -529,42 +508,38 @@ msgstr "Acción" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "Fuerza" #: core/os/input_event.cpp msgid "Delta" msgstr "" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "Cambiar" +msgstr "Canal" #: core/os/input_event.cpp main/main.cpp -#, fuzzy msgid "Message" -msgstr "Mensaje de Commit" +msgstr "Mensaje" #: core/os/input_event.cpp -#, fuzzy msgid "Pitch" -msgstr "Cabeceo:" +msgstr "Tono" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp #, fuzzy msgid "Velocity" -msgstr "Orbitar Vista Hacia La Derecha" +msgstr "Velocidad" #: core/os/input_event.cpp msgid "Instrument" msgstr "" #: core/os/input_event.cpp -#, fuzzy msgid "Controller Number" -msgstr "Numero de LÃnea:" +msgstr "Número de Controlador" #: core/os/input_event.cpp msgid "Controller Value" @@ -573,9 +548,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "Acción" +msgstr "Aplicación" #: core/project_settings.cpp main/main.cpp #, fuzzy @@ -608,7 +582,8 @@ msgstr "Descripción" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Ejecutar" @@ -618,26 +593,24 @@ msgid "Main Scene" msgstr "Escena Principal" #: core/project_settings.cpp -#, fuzzy msgid "Disable stdout" -msgstr "Desactivar Autotile" +msgstr "Desactivar stdout" #: core/project_settings.cpp -#, fuzzy msgid "Disable stderr" -msgstr "Desactivar Ãtem" +msgstr "Desactivar stderr" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "Utilizar el Directorio de Datos Ocultos del Proyecto" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "Utilizar Directorio de Usuario Personalizado" #: core/project_settings.cpp msgid "Custom User Dir Name" -msgstr "" +msgstr "Nombre de Directorio de Usuario Personalizado" #: core/project_settings.cpp main/main.cpp #: platform/javascript/export/export.cpp platform/osx/export/export.cpp @@ -650,7 +623,7 @@ msgstr "Mostrar Todo" #: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp #: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp msgid "Width" -msgstr "" +msgstr "Ancho" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp @@ -658,9 +631,8 @@ msgstr "" #: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp #: scene/resources/font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp -#, fuzzy msgid "Height" -msgstr "Luz" +msgstr "Altura" #: core/project_settings.cpp msgid "Always On Top" @@ -699,32 +671,32 @@ msgid "Main Run Args" msgstr "Argumentos de Escena Principal:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Ruta a la Escena:" + +#: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "Buscar En Extensiones de Archivos" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" - -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Control de Versiones" +msgstr "Ruta de Búsqueda de Plantillas de Scripts" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Sistema de Control de Versiones" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Nombre del Plugin:" +msgid "Version Control Plugin Name" +msgstr "Control de Versiones" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "Agregar Entrada" +msgstr "Entrada" #: core/project_settings.cpp msgid "UI Accept" @@ -807,12 +779,11 @@ msgstr " (FÃsica)" #: scene/3d/physics_body.cpp scene/resources/world.cpp #: servers/physics/space_sw.cpp servers/physics_server.cpp msgid "3D" -msgstr "" +msgstr "3D" #: core/project_settings.cpp -#, fuzzy msgid "Smooth Trimesh Collision" -msgstr "Crear Collider Triangular Hermano" +msgstr "Colisión Suave de Trimesh" #: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -823,9 +794,8 @@ msgstr "Crear Collider Triangular Hermano" #: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp #: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp -#, fuzzy msgid "Rendering" -msgstr "Renderizador:" +msgstr "Renderización" #: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp @@ -835,13 +805,13 @@ msgstr "Renderizador:" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "Calidad" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" -msgstr "Filtros:" +msgstr "Filtros" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" @@ -861,9 +831,8 @@ msgstr "Depurar" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp -#, fuzzy msgid "Settings" -msgstr "Configuración:" +msgstr "Configuración" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp @@ -871,23 +840,20 @@ msgid "Profiler" msgstr "Profiler" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "Crear Función" +msgstr "Funciones Máximas" #: core/project_settings.cpp scene/3d/vehicle_body.cpp -#, fuzzy msgid "Compression" -msgstr "Expresión" +msgstr "Compresión" #: core/project_settings.cpp -#, fuzzy msgid "Formats" -msgstr "Formato" +msgstr "Formatos" #: core/project_settings.cpp msgid "Zstd" -msgstr "" +msgstr "Zstd" #: core/project_settings.cpp msgid "Long Distance Matching" @@ -895,7 +861,7 @@ msgstr "" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "Nivel de Compresión" #: core/project_settings.cpp msgid "Window Log Size" @@ -903,23 +869,23 @@ msgstr "" #: core/project_settings.cpp msgid "Zlib" -msgstr "" +msgstr "Zlib" #: core/project_settings.cpp msgid "Gzip" -msgstr "" +msgstr "Gzip" #: core/project_settings.cpp platform/android/export/export.cpp msgid "Android" -msgstr "" +msgstr "Android" #: core/project_settings.cpp msgid "Modules" -msgstr "" +msgstr "Módulos" #: core/register_core_types.cpp msgid "TCP" -msgstr "" +msgstr "TCP" #: core/register_core_types.cpp #, fuzzy @@ -932,16 +898,15 @@ msgstr "" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" -msgstr "" +msgstr "Búfer Máximo (Potencia de 2)" #: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp msgid "SSL" -msgstr "" +msgstr "SSL" #: core/register_core_types.cpp main/main.cpp -#, fuzzy msgid "Certificates" -msgstr "Vértices:" +msgstr "Certificados" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp @@ -962,9 +927,8 @@ msgid "Path" msgstr "Ruta" #: core/script_language.cpp -#, fuzzy msgid "Source Code" -msgstr "Fuente" +msgstr "Código Fuente" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" @@ -1013,7 +977,7 @@ msgstr "EiB" #: drivers/gles3/rasterizer_scene_gles3.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp msgid "Buffers" -msgstr "" +msgstr "Búferes" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp @@ -1035,7 +999,7 @@ msgstr "" #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/visual_server.cpp msgid "2D" -msgstr "" +msgstr "2D" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp @@ -1052,18 +1016,17 @@ msgstr "Usar Ajuste a Pixeles" #: drivers/gles2/rasterizer_scene_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Immediate Buffer Size (KB)" -msgstr "" +msgstr "Tamaño de Búfer Inmediato (KB)" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp -#, fuzzy msgid "Lightmapping" -msgstr "Bake Lightmaps" +msgstr "Mapeo de Luz" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Use Bicubic Sampling" -msgstr "" +msgstr "Usar Muestreo Bicúbico" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Elements" @@ -1080,11 +1043,11 @@ msgstr "Centrar Selección" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "Luces Máximas Por Objeto" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" -msgstr "" +msgstr "Dispersión Subsuperficial" #: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp #: editor/import/resource_importer_texture.cpp @@ -1100,9 +1063,8 @@ msgid "Scale" msgstr "Escalar" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Follow Surface" -msgstr "Poblar Superficie" +msgstr "Seguir Superficie" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Weight Samples" @@ -1114,7 +1076,7 @@ msgstr "" #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" -msgstr "" +msgstr "Alta Calidad" #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Blend Shape Max Buffer Size (KB)" @@ -1192,9 +1154,8 @@ msgstr "Cambiar Call de Anim" #: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Frame" -msgstr "Frame %" +msgstr "Fotograma" #: editor/animation_track_editor.cpp editor/editor_profiler.cpp #: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp @@ -1212,9 +1173,8 @@ msgstr "Localización" #: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp #: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp -#, fuzzy msgid "Rotation" -msgstr "Step de Rotación:" +msgstr "Rotación" #: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp @@ -1222,14 +1182,13 @@ msgid "Value" msgstr "Valor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Arg Count" -msgstr "Cantidad:" +msgstr "Cantidad de Argumentos" #: editor/animation_track_editor.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp msgid "Args" -msgstr "" +msgstr "Argumentos" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp @@ -2283,8 +2242,8 @@ msgid "Open" msgstr "Abrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Dueños De:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2591,7 +2550,7 @@ msgid "Bus Options" msgstr "Opciones de Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -2849,6 +2808,25 @@ msgid "Choose" msgstr "Elegir" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Copiar Ruta del Nodo" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "El Paquete se instaló exitosamente!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Fallido:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Almacenando Archivo:" @@ -2861,6 +2839,31 @@ msgid "Packing" msgstr "Empaquetando" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Guardar Como" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "No se pudo crear la carpeta." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "No se pudieron exportar los archivos del proyecto" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "No se puede abrir el archivo para escribir:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Guardar Como" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2982,11 +2985,33 @@ msgstr "Plantilla debug personalizada no encontrada." msgid "Custom release template not found." msgstr "Plantilla release personalizada no encontrada." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Administrar Plantillas" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "La ruta de exportación especificada no existe:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Plantilla no encontrada:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Plantilla de exportación inválida:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Relleno" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "En la exportación de 32 bits el PCK embebido no puede ser mayor de 4 GiB." @@ -3163,9 +3188,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportar" @@ -4337,15 +4362,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Escena" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Ruta a la Escena:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4474,6 +4490,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versiones" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nombre de usuario" @@ -4501,6 +4521,10 @@ msgstr "Act./Desact. modo sin distracciones." msgid "Add a new scene." msgstr "Agregar nueva escena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Escena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ir a la escena abierta previamente." @@ -5298,6 +5322,11 @@ msgstr "" "Por favor agregá un preset ejecutable en el menú Exportar o definà un preset " "como ejecutable." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proyecto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escribir tu lógica en el método _run()." @@ -5581,7 +5610,9 @@ msgid "Draw Spaces" msgstr "Llamadas de Dibujado:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navegación" @@ -7060,9 +7091,8 @@ msgstr "" #: editor/import/resource_importer_scene.cpp #: editor/import/resource_importer_texture.cpp #: editor/import/resource_importer_wav.cpp scene/3d/gi_probe.cpp -#, fuzzy msgid "Compress" -msgstr "Componentes" +msgstr "Comprimir" #: editor/import/resource_importer_csv_translation.cpp msgid "Delimiter" @@ -7093,7 +7123,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtros:" @@ -7390,6 +7420,18 @@ msgid "Saving..." msgstr "Guardando..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10390,6 +10432,7 @@ msgid "Points" msgstr "Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgonos" @@ -11774,7 +11817,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "GeometrÃa inválida, no se puede reemplazar por mesh." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Convertir a Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12772,8 +12816,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Seleccionar la forma, subtile o Tile anterior." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Región" @@ -14298,38 +14341,10 @@ msgid "Delete preset '%s'?" msgstr "Eliminar preset '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"No se pudo exportar el proyecto para la plataforma '%s'.\n" -"Las plantillas de exportación parecen faltar o ser inválidas." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"No se pudo exportar el proyecto para la plataforma '%s'.\n" -"Esto puede ser debido a un problema de configuración en el preset de " -"exportación o en los ajustes de exportación." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exportar Todo" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "La ruta de exportación especificada no existe:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Las plantillas de exportación para esta plataforma están faltando o " -"corruptas:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Ruta de Exportación" @@ -14477,6 +14492,11 @@ msgid "Export templates for this platform are missing:" msgstr "Faltan las plantillas de exportación para esta plataforma:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadores del Proyecto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gestionar Plantillas de Exportación" @@ -16913,7 +16933,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgonos" @@ -17319,7 +17339,7 @@ msgstr "Colores" #: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp #: scene/resources/environment.cpp msgid "Intensity" -msgstr "" +msgstr "Intensidad" #: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp #, fuzzy @@ -17539,7 +17559,6 @@ msgid "Use In Baked Light" msgstr "Bake Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17569,6 +17588,19 @@ msgstr "Centro" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navegación" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Modo Navegación" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Plano siguiente" @@ -19101,10 +19133,6 @@ msgid "Could not execute on device." msgstr "No se ha podido ejecutar en el dispositivo." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "No se pudo encontrar la herramienta 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19230,12 +19258,17 @@ msgstr "" "La versión de \"Target Sdk\" debe ser mayor o igual a la versión de \"Min " "Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Firmando código de DMG" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "No se ha encontrado 'apksigner'.\n" "Por favor, comprobá que el comando esté disponible en el directorio Android " @@ -19255,6 +19288,11 @@ msgid "Could not find keystore, unable to export." msgstr "No se pudo encontrar la keystore, no se puedo exportar." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "No se pudo comenzar el subproceso!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' ha retornado con error #%d" @@ -19284,7 +19322,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "¡Formato de exportación no soportado!\n" #: platform/android/export/export_plugin.cpp @@ -19297,10 +19336,9 @@ msgstr "" "'Proyecto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "La versión de compilación de Android no coincide:\n" @@ -19310,14 +19348,16 @@ msgstr "" "'Proyecto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "No se pudieron sobrescribir los archivos res://android/build/res/*.xml con " "el nombre del proyecto" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "" "No se pudieron exportar los archivos del proyecto a un proyecto gradle\n" @@ -19330,8 +19370,9 @@ msgid "Building Android Project (gradle)" msgstr "Construir Proyecto Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "La construcción del proyecto Android falló, comprueba la salida del error.\n" @@ -19351,7 +19392,8 @@ msgstr "" "directorio del proyecto de gradle para ver los resultados." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Paquete no encontrado:% s" #: platform/android/export/export_plugin.cpp @@ -19359,17 +19401,16 @@ msgid "Creating APK..." msgstr "Creando APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "No se pudo encontrar la plantilla APK para exportar:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19383,7 +19424,8 @@ msgid "Adding files..." msgstr "Agregando archivos..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "No se pudieron exportar los archivos del proyecto" #: platform/android/export/export_plugin.cpp @@ -19529,9 +19571,8 @@ msgid "Push Notifications" msgstr "Rotación al Azar:" #: platform/iphone/export/export.cpp -#, fuzzy msgid "User Data" -msgstr "Interfaz de Usuario" +msgstr "Datos de Usuario" #: platform/iphone/export/export.cpp msgid "Accessible From Files App" @@ -19626,6 +19667,17 @@ msgstr "CustomNode" msgid "Custom BG Color" msgstr "CustomNode" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Administrar Plantillas" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Plantilla release personalizada no encontrada." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19648,22 +19700,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Ejecutar HTML exportado en el navegador por defecto del sistema." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "No se pudo abrir la plantilla para exportar:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Plantilla de exportación inválida:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "No se pudo escribir el archivo:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Asignar Margen" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "No se pudo leer el archivo:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Separación:" @@ -19738,15 +19803,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "No se pudo leer el shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "No se pudo crear el directorio del servidor HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Error al iniciar el servidor HTTP:" #: platform/javascript/export/export.cpp @@ -20039,9 +20107,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "No se pudieron exportar los archivos del proyecto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "No se pudo comenzar el subproceso!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localización" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Nota: El proceso de notarización generalmente toma menos de una hora. Cuando " "se complete el proceso, recibirás un correo electrónico." @@ -20063,18 +20151,80 @@ msgstr "" "notarial a la aplicación exportada (opcional):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "Timestamping no es compatible con la firma ad-hoc y se desactivará!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Hardened Runtime no es compatible con la firma ad-hoc y se desactivará!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "No se encontró identidad." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Error guardando el archivo: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"Los enlaces simbólicos relativos no son compatibles con este sistema " +"operativo, ¡el proyecto exportado podrÃa estar dañado!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direcciones" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "No se pudo comenzar el subproceso!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Crearndo paquete de aplicaciones" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "No se pudo encontrar la aplicación de plantilla para exportar:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Plantilla de exportación inválida:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20083,8 +20233,9 @@ msgstr "" "operativo, ¡el proyecto exportado podrÃa estar dañado!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Plantilla binaria solicitada '%s' no encontrada. Es posible que falte en el " @@ -20131,6 +20282,17 @@ msgid "Sending archive for notarization" msgstr "Enviando archivo para notarización" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proyección" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "" +"No se pudieron exportar los archivos del proyecto a un proyecto gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificador de paquete no válido:" @@ -20481,6 +20643,11 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "No se puede eliminar el archivo temporal:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20528,6 +20695,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rotación al Azar:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "No se pudo encontrar la keystore, no se puedo exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identificador inválido:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nombre inválido." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "No se puede eliminar el archivo temporal:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20546,6 +20777,23 @@ msgid "Invalid product version:" msgstr "versión de producto inválida." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Archivo ejecutable no válido." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nueva Ventana" @@ -20562,6 +20810,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20678,9 +20930,8 @@ msgstr "Escalar" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp -#, fuzzy msgid "Autoplay" -msgstr "Activar/Desact. Autoplay" +msgstr "Autoreproducción" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/audio/audio_stream_player.cpp @@ -20689,7 +20940,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Elegir Instancia:" @@ -21502,7 +21754,7 @@ msgstr "Multiplicar %s" #: scene/3d/navigation.cpp scene/animation/root_motion_view.cpp #: scene/resources/world_2d.cpp servers/physics_2d/physics_2d_server_sw.cpp msgid "Cell Size" -msgstr "" +msgstr "Tamaño de Celda" #: scene/2d/navigation_2d.cpp scene/3d/navigation.cpp #, fuzzy @@ -21519,7 +21771,7 @@ msgstr "" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp msgid "Max Neighbors" -msgstr "" +msgstr "Vecinos Máximos" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy @@ -21527,9 +21779,8 @@ msgid "Time Horizon" msgstr "Espejar Horizontalmente" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp -#, fuzzy msgid "Max Speed" -msgstr "Velocidad:" +msgstr "Velocidad Máxima" #: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp #, fuzzy @@ -21566,17 +21817,19 @@ msgstr "" "funcione. Por favor creá una propiedad o dibujá un polÃgono." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance debe ser un hijo o nieto de un nodo Navigation2D. " -"Solo provee datos de navegación." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centro Inferior" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viaje" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -21646,9 +21899,8 @@ msgstr "" #: scene/2d/parallax_layer.cpp scene/2d/physics_body_2d.cpp #: scene/3d/physics_body.cpp scene/3d/vehicle_body.cpp #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Motion" -msgstr "Acción" +msgstr "Movimiento" #: scene/2d/parallax_layer.cpp #, fuzzy @@ -21703,9 +21955,8 @@ msgstr "" #: scene/2d/path_2d.cpp scene/3d/path.cpp scene/resources/sky.cpp #: scene/resources/texture.cpp -#, fuzzy msgid "Curve" -msgstr "Partir Curva" +msgstr "Curva" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -21713,9 +21964,8 @@ msgstr "" "PathFollow2D sólo funciona cuando está seteado como hijo de un nodo Path2D." #: scene/2d/path_2d.cpp scene/3d/path.cpp -#, fuzzy msgid "Unit Offset" -msgstr "Offset de Grilla:" +msgstr "Desplazamiento de Unidad" #: scene/2d/path_2d.cpp scene/3d/camera.cpp scene/3d/path.cpp #, fuzzy @@ -21736,9 +21986,8 @@ msgid "Lookahead" msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/visual_instance.cpp -#, fuzzy msgid "Layers" -msgstr "Capa" +msgstr "Capas" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy @@ -21752,14 +22001,13 @@ msgstr "Inicializar" #: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp #: scene/resources/physics_material.cpp -#, fuzzy msgid "Friction" -msgstr "Función" +msgstr "Fricción" #: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp #: scene/resources/physics_material.cpp msgid "Bounce" -msgstr "" +msgstr "Rebote" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp msgid "Physics Material Override" @@ -21767,9 +22015,8 @@ msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #: scene/resources/world.cpp scene/resources/world_2d.cpp -#, fuzzy msgid "Default Gravity" -msgstr "Vista Previa Por Defecto" +msgstr "Gravedad Predeterminada" #: scene/2d/physics_body_2d.cpp msgid "" @@ -21783,21 +22030,19 @@ msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp msgid "Mass" -msgstr "" +msgstr "Masa" #: scene/2d/physics_body_2d.cpp -#, fuzzy msgid "Inertia" -msgstr "Vertical:" +msgstr "Inercia" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp -#, fuzzy msgid "Weight" -msgstr "Luz" +msgstr "Peso" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp msgid "Gravity Scale" -msgstr "" +msgstr "Escala de Gravedad" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy @@ -21835,20 +22080,19 @@ msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp msgid "Angular" -msgstr "" +msgstr "Angular" #: scene/2d/physics_body_2d.cpp msgid "Applied Forces" -msgstr "" +msgstr "Fuerzas Aplicadas" #: scene/2d/physics_body_2d.cpp msgid "Torque" msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp -#, fuzzy msgid "Safe Margin" -msgstr "Asignar Margen" +msgstr "Margen Seguro" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy @@ -21922,7 +22166,7 @@ msgstr "" #: scene/2d/polygon_2d.cpp msgid "Invert" -msgstr "" +msgstr "Invertir" #: scene/2d/polygon_2d.cpp #, fuzzy @@ -21930,9 +22174,8 @@ msgid "Vertex Colors" msgstr "Vértice" #: scene/2d/polygon_2d.cpp -#, fuzzy msgid "Internal Vertex Count" -msgstr "Crear Vértice Interno" +msgstr "Recuento de Vértices Internos" #: scene/2d/position_2d.cpp #, fuzzy @@ -21950,7 +22193,7 @@ msgstr "Crear Nodo Shader" #: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp msgid "Collide With" -msgstr "" +msgstr "Colisionar Con" #: scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp scene/3d/ray_cast.cpp msgid "Areas" @@ -21980,9 +22223,8 @@ msgid "Rest" msgstr "Reiniciar" #: scene/2d/skeleton_2d.cpp -#, fuzzy msgid "Default Length" -msgstr "Theme Predeterminado" +msgstr "Longitud Predeterminada" #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." @@ -22002,11 +22244,11 @@ msgstr "" #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp msgid "Hframes" -msgstr "" +msgstr "FotogramasH" #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp msgid "Vframes" -msgstr "" +msgstr "FotogramasV" #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp #, fuzzy @@ -22101,9 +22343,8 @@ msgid "Passby Press" msgstr "" #: scene/2d/touch_screen_button.cpp -#, fuzzy msgid "Visibility Mode" -msgstr "Modo Prioridad" +msgstr "Modo de Visibilidad" #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -22143,7 +22384,7 @@ msgstr "" #: scene/3d/area.cpp msgid "Reverb Bus" -msgstr "" +msgstr "Bus de Reverberación" #: scene/3d/area.cpp #, fuzzy @@ -22201,9 +22442,8 @@ msgid "World Scale" msgstr "Escala al Azar:" #: scene/3d/audio_stream_player_3d.cpp -#, fuzzy msgid "Attenuation Model" -msgstr "Nodo de Animación" +msgstr "Modelo de Atenuación" #: scene/3d/audio_stream_player_3d.cpp msgid "Unit dB" @@ -22211,20 +22451,19 @@ msgstr "" #: scene/3d/audio_stream_player_3d.cpp msgid "Unit Size" -msgstr "" +msgstr "Tamaño de Unidad" #: scene/3d/audio_stream_player_3d.cpp msgid "Max dB" -msgstr "" +msgstr "dB Máximos" #: scene/3d/audio_stream_player_3d.cpp msgid "Out Of Range Mode" -msgstr "" +msgstr "Modo Fuera de Rango" #: scene/3d/audio_stream_player_3d.cpp -#, fuzzy msgid "Emission Angle" -msgstr "Colores de Emisión" +msgstr "Ãngulo de Emisión" #: scene/3d/audio_stream_player_3d.cpp #, fuzzy @@ -22238,7 +22477,7 @@ msgstr "Animación" #: scene/3d/audio_stream_player_3d.cpp msgid "Attenuation Filter" -msgstr "" +msgstr "Filtro de Atenuación" #: scene/3d/audio_stream_player_3d.cpp #: servers/audio/effects/audio_effect_chorus.cpp @@ -22253,9 +22492,8 @@ msgid "dB" msgstr "B" #: scene/3d/audio_stream_player_3d.cpp -#, fuzzy msgid "Doppler" -msgstr "Activar Doppler" +msgstr "Doppler" #: scene/3d/audio_stream_player_3d.cpp #, fuzzy @@ -22265,7 +22503,7 @@ msgstr "Empaquetando" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp #: scene/3d/reflection_probe.cpp msgid "Interior" -msgstr "" +msgstr "Interior" #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" @@ -22300,15 +22538,15 @@ msgstr "Gizmos" #: scene/3d/baked_lightmap.cpp msgid "Tweaks" -msgstr "" +msgstr "Ajustes" #: scene/3d/baked_lightmap.cpp msgid "Bounces" -msgstr "" +msgstr "Rebotes" #: scene/3d/baked_lightmap.cpp msgid "Bounce Indirect Energy" -msgstr "" +msgstr "EnergÃa Indirecta de Rebotes" #: scene/3d/baked_lightmap.cpp #, fuzzy @@ -22330,9 +22568,8 @@ msgid "Default Texels Per Unit" msgstr "Theme Predeterminado" #: scene/3d/baked_lightmap.cpp scene/resources/texture.cpp -#, fuzzy msgid "Atlas" -msgstr "Nuevo Atlas" +msgstr "Atlas" #: scene/3d/baked_lightmap.cpp #, fuzzy @@ -22370,18 +22607,16 @@ msgid "Min Light" msgstr "Indentar a la Der" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp -#, fuzzy msgid "Propagation" -msgstr "Navegación" +msgstr "Propagación" #: scene/3d/baked_lightmap.cpp msgid "Image Path" -msgstr "" +msgstr "Ruta de la Imagen" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Light Data" -msgstr "Con Data" +msgstr "Datos de Luz" #: scene/3d/bone_attachment.cpp scene/3d/physics_body.cpp #, fuzzy @@ -22390,7 +22625,7 @@ msgstr "Nombre de Nodo:" #: scene/3d/camera.cpp msgid "Keep Aspect" -msgstr "" +msgstr "Mantener Aspecto" #: scene/3d/camera.cpp scene/3d/light.cpp scene/3d/reflection_probe.cpp msgid "Cull Mask" @@ -22402,13 +22637,12 @@ msgid "Doppler Tracking" msgstr "Pista de Propiedades" #: scene/3d/camera.cpp -#, fuzzy msgid "Projection" -msgstr "Proyecto" +msgstr "Proyección" #: scene/3d/camera.cpp msgid "FOV" -msgstr "" +msgstr "FOV" #: scene/3d/camera.cpp #, fuzzy @@ -22416,22 +22650,20 @@ msgid "Frustum Offset" msgstr "Offset de Grilla:" #: scene/3d/camera.cpp -#, fuzzy msgid "Near" -msgstr "Mas Cercano" +msgstr "Cercano" #: scene/3d/camera.cpp msgid "Far" -msgstr "" +msgstr "Lejano" #: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp #: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp #: scene/resources/shape.cpp scene/resources/style_box.cpp #: scene/resources/texture.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp -#, fuzzy msgid "Margin" -msgstr "Asignar Margen" +msgstr "Margen" #: scene/3d/camera.cpp #, fuzzy @@ -22556,9 +22788,8 @@ msgid "Flatness" msgstr "" #: scene/3d/cull_instance.cpp servers/visual_server.cpp -#, fuzzy msgid "Portals" -msgstr "Invertir Portales" +msgstr "Portales" #: scene/3d/cull_instance.cpp #, fuzzy @@ -22606,12 +22837,11 @@ msgstr "" #: scene/3d/gi_probe.cpp msgid "Subdiv" -msgstr "" +msgstr "Subdivisiones" #: scene/3d/gi_probe.cpp -#, fuzzy msgid "Dynamic Range" -msgstr "Biblioteca Dinámica" +msgstr "Rango Dinámico" #: scene/3d/gi_probe.cpp scene/3d/light.cpp msgid "Normal Bias" @@ -22619,9 +22849,8 @@ msgstr "" #: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp #: scene/resources/primitive_meshes.cpp -#, fuzzy msgid "Pixel Size" -msgstr "Ajustar a Pixeles" +msgstr "Tamaño de PÃxel" #: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp msgid "Billboard" @@ -22817,14 +23046,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo " -"provee datos de navegación." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -22883,9 +23104,8 @@ msgid "Visibility AABB" msgstr "Act/Desact. Visibilidad" #: scene/3d/particles.cpp -#, fuzzy msgid "Draw Passes" -msgstr "Llamadas de Dibujado:" +msgstr "Pases de Dibujo" #: scene/3d/particles.cpp #, fuzzy @@ -22906,9 +23126,8 @@ msgstr "" "el recurso Curve de su Path padre." #: scene/3d/path.cpp -#, fuzzy msgid "Rotation Mode" -msgstr "Modo Rotar" +msgstr "Modo de Rotación" #: scene/3d/physics_body.cpp msgid "" @@ -23175,17 +23394,15 @@ msgstr "Parámetro Modificado:" #: scene/3d/physics_joint.cpp msgid "Angular Limit" -msgstr "" +msgstr "LÃmite Angular" #: scene/3d/physics_joint.cpp -#, fuzzy msgid "Upper" -msgstr "Mayúsculas" +msgstr "Superior" #: scene/3d/physics_joint.cpp -#, fuzzy msgid "Lower" -msgstr "Minúsculas" +msgstr "Inferior" #: scene/3d/physics_joint.cpp msgid "Motor" @@ -23232,14 +23449,12 @@ msgid "Linear Ortho" msgstr "Ortogonal Trasera" #: scene/3d/physics_joint.cpp -#, fuzzy msgid "Upper Angle" -msgstr "Mayúsculas" +msgstr "Ãngulo Superior" #: scene/3d/physics_joint.cpp -#, fuzzy msgid "Lower Angle" -msgstr "Minúsculas" +msgstr "Ãngulo Inferior" #: scene/3d/physics_joint.cpp #, fuzzy @@ -23277,7 +23492,7 @@ msgstr "" #: scene/3d/physics_joint.cpp msgid "Angular Limit X" -msgstr "" +msgstr "LÃmite Angular X" #: scene/3d/physics_joint.cpp msgid "Angular Motor X" @@ -23304,7 +23519,7 @@ msgstr "Lineal" #: scene/3d/physics_joint.cpp msgid "Angular Limit Y" -msgstr "" +msgstr "LÃmite Angular Y" #: scene/3d/physics_joint.cpp msgid "Angular Motor Y" @@ -23387,18 +23602,16 @@ msgid "Grid Radius" msgstr "Radio:" #: scene/3d/ray_cast.cpp -#, fuzzy msgid "Debug Shape" -msgstr "Depurador" +msgstr "Forma de Depuración" #: scene/3d/ray_cast.cpp scene/resources/style_box.cpp msgid "Thickness" msgstr "" #: scene/3d/reflection_probe.cpp scene/main/viewport.cpp -#, fuzzy msgid "Update Mode" -msgstr "Modo Rotar" +msgstr "Modo de Actualización" #: scene/3d/reflection_probe.cpp #, fuzzy @@ -23465,11 +23678,11 @@ msgstr "" #: scene/3d/room.cpp scene/3d/room_manager.cpp msgid "Room Simplify" -msgstr "" +msgstr "Simplificación de Habitación" #: scene/3d/room.cpp msgid "Bound" -msgstr "" +msgstr "LÃmite" #: scene/3d/room_group.cpp #, fuzzy @@ -23502,7 +23715,7 @@ msgstr "Sólo debe haber un RoomManager en el SceneTree." #: scene/3d/room_manager.cpp msgid "Main" -msgstr "" +msgstr "Principal" #: scene/3d/room_manager.cpp scene/animation/animation_blend_tree.cpp #: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp @@ -23522,14 +23735,12 @@ msgid "PVS" msgstr "FPS" #: scene/3d/room_manager.cpp -#, fuzzy msgid "PVS Mode" -msgstr "Modo Paneo" +msgstr "Modo de CPV" #: scene/3d/room_manager.cpp -#, fuzzy msgid "PVS Filename" -msgstr "Archivo ZIP" +msgstr "Nombre de CPV" #: scene/3d/room_manager.cpp servers/visual_server.cpp msgid "Gameplay" @@ -23673,14 +23884,12 @@ msgid "Parent Collision Ignore" msgstr "Crear PolÃgono de Colisión" #: scene/3d/soft_body.cpp -#, fuzzy msgid "Simulation Precision" -msgstr "El árbol de animación es inválido." +msgstr "Precisión de Simulación" #: scene/3d/soft_body.cpp -#, fuzzy msgid "Total Mass" -msgstr "Total:" +msgstr "Masa Total" #: scene/3d/soft_body.cpp msgid "Linear Stiffness" @@ -23700,7 +23909,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "Damping Coefficient" -msgstr "" +msgstr "Coeficiente de Amortiguación" #: scene/3d/soft_body.cpp msgid "Drag Coefficient" @@ -23726,7 +23935,7 @@ msgstr "" #: scene/3d/spatial.cpp msgid "Matrix" -msgstr "" +msgstr "Matriz" #: scene/3d/spatial.cpp #, fuzzy @@ -23744,7 +23953,7 @@ msgstr "" #: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp msgid "Opacity" -msgstr "" +msgstr "Opacidad" #: scene/3d/sprite_3d.cpp scene/resources/material.cpp #, fuzzy @@ -23773,9 +23982,8 @@ msgid "Per-Wheel Motion" msgstr "Botón Rueda Abajo" #: scene/3d/vehicle_body.cpp -#, fuzzy msgid "Engine Force" -msgstr "Documentación Online" +msgstr "Fuerza del Motor" #: scene/3d/vehicle_body.cpp msgid "Brake" @@ -23799,9 +24007,8 @@ msgid "Use As Steering" msgstr "" #: scene/3d/vehicle_body.cpp -#, fuzzy msgid "Wheel" -msgstr "Rueda Arriba." +msgstr "Rueda" #: scene/3d/vehicle_body.cpp msgid "Roll Influence" @@ -23813,9 +24020,8 @@ msgid "Friction Slip" msgstr "Función" #: scene/3d/vehicle_body.cpp -#, fuzzy msgid "Suspension" -msgstr "Expresión" +msgstr "Suspensión" #: scene/3d/vehicle_body.cpp #, fuzzy @@ -23827,9 +24033,8 @@ msgid "AABB" msgstr "" #: scene/3d/visual_instance.cpp scene/resources/navigation_mesh.cpp -#, fuzzy msgid "Geometry" -msgstr "Reintentar" +msgstr "GeometrÃa" #: scene/3d/visual_instance.cpp #, fuzzy @@ -23867,7 +24072,7 @@ msgstr "" #: scene/3d/visual_instance.cpp msgid "LOD" -msgstr "" +msgstr "LOD" #: scene/3d/visual_instance.cpp scene/animation/skeleton_ik.cpp #: scene/resources/material.cpp @@ -23916,19 +24121,16 @@ msgid "Animation not found: '%s'" msgstr "No se encontró la animación: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Mix Mode" -msgstr "Nodo Mix" +msgstr "Modo de Mezcla" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Fadein Time" -msgstr "Tiempo de Crossfade (s):" +msgstr "Tiempo de Fundido" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Fadeout Time" -msgstr "Tiempo de Crossfade (s):" +msgstr "Tiempo de Desvanecimiento" #: scene/animation/animation_blend_tree.cpp #, fuzzy @@ -23971,9 +24173,8 @@ msgstr "Agregar Puerto de Entrada" #: scene/animation/animation_blend_tree.cpp #: scene/animation/animation_node_state_machine.cpp -#, fuzzy msgid "Xfade Time" -msgstr "Tiempo de Crossfade (s):" +msgstr "Tiempo de Fundido Cruzado" #: scene/animation/animation_node_state_machine.cpp #, fuzzy @@ -23995,23 +24196,20 @@ msgid "Anim Apply Reset" msgstr "Aplicar Reset de Animación" #: scene/animation/animation_player.cpp -#, fuzzy msgid "Current Animation" -msgstr "Establecer Animación" +msgstr "Animación Actual" #: scene/animation/animation_player.cpp -#, fuzzy msgid "Assigned Animation" -msgstr "Agregar Animación" +msgstr "Animación Asignada" #: scene/animation/animation_player.cpp msgid "Reset On Save" -msgstr "" +msgstr "Reiniciar al Guardar" #: scene/animation/animation_player.cpp -#, fuzzy msgid "Current Animation Length" -msgstr "Cambiar Duración de la Animación" +msgstr "Duración de la Animación Actual" #: scene/animation/animation_player.cpp #, fuzzy @@ -24019,9 +24217,8 @@ msgid "Current Animation Position" msgstr "Añadir Punto de Animación" #: scene/animation/animation_player.cpp -#, fuzzy msgid "Playback Options" -msgstr "Opciones de Clase:" +msgstr "Opciones de Reproducción" #: scene/animation/animation_player.cpp #, fuzzy @@ -24030,7 +24227,7 @@ msgstr "Theme Predeterminado" #: scene/animation/animation_player.cpp msgid "Method Call Mode" -msgstr "" +msgstr "Modo de Llamada del Método" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -24121,9 +24318,8 @@ msgid "Tip Bone" msgstr "Huesos" #: scene/animation/skeleton_ik.cpp -#, fuzzy msgid "Interpolation" -msgstr "Modo de Interpolación" +msgstr "Interpolación" #: scene/animation/skeleton_ik.cpp #, fuzzy @@ -24153,9 +24349,8 @@ msgid "Playback Process Mode" msgstr "" #: scene/animation/tween.cpp -#, fuzzy msgid "Playback Speed" -msgstr "Reproducir Escena" +msgstr "Velocidad de Reproducción" #: scene/audio/audio_stream_player.cpp #, fuzzy @@ -24170,13 +24365,12 @@ msgstr "Mantener Proporciones" #: scene/gui/aspect_ratio_container.cpp scene/gui/texture_button.cpp #: scene/gui/texture_rect.cpp -#, fuzzy msgid "Stretch Mode" -msgstr "Modo Seleccionar" +msgstr "Modo de Estiramiento" #: scene/gui/aspect_ratio_container.cpp scene/gui/box_container.cpp msgid "Alignment" -msgstr "" +msgstr "Alineación" #: scene/gui/base_button.cpp #, fuzzy @@ -24184,9 +24378,8 @@ msgid "Shortcut In Tooltip" msgstr "Mostrar OrÃgen" #: scene/gui/base_button.cpp -#, fuzzy msgid "Action Mode" -msgstr "Modo Icono" +msgstr "Modo de Acción" #: scene/gui/base_button.cpp msgid "Enabled Focus Mode" @@ -24197,9 +24390,8 @@ msgid "Keep Pressed Outside" msgstr "" #: scene/gui/base_button.cpp scene/gui/shortcut.cpp -#, fuzzy msgid "Shortcut" -msgstr "Atajos" +msgstr "Atajo" #: scene/gui/base_button.cpp #, fuzzy @@ -24214,7 +24406,7 @@ msgstr "Copiar Texto" #: scene/gui/button.cpp scene/gui/label.cpp scene/gui/line_edit.cpp #: scene/gui/spin_box.cpp msgid "Align" -msgstr "" +msgstr "Alinear" #: scene/gui/button.cpp msgid "Icon Align" @@ -24378,7 +24570,7 @@ msgstr "Anterior" #: scene/gui/control.cpp msgid "Mouse" -msgstr "" +msgstr "Ratón" #: scene/gui/control.cpp #, fuzzy @@ -25576,6 +25768,16 @@ msgid "3D Physics" msgstr " (FÃsica)" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27003,7 +27205,7 @@ msgstr "Transición: " msgid "Refraction" msgstr "Separación:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27088,7 +27290,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Escalando: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Editar Tipo de Variable" #: scene/resources/navigation_mesh.cpp @@ -27106,10 +27313,15 @@ msgid "Source Group Name" msgstr "Fuente" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumentos de Escena Principal:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27119,11 +27331,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Región" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Mergear desde Escena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27137,6 +27354,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Mostrar Valores por Defecto" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Elegir Instancia:" @@ -27154,7 +27376,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27572,6 +27794,11 @@ msgid "Scenario" msgstr "Escena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navegación" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27589,6 +27816,26 @@ msgstr "Lineal Izquierda" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Por Defecto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Tamaño de Celda" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Prueba" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Editar Conexión:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/et.po b/editor/translations/et.po index daf3807192..ca2105aa20 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -219,9 +219,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Võrgu profileerija" @@ -380,6 +381,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Liigutamisrežiim" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -572,7 +582,8 @@ msgstr "Kirjeldus" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Käivita" @@ -658,6 +669,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Stseeni tee:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -665,19 +681,13 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "" - #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -#, fuzzy -msgid "Plugin Name" -msgstr "Pistikprogrammi nimi:" +msgid "Version Control Plugin Name" +msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -789,7 +799,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtreeri sõlmed" @@ -2206,7 +2217,7 @@ msgid "Open" msgstr "Ava" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2504,7 +2515,7 @@ msgid "Bus Options" msgstr "Klassi valikud" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikeeri" @@ -2763,6 +2774,23 @@ msgid "Choose" msgstr "Vali" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Kopeeri sõlme tee" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Salvestan faili:" @@ -2775,6 +2803,31 @@ msgid "Packing" msgstr "Pakin" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Salvesta kui" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Ei saanud luua kausta." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Ei saanud luua kausta." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Faili ei saa kirjutamiseks avada:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Salvesta kui" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2895,11 +2948,29 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Mallifaili ei leitud:" #: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3077,9 +3148,9 @@ msgid "Import" msgstr "Impordi" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Ekspordi" @@ -4193,15 +4264,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Stseen" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Stseeni tee:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4327,6 +4389,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Nimeta ümber" @@ -4355,6 +4421,10 @@ msgstr "" msgid "Add a new scene." msgstr "Lisa uus stseen." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Stseen" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5100,6 +5170,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5370,7 +5445,9 @@ msgid "Draw Spaces" msgstr "Kuvamise kutsungid" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6801,7 +6878,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtreeri sõlmed" @@ -7090,6 +7167,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9996,6 +10085,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11379,8 +11469,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Teisenda..." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12383,8 +12474,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13831,31 +13921,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13994,6 +14063,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projekti asutajad" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16290,7 +16364,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16887,7 +16961,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16917,6 +16990,19 @@ msgstr "Kustuta sõlm(ed)" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Kustuta animatsioon?" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Kustuta sõlm(ed)" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18429,10 +18515,6 @@ msgid "Could not execute on device." msgstr "Ei saanud luua kausta." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18536,12 +18618,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signaal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18557,6 +18643,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18586,7 +18676,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18597,20 +18687,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Ei saanud luua kausta." #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18622,7 +18711,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18638,7 +18727,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Paigutuse nime ei leitud!" #: platform/android/export/export_plugin.cpp @@ -18647,15 +18736,12 @@ msgid "Creating APK..." msgstr "Sätted..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18666,7 +18752,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Ei saanud luua kausta." #: platform/android/export/export_plugin.cpp @@ -18907,6 +18993,16 @@ msgstr "Kustuta sõlm(ed)" msgid "Custom BG Color" msgstr "Kustuta sõlm(ed)" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Mallifaili ei leitud:" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18928,23 +19024,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Ei saanud luua kausta." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Vigane nimi." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Ei saanud luua kausta." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Kuva failikuvajas" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Ei saanud luua kausta." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Versioon:" @@ -19019,17 +19127,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Ei saanud luua kausta." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Ei saanud luua kausta." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Viga TileSeti salvestamisel!" #: platform/javascript/export/export.cpp @@ -19320,9 +19428,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ei saanud luua kausta." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Ei saanud luua kausta." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Tõlked" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19338,20 +19465,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ainult konstandid" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Tõrge faili '%s' salvestamisel" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Kirjeldus" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Loon pisipilti" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Vigane nimi." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19359,7 +19540,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19400,6 +19581,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19708,6 +19898,11 @@ msgid "Debug Algorithm" msgstr "Siluja" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Ei saanud luua kausta." + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19755,6 +19950,65 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstant" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Kehtetud argumendid '%s' ehitamise jaoks" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Vigane nimi." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19776,6 +20030,23 @@ msgid "Invalid product version:" msgstr "Vigane nimi." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Vigane nimi." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Uus aken" @@ -19792,6 +20063,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19913,7 +20188,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20718,13 +20994,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Kustuta sõlm(ed)" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21857,12 +22136,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24426,6 +24699,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Kustuta animatsioon?" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Kustuta animatsioon?" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25802,7 +26085,7 @@ msgstr "Tõlked" msgid "Refraction" msgstr "Versioon:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25882,8 +26165,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Skaleerimisrežiim" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Versioon:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25899,10 +26188,15 @@ msgid "Source Group Name" msgstr "Skripti nimi:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Vidinad" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25912,11 +26206,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Hiljuti avatud" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Liida stseenist" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25929,6 +26228,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Laadi vaikimisi" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25945,7 +26249,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26348,6 +26652,11 @@ msgid "Scenario" msgstr "Stseen" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Kustuta sõlm(ed)" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26365,6 +26674,26 @@ msgstr "Vaikimisi" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Vaikimisi" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Kinemaatiline eelvaade" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testimine" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Ühenda" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index ce0906409e..cfbf2945ff 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -204,9 +204,10 @@ msgid "Data" msgstr "Datuak" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Sarea" @@ -357,6 +358,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Atxikitze modua:" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -544,7 +554,8 @@ msgstr "Deskripzioa" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -628,6 +639,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Eszenaren bidea:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -635,18 +651,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Bertsio kontrola" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Bertsio kontrola" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Bertsio kontrola" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -754,7 +767,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Iragazkiak..." @@ -2165,8 +2179,8 @@ msgid "Open" msgstr "Ireki" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Hauen jabeak:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2472,7 +2486,7 @@ msgid "Bus Options" msgstr "Klaseko aukerak" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Bikoiztu" @@ -2728,6 +2742,23 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paketea ondo instalatu da!" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2740,6 +2771,28 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Gorde honela" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Gorde honela" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2843,8 +2896,28 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Hautatu txantiloi fitxategia" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "Paketearen edukia:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Kudeatu esportazio txantiloiak..." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3019,9 +3092,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Esportatu" @@ -4115,15 +4188,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Eszenaren bidea:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4244,6 +4308,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Bertsio kontrola" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4271,6 +4339,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5011,6 +5083,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proiektua" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5276,7 +5353,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6706,7 +6785,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Iragazkiak..." @@ -6988,6 +7067,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9894,6 +9985,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11257,7 +11349,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12260,8 +12352,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13697,31 +13788,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13858,6 +13928,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Proiektuaren sortzaileak" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16147,7 +16222,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16735,7 +16810,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16764,6 +16838,19 @@ msgstr "Blend4 nodoa" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Ezabatu animazioa?" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Trantsizio nodoa" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18250,10 +18337,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18357,12 +18440,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Seinalea" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18381,6 +18468,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18409,7 +18500,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18420,19 +18511,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18445,7 +18534,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18461,7 +18550,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Paketearen edukia:" #: platform/android/export/export_plugin.cpp @@ -18469,15 +18558,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18487,8 +18573,9 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "" +#, fuzzy +msgid "Could not export project files." +msgstr "Ezin izan da scripta exekutatu:" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -18725,6 +18812,17 @@ msgstr "Funtzioak:" msgid "Custom BG Color" msgstr "Funtzioak:" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Godot esportazio-txantiloiak" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Esportazio-txantiloi kudeatzailea" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18746,23 +18844,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Animazio izen baliogabea!" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Ezin izan da scripta exekutatu:" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Edukiak:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Ezin izan da scripta exekutatu:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Enumerazioak" @@ -18837,15 +18946,16 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." +msgstr "Ezin izan da scripta exekutatu:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -19131,9 +19241,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ezin izan da scripta exekutatu:" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Erabili biraketa atxikitzea" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19149,19 +19277,72 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Konstanteak bakarrik" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Deskripzioa" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Animazio izen baliogabea!" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19169,7 +19350,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19210,6 +19391,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proiektua" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19514,6 +19704,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19559,6 +19753,65 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Itsatsi animazioa" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "'%s' eraikitzeko argumentu baliogabeak" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Animazio izen baliogabea!" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19580,6 +19833,23 @@ msgid "Invalid product version:" msgstr "Animazio izen baliogabea!" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Animazio izen baliogabea!" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19595,6 +19865,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19711,7 +19985,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20496,13 +20771,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Blend4 nodoa" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21620,12 +21898,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24137,6 +24409,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Trantsizio nodoa" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Trantsizio nodoa" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25488,7 +25770,7 @@ msgstr "Trantsizio nodoa" msgid "Refraction" msgstr "Enumerazioak" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25566,10 +25848,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Enumerazioak" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -25582,10 +25869,15 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Edukiak:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25594,11 +25886,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Funtzioak:" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25611,6 +25908,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Inportatu profila(k)" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25627,7 +25929,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26022,6 +26324,11 @@ msgid "Scenario" msgstr "Eszenaren bidea:" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Trantsizio nodoa" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26039,6 +26346,26 @@ msgstr "Birkargatu azala" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Aurrebista:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Aurrebista:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Birkargatu azala" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Edukiak:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index f28fc02819..43d79c6ede 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -240,9 +240,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "صدور پروژه" @@ -402,6 +403,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "انتخاب ØØ§Ù„ت" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -601,7 +611,8 @@ msgstr "تعریÙ" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "اجرا" @@ -690,6 +701,10 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -697,19 +712,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "مهار نسخه" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "مهار نسخه" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§" +msgid "Version Control Plugin Name" +msgstr "مهار نسخه" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -819,7 +830,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "صاÙÛŒ:" @@ -2252,8 +2264,8 @@ msgid "Open" msgstr "باز Ú©Ù†" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "مالکانÙ:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2554,7 +2566,7 @@ msgid "Bus Options" msgstr "گزینه های اتوبوس" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "تکثیر کردن" @@ -2812,6 +2824,24 @@ msgid "Choose" msgstr "انتخاب کنید" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Ú©Ù¾ÛŒ کردن مسیر node" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "بسته با موÙقیت نصب شد!" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "ذخیره ÙØ§ÛŒÙ„:" @@ -2824,6 +2854,31 @@ msgid "Packing" msgstr "بسته بندی" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "ذخیره در" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ناتوان در ساختن پوشه." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "ناتوان در گشودن پروژه" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "ذخیره در" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2939,8 +2994,29 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "مدیریت صدور قالب ها" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "پرونده موجود نیست." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "طول انیمیشن (به ثانیه)." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "نام دارایی ایندکس نامعتبر." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3117,9 +3193,9 @@ msgid "Import" msgstr "وارد کردن" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "خروجی" @@ -4219,14 +4295,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "صØÙ†Ù‡" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4354,6 +4422,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "مهار نسخه" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "تغییر نام" @@ -4382,6 +4454,10 @@ msgstr "" msgid "Add a new scene." msgstr "Ø§ÙØ²ÙˆØ¯Ù† صØÙ†Ù‡ جدید." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "صØÙ†Ù‡" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5149,6 +5225,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "پروژه" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5425,7 +5506,9 @@ msgid "Draw Spaces" msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6939,7 +7022,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "صاÙÛŒ:" @@ -7230,6 +7313,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10286,6 +10381,7 @@ msgid "Points" msgstr "برداشتن نقطه" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "ویرایش سیگنال" @@ -11737,7 +11833,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "اتصال به گره:" #: editor/plugins/sprite_editor_plugin.cpp @@ -12808,8 +12904,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "گره انیمیشن" @@ -14341,34 +14436,12 @@ msgid "Delete preset '%s'?" msgstr "آیا پرونده‌های انتخاب شده ØØ°Ù شود؟" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "صدور" #: editor/project_export.cpp #, fuzzy -msgid "The given export path doesn't exist:" -msgstr "پرونده موجود نیست." - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp -#, fuzzy msgid "Export Path" msgstr "صدور پروژه" @@ -14511,6 +14584,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "بنیان‌گذاران پروژه" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "مدیریت صدور قالب ها" @@ -16913,7 +16991,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "ویرایش سیگنال" @@ -17524,7 +17602,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17554,6 +17631,19 @@ msgstr "ساختن گره" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "انیمیشن ØØ°Ù شود؟" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "گره انیمیشن" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19138,10 +19228,6 @@ msgid "Could not execute on device." msgstr "ناتوان در ساختن پوشه." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19246,12 +19332,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "سیگنال‌" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19268,6 +19358,10 @@ msgid "Could not find keystore, unable to export." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19298,7 +19392,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19309,20 +19403,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19335,7 +19428,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19351,7 +19444,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "طول انیمیشن (به ثانیه)." #: platform/android/export/export_plugin.cpp @@ -19361,15 +19454,12 @@ msgstr "در ØØ§Ù„ اتصال..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19381,7 +19471,7 @@ msgstr "ÛŒØ§ÙØªÙ†" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/android/export/export_plugin.cpp @@ -19624,6 +19714,16 @@ msgstr "ساختن گره" msgid "Custom BG Color" msgstr "ساختن گره" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "مدیریت صدور قالب ها" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19647,25 +19747,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "نام دارایی ایندکس نامعتبر." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Ù…ØØªÙˆØ§Ù‡Ø§:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "شمارش ها:" @@ -19741,17 +19850,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "ناتوان در ساختن پوشه." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "خطا در بارگذاری:" #: platform/javascript/export/export.cpp @@ -20048,9 +20157,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "ناتوان در ساختن پوشه." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "بومی‌سازی" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20066,20 +20194,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "چیزی ÛŒØ§ÙØª نشد!" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "خطای ذخیره کردن پرونده: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "توضیØ" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "نمی‌تواند یک پوشه ایجاد شود." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "نام دارایی ایندکس نامعتبر." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20087,7 +20269,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20129,6 +20311,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "پروژه" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "نام یک شناسه‌ی معتبر نیست:" @@ -20443,6 +20635,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "امکان ØØ°Ù وجود ندارد :" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20489,6 +20686,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "ثابت" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "نمی‌تواند یک پوشه ایجاد شود." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "نام یک شناسه‌ی معتبر نیست:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "نام نامعتبر." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "امکان ØØ°Ù وجود ندارد :" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20510,6 +20771,23 @@ msgid "Invalid product version:" msgstr "اندازه‌ی قلم نامعتبر." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "باید از یک پسوند معتبر Ø§Ø³ØªÙØ§Ø¯Ù‡ شود." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "چارچوب جدید" @@ -20526,6 +20804,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20647,7 +20929,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -21474,15 +21757,16 @@ msgstr "" "Ù„Ø·ÙØ§ یک دارایی تعیین یا یک چندضلعی ترسیم کنید." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -"NavigationPolygonInstance باید یک ÙØ±Ø²Ù†Ø¯ یا نوه‌ی یک گره Navigation2D باشد. " -"این تنها یک داده‌ی پیمایش را ÙØ±Ø§Ù‡Ù… می‌کند." -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ساختن گره" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22656,14 +22940,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance باید یک ÙØ±Ø²Ù†Ø¯ یا نوه‌ی یک گره Navigation باشد. این " -"تنها داده‌ی پیمایش را ÙØ±Ø§Ù‡Ù… می‌کند." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25280,6 +25556,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "گره انیمیشن" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "گره انیمیشن" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26674,7 +26960,7 @@ msgstr "انتقال" msgid "Refraction" msgstr "شمارش ها:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26755,7 +27041,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "بومی" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "متغیر را ویرایش Ú©Ù†:" #: scene/resources/navigation_mesh.cpp @@ -26772,10 +27063,15 @@ msgid "Source Group Name" msgstr "منبع" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "نشانوندها:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26785,11 +27081,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "گره انیمیشن" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "ادغام از صØÙ†Ù‡" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26802,6 +27103,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "بارگیری پیش ÙØ±Ø¶" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26819,7 +27125,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27220,6 +27526,11 @@ msgid "Scenario" msgstr "صØÙ†Ù‡" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "گره انیمیشن" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27237,6 +27548,26 @@ msgstr "خطی" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Ù¾ÛŒØ´ÙØ±Ø¶" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "به‌روزرسانی از صØÙ†Ù‡" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "آزمودن" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ویرایش اتصال:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 20220ffecd..7c69731934 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -234,9 +234,10 @@ msgid "Data" msgstr "Datan kanssa" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Verkkoprofiloija" @@ -398,6 +399,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Siirtotila" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Poista syöte" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -600,7 +611,8 @@ msgstr "Kuvaus" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Suorita" @@ -691,6 +703,11 @@ msgid "Main Run Args" msgstr "Pääkohtauksen argumentit:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Kohtauspolku:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -698,19 +715,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versionhallinta" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Versionhallintajärjestelmä" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Liitännäisen nimi:" +msgid "Version Control Plugin Name" +msgstr "Versionhallinta" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -830,7 +843,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Suodattimet:" @@ -2269,8 +2283,8 @@ msgid "Open" msgstr "Avaa" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Omistajat kohteelle:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2575,7 +2589,7 @@ msgid "Bus Options" msgstr "Väylän asetukset" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Monista" @@ -2835,6 +2849,25 @@ msgid "Choose" msgstr "Valitse" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Kopioi solmun polku" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paketti asennettu onnistuneesti!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Epäonnistui:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Varastoidaan tiedostoa:" @@ -2847,6 +2880,31 @@ msgid "Packing" msgstr "Pakataan" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Tallenna nimellä" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Kansiota ei voitu luoda." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Ei voitu viedä projektin tiedostoja" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Ei voida avata tiedostoa kirjoitettavaksi:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Tallenna nimellä" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2965,11 +3023,33 @@ msgstr "Mukautettua debug-vientimallia ei löytynyt." msgid "Custom release template not found." msgstr "Mukautettua release-vientimallia ei löytynyt." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Hallinnoi malleja" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Annettu vientipolku ei ole olemassa:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Mallitiedostoa ei löytynyt:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Virheellinen vientimalli:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Täyte" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "32-bittisissä vienneissä sisällytetty PCK ei voi olla suurempi kuin 4 Gt." @@ -3145,9 +3225,9 @@ msgid "Import" msgstr "Tuo" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Vie" @@ -4311,15 +4391,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Kohtaus" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Kohtauspolku:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4448,6 +4519,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versionhallinta" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Käyttäjänimi" @@ -4475,6 +4550,10 @@ msgstr "Käytä häiriötöntä tilaa." msgid "Add a new scene." msgstr "Lisää uusi kohtaus." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Kohtaus" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Siirry aiemmin avattuun kohtaukseen." @@ -5267,6 +5346,11 @@ msgstr "" "Ole hyvä ja lisää ajettava esiasetus Vienti-valikosta tai määrittele " "olemassa oleva esiasetus ajettavaksi." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekti" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Kirjoita logiikka _run() metodiin." @@ -5550,7 +5634,9 @@ msgid "Draw Spaces" msgstr "Piirtokutsuja:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigointi" @@ -7053,7 +7139,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Suodattimet:" @@ -7352,6 +7438,18 @@ msgid "Saving..." msgstr "Tallennetaan..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10345,6 +10443,7 @@ msgid "Points" msgstr "Pisteet" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Polygonit" @@ -11729,7 +11828,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Virheellinen geometria, ei voida korvata meshillä." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Muunna Mesh2D resurssiksi" #: editor/plugins/sprite_editor_plugin.cpp @@ -12727,8 +12827,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Valitse edellinen muoto, alilaatta tai laatta." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Alue" @@ -14247,36 +14346,10 @@ msgid "Delete preset '%s'?" msgstr "Poista esiasetus '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Projektin vienti alustalle '%s' epäonnistui.\n" -"Vientimallit näyttävät puuttuvan tai olevan virheellisiä." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Projektin vienti alustalle '%s' epäonnistui.\n" -"Tämä saattaa johtua asetusongelmista viennin esiasetuksissa tai vientisi " -"asetuksissa." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Viedään kaikki" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Annettu vientipolku ei ole olemassa:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Vientipolku" @@ -14422,6 +14495,11 @@ msgid "Export templates for this platform are missing:" msgstr "Tälle alustalle ei löytynyt vientipohjia:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projektin perustajat" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Hallinnoi vientimalleja" @@ -16850,7 +16928,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Polygonit" @@ -17477,7 +17555,6 @@ msgid "Use In Baked Light" msgstr "Kehitä Lightmapit" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17507,6 +17584,19 @@ msgstr "Keskitä" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigointi" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Siirtymistila" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Seuraava taso" @@ -19036,10 +19126,6 @@ msgid "Could not execute on device." msgstr "Ei voitu suorittaa laitteella." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "'apksigner' työkalua ei löydy." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19170,12 +19256,17 @@ msgstr "" "\"Target Sdk\" versionumeron on oltava suurempi tai yhtä suuri kuin \"Min " "Sdk\" versionumeron." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Allekirjoitetaan DMG-koodi" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "'apksigner' ei löydy.\n" "Ole hyvä ja tarkista, että komento on saatavilla Android SDK build-tools " @@ -19195,6 +19286,11 @@ msgid "Could not find keystore, unable to export." msgstr "Keystorea ei löytynyt, ei voida viedä." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Aliprosessia ei voitu käynnistää!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' palautti virheen #%d" @@ -19226,7 +19322,8 @@ msgstr "" "Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Vientiformaatti ei ole tuettu!\n" #: platform/android/export/export_plugin.cpp @@ -19238,10 +19335,9 @@ msgstr "" "versiotietoa. Ole hyvä ja uudelleenasenna se 'Projekti'-valikosta." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Androidin käännösversion epäyhteensopivuus:\n" @@ -19250,14 +19346,16 @@ msgstr "" "Ole hyvä ja uudelleenasenna Androidin käännösmalli 'Projekti'-valikosta." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Ei voitu ylikirjoittaa res://android/build/res/*.xml tiedostoja projektin " "nimellä" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n" #: platform/android/export/export_plugin.cpp @@ -19269,8 +19367,9 @@ msgid "Building Android Project (gradle)" msgstr "Käännetään Android-projektia (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Android-projektin käännös epäonnistui, tarkista virhe tulosteesta.\n" @@ -19290,7 +19389,8 @@ msgstr "" "tulosteet gradle-projektin hakemistosta." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pakettia ei löytynyt: %s" #: platform/android/export/export_plugin.cpp @@ -19298,17 +19398,16 @@ msgid "Creating APK..." msgstr "Luodaan APK:ta..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Ei löydetty APK-vientimallia vientiä varten:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19321,7 +19420,8 @@ msgid "Adding files..." msgstr "Lisätään tiedostoja..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Ei voitu viedä projektin tiedostoja" #: platform/android/export/export_plugin.cpp @@ -19564,6 +19664,17 @@ msgstr "Mukautettu solmu" msgid "Custom BG Color" msgstr "Mukautettu solmu" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Hallinnoi malleja" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Mukautettua release-vientimallia ei löytynyt." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID ei ole määritetty - ei voida konfiguroida projektia." @@ -19585,22 +19696,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Suorita viety HTML järjestelmän oletusselaimessa." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Mallin avaus vientiin epäonnistui:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Virheellinen vientimalli:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Ei voitu kirjoittaa tiedostoa:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Aseta marginaali" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Ei voitu lukea tiedostoa:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Erotus:" @@ -19675,15 +19799,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Ei voitu lukea HTML tulkkia:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Ei voitu luoda HTTP-palvelimen hakemistoa:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Virhe käynnistettäessä HTTP-palvelinta:" #: platform/javascript/export/export.cpp @@ -19976,9 +20103,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ei voitu viedä projektin tiedostoja" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Aliprosessia ei voitu käynnistää!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Kääntäminen" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Huom: Notarisointiprosessi kestää yleensä alle tunnin. Kun käsittely on " "valmis, saat sähköpostin." @@ -20000,18 +20147,83 @@ msgstr "" "sovellukseen (vapaavalintainen):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Timestamping ei ole yhteensopiva ad-hoc allekirjoituksen kanssa ja kytketään " +"pois päältä!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Hardened Runtime ei ole yhteensopiva ad-hoc allekirjoituksen kanssa ja " +"kytketään pois päältä!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Identiteettiä ei löytynyt." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Virhe tallennettaessa tiedostoa: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"Suhteelliset symboliset linkit eivät ole tuettuja tässä " +"käyttöjärjestelmässä, viety projekti saattaa olla rikkinäinen!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Suunnat" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Aliprosessia ei voitu käynnistää!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Luodaan app bundlea" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Ei löydetty app-vientimallia vientiä varten:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Virheellinen vientimalli:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20020,8 +20232,9 @@ msgstr "" "käyttöjärjestelmässä, viety projekti saattaa olla rikkinäinen!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Pyydettyä binäärivientimallia '%s' ei löydy. Se saattaa puuttua " @@ -20068,6 +20281,16 @@ msgid "Sending archive for notarization" msgstr "Lähetetään tiedostopaketti notarisointia varten" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekti" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Virheellinen bundle-tunniste:" @@ -20410,6 +20633,11 @@ msgid "Debug Algorithm" msgstr "Debuggeri" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Väliaikaista tiedosta ei voida poistaa:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20457,6 +20685,76 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Satunnainen kierto:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Keystorea ei löytynyt, ei voida viedä." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Keystorea ei löytynyt, ei voida viedä." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"rcedit-työkalu täytyy olla konfiguroituna editorin asetuksissa (Export > " +"Windows > Rcedit) ikonin tai sovelluksen tietojen muuttamiseksi." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Keystorea ei löytynyt, ei voida viedä." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Keystorea ei löytynyt, ei voida viedä." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Virheellinen Identifier osio:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Virheellinen nimi." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"rcedit-työkalu täytyy olla konfiguroituna editorin asetuksissa (Export > " +"Windows > Rcedit) ikonin tai sovelluksen tietojen muuttamiseksi." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Väliaikaista tiedosta ei voida poistaa:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20477,6 +20775,23 @@ msgid "Invalid product version:" msgstr "Virheellinen tuotteen versio:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Virheellinen käynnistystiedosto." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Uusi ikkuna" @@ -20493,6 +20808,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20620,7 +20939,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Poimintaetäisyys:" @@ -21498,17 +21818,19 @@ msgstr "" "se toimisi. Ole hyvä ja aseta ominaisuus tai piirrä monikulmio." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance solmun täytyy olla Navigation2D solmun " -"alaisuudessa. Se tarjoaa vain navigointidataa." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Keskitä alas" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Matkaa" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22754,14 +23076,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent solmua voidaan käyttää ainoastaan Spatial solmun alla." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance solmun täytyy olla Navigation solmun alaisuudessa. Se " -"tarjoaa vain navigointidataa." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25516,6 +25830,16 @@ msgid "3D Physics" msgstr " (fyysinen)" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigointi" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigointi" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26943,7 +27267,7 @@ msgstr "Siirtymä: " msgid "Refraction" msgstr "Erotus:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27028,7 +27352,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skaalataan: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Aseta muunnoksen kantatyyppi" #: scene/resources/navigation_mesh.cpp @@ -27046,10 +27375,15 @@ msgid "Source Group Name" msgstr "Lähde" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Pääkohtauksen argumentit:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27059,11 +27393,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Alue" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Yhdistä kohtauksesta" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27077,6 +27416,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Näytä oletus" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Poimintaetäisyys:" @@ -27094,7 +27438,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27512,6 +27856,11 @@ msgid "Scenario" msgstr "Kohtaus" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigointi" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27529,6 +27878,26 @@ msgstr "Vasen lineaarinen" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Oletus" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Oletusesikatselu" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testaus" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Muokkaa yhteyttä:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 54f9216a48..19cb3febb0 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -205,9 +205,10 @@ msgid "Data" msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Network" @@ -357,6 +358,15 @@ msgstr "Pila ng Mensahe" msgid "Max Size (KB)" msgstr "Max na Laki (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Kopya" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -536,7 +546,8 @@ msgstr "Paglalarawan" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Patakbuhin" @@ -619,6 +630,10 @@ msgid "Main Run Args" msgstr "Pangunahing Args sa Pagtakbo" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Maghanap sa mga File Extension" @@ -626,18 +641,15 @@ msgstr "Maghanap sa mga File Extension" msgid "Script Templates Search Path" msgstr "Path ng mga Hahanaping Script Template" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Version Control" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Kusang i-load sa Simula" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Pangalan ng Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Version Control" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -744,7 +756,8 @@ msgid "Quality" msgstr "Kalidad" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Mga Filter" @@ -2138,7 +2151,7 @@ msgid "Open" msgstr "I-buksan" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2429,7 +2442,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2685,6 +2698,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2697,6 +2726,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2800,8 +2849,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2973,9 +3039,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4057,14 +4123,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4182,6 +4240,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Version Control" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4209,6 +4271,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4942,6 +5008,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Ilipat Ang Mga Bezier Points" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5199,7 +5270,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6599,7 +6672,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6874,6 +6947,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9761,6 +9846,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11117,7 +11203,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12088,8 +12174,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13521,31 +13606,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13680,6 +13744,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15940,7 +16008,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16511,7 +16579,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16538,6 +16605,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Burahin ang (mga) Napiling Key" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Halaga:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17987,10 +18067,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18094,12 +18170,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Burahin ang (mga) Napiling Key" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18115,6 +18195,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18143,7 +18227,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18154,19 +18238,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18179,7 +18261,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18194,7 +18276,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18202,15 +18284,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18220,7 +18299,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18452,6 +18531,15 @@ msgstr "Mga Functions:" msgid "Custom BG Color" msgstr "Mga Functions:" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18473,19 +18561,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Invalid na index ng type na %s para sa base type na %s" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Ikabit" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18560,15 +18658,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18844,9 +18942,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Pagulit ng Animation" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18862,18 +18977,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Paglalarawan" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "3D Transform Track" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -18881,7 +19049,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18922,6 +19090,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Pagulit ng Animation" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19218,6 +19395,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19259,6 +19440,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Mga invalid na argumento para i-construct ang '%s'" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19277,6 +19515,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19292,6 +19546,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19402,7 +19660,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20167,13 +20426,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21256,12 +21517,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23665,6 +23920,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Burahin ang (mga) Napiling Key" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Burahin ang (mga) Napiling Key" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24936,7 +25201,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25013,8 +25278,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Iskala" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Pagulit ng Animation" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25029,7 +25300,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25041,11 +25316,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Mga Functions:" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25058,6 +25338,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25074,7 +25358,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25445,6 +25729,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Pagulit ng Animation" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25460,6 +25749,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Halaga:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Halaga:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Halaga:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Ikabit" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 6bd4ffa0eb..6b077ba5e4 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -298,9 +298,10 @@ msgid "Data" msgstr "Données" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Réseau" @@ -449,6 +450,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "Taille Maximale (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mode déplacement" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Supprimer l'entrée" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -633,7 +644,8 @@ msgstr "Description" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Lancer" @@ -722,6 +734,11 @@ msgid "Main Run Args" msgstr "Arguments de la scène principale :" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Chemin de la scène :" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -729,18 +746,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Contrôle de version" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Système de contrôle de version" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nom du Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Contrôle de version" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -857,7 +871,8 @@ msgid "Quality" msgstr "Qualité" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtres" @@ -2292,8 +2307,8 @@ msgid "Open" msgstr "Ouvrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Propriétaires de :" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2600,7 +2615,7 @@ msgid "Bus Options" msgstr "Options de bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliquer" @@ -2860,6 +2875,25 @@ msgid "Choose" msgstr "Choisir" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Copier le chemin du nÅ“ud" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paquetage installé avec succès !" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Échec :" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Stockage du fichier :" @@ -2872,6 +2906,31 @@ msgid "Packing" msgstr "Empaquetage" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Enregistrer sous" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Impossible de créer le dossier." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Impossible d'exporter les fichiers du projet" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Impossible d'ouvrir le fichier pour écriture :" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Enregistrer sous" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2989,11 +3048,33 @@ msgstr "Modèle de débogage personnalisé introuvable." msgid "Custom release template not found." msgstr "Modèle de version personnalisée introuvable." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Gérer les modèles" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Le chemin de l'exportation donné n'existe pas :" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Fichier modèle introuvable :" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Modèle d'exportation non valide :" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Remplissage(Padding)" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Le PCK inclus dans un export 32-bits ne peut dépasser 4 Go." @@ -3171,9 +3252,9 @@ msgid "Import" msgstr "Importer" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exporter" @@ -4343,15 +4424,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scène" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Chemin de la scène :" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4479,6 +4551,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Contrôle de version" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nom d'utilisateur" @@ -4506,6 +4582,10 @@ msgstr "Basculer en mode sans distraction." msgid "Add a new scene." msgstr "Ajouter une nouvelle scène." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scène" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Aller à la scène ouverte précédemment." @@ -5303,6 +5383,11 @@ msgstr "" "Aucun préréglage d'exportation exécutable trouvé pour cette plate-forme. \n" "Ajoutez un préréglage exécutable dans le menu d'exportation." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projet" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Écrivez votre code dans la méthode _run()." @@ -5578,7 +5663,9 @@ msgid "Draw Spaces" msgstr "Appels de dessin :" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigation" @@ -7066,7 +7153,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filtre" @@ -7350,6 +7437,18 @@ msgid "Saving..." msgstr "Enregistrement…" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10360,6 +10459,7 @@ msgid "Points" msgstr "Points" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Polygones" @@ -11746,7 +11846,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Géométrie invalide, impossible de remplacer par un maillage." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Convertir en Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12750,8 +12851,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Sélectionner la forme précédente, sous-tuile, ou tuile." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Région" @@ -14279,36 +14379,10 @@ msgid "Delete preset '%s'?" msgstr "Supprimer le préréglage « %s » ?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Échec de l'exportation du projet pour la plate-forme « %s ».\n" -"Les modèles d'exportation semblent être manquants ou invalides." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Échec de l'exportation du projet pour la plate-forme « %s ».\n" -"Cela peut être dû à un problème de configuration dans le préréglage " -"d'exportation ou dans vos paramètres d'exportation." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Tout exporter" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Le chemin de l'exportation donné n'existe pas :" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme :" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Chemin d'exportation" @@ -14455,6 +14529,11 @@ msgid "Export templates for this platform are missing:" msgstr "Modèles d'exportation manquants pour cette plateforme :" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fondateurs du projet" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gérer les modèles d'exportation" @@ -16896,7 +16975,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Polygones" @@ -17513,7 +17592,6 @@ msgid "Use In Baked Light" msgstr "Précalculer les lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17543,6 +17621,19 @@ msgstr "Centre" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigation" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Mode Navigation" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Plan suivant" @@ -19067,10 +19158,6 @@ msgid "Could not execute on device." msgstr "Impossible d'exécuter sur l'appareil." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Impossible de trouver l'outil 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19202,12 +19289,17 @@ msgstr "" "La version « Target Sdk » doit être supérieure ou égale à la version « Min " "Sdk »." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signaux" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "Impossible de trouver 'apksigner'.\n" "Veuillez vérifier que la commande est disponible dans le dossier build-tools " @@ -19227,6 +19319,11 @@ msgid "Could not find keystore, unable to export." msgstr "Impossible de trouver le keystore, impossible d'exporter." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Impossible de démarrer le sous-processus !" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' est retourné avec l'erreur #%d" @@ -19261,7 +19358,8 @@ msgstr "" "*.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Format d'export non supporté !\n" #: platform/android/export/export_plugin.cpp @@ -19274,10 +19372,9 @@ msgstr "" "menu 'Projet'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "La version d'Android ne correspond pas :\n" @@ -19286,14 +19383,16 @@ msgstr "" "Veuillez réinstaller la version d'Android depuis le menu 'Projet'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Impossible d'écraser les fichiers res://android/build/res/*.xml avec le nom " "du projet" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n" #: platform/android/export/export_plugin.cpp @@ -19305,8 +19404,9 @@ msgid "Building Android Project (gradle)" msgstr "Construire le Project Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "La construction du projet Android a échoué, vérifiez la sortie pour " @@ -19327,7 +19427,8 @@ msgstr "" "du projet gradle pour les journaux." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Paquet non trouvé : %s" #: platform/android/export/export_plugin.cpp @@ -19335,17 +19436,16 @@ msgid "Creating APK..." msgstr "Création de l'APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Impossible de trouver le modèle de l'APK à exporter :\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19359,7 +19459,8 @@ msgid "Adding files..." msgstr "Ajout de fichiers..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Impossible d'exporter les fichiers du projet" #: platform/android/export/export_plugin.cpp @@ -19600,6 +19701,17 @@ msgstr "NÅ“ud Personnalisé" msgid "Custom BG Color" msgstr "NÅ“ud Personnalisé" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Gérer les modèles" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Modèle de version personnalisée introuvable." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID non spécifié - ne peut pas configurer le projet." @@ -19621,22 +19733,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Exécutez le HTML exporté dans le navigateur par défaut du système." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Impossible d'ouvrir le modèle pour exportation :" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Modèle d'exportation non valide :" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Impossible d'écrire le fichier :" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Définir la marge" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Impossible de lire le fichier :" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Variant" msgstr "Variant" @@ -19710,15 +19835,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Impossible de lire le shell HTML :" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Impossible de créer le répertoire du serveur HTTP :" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Erreur de démarrage du serveur HTTP :" #: platform/javascript/export/export.cpp @@ -20014,9 +20142,28 @@ msgid "Apple Team ID" msgstr "Apple Team ID" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Impossible d'exporter les fichiers du projet" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Impossible de démarrer le sous-processus !" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localisation" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20032,19 +20179,75 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Aucune identité trouvée." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Erreur lors de l'enregistrement du fichier : %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Directions" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Impossible de démarrer le sous-processus !" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Création de l'aperçu" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Impossible de trouver le modèle de l'application à exporter :" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Modèle d'exportation non valide :" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20052,7 +20255,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20093,6 +20296,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projet" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificateur de bundle non valide :" @@ -20431,6 +20644,11 @@ msgid "Debug Algorithm" msgstr "Débogueur" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Impossible de supprimer le fichier temporaire :" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20475,6 +20693,78 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rotation aléatoire :" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Impossible de trouver le keystore, impossible d'exporter." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Impossible de trouver le keystore, impossible d'exporter." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"L'outil « rcedit » doit être configuré dans les préférences de l'éditeur " +"(Exporter > Windows > Rcedit) for modifier l'icône ou les informations de " +"l'application." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Impossible de trouver le keystore, impossible d'exporter." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Impossible de trouver le keystore, impossible d'exporter." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identifiant invalide :" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nom invalide." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"L'outil « rcedit » doit être configuré dans les préférences de l'éditeur " +"(Exporter > Windows > Rcedit) for modifier l'icône ou les informations de " +"l'application." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Impossible de supprimer le fichier temporaire :" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20496,6 +20786,23 @@ msgid "Invalid product version:" msgstr "Version du produit invalide :" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Fichier exécutable invalide." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nouvelle Fenêtre" @@ -20512,6 +20819,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20639,7 +20950,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "Distance Maximale" @@ -21511,17 +21823,19 @@ msgstr "" "polygone." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"Un NavigationPolygonInstance doit être un enfant ou petit-enfant d'un nÅ“ud " -"Navigation2D. Il fournit seulement des données de navigation." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centrée en bas" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Se déplacer" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22767,14 +23081,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "Le NavigationAgent ne peut être utilisé que sous un nÅ“ud spatial." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"Un NavigationMeshInstance doit être enfant ou sous-enfant d'un nÅ“ud de type " -"Navigation. Il fournit uniquement des données de navigation." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25503,6 +25809,16 @@ msgid "3D Physics" msgstr "Physique" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigation" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigation" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26911,7 +27227,7 @@ msgstr "Transmission" msgid "Refraction" msgstr "Réfraction" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26995,7 +27311,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Mise à l'échelle :" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Définir type de variable" #: scene/resources/navigation_mesh.cpp @@ -27013,10 +27334,15 @@ msgid "Source Group Name" msgstr "Source" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Segments" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27026,11 +27352,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Région" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Fusionner depuis la scène" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27044,6 +27375,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Afficher par défaut" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Choisissez distance :" @@ -27061,7 +27397,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27475,6 +27811,11 @@ msgid "Scenario" msgstr "Scène" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigation" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27492,6 +27833,26 @@ msgstr "Linéaire gauche" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Défaut" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Aperçu par défaut" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "En période de test" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Modifier la connexion :" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index aad48c8156..884214d851 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -204,9 +204,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -357,6 +358,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "ScagairÃ..." + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Scrios ionchur" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -541,7 +552,8 @@ msgstr "Cuntas:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -624,24 +636,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -750,7 +761,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "ScagairÃ..." @@ -2146,7 +2158,7 @@ msgid "Open" msgstr "Oscailte" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2438,7 +2450,7 @@ msgid "Bus Options" msgstr "Cruthaigh" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2694,6 +2706,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2706,6 +2734,27 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "ScagairÃ..." + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2806,8 +2855,26 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "Ãbhar:" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2978,9 +3045,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4058,14 +4125,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4182,6 +4241,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Ainm nua:" @@ -4210,6 +4273,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4938,6 +5005,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Cuntas:" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5192,7 +5264,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6581,7 +6655,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "ScagairÃ..." @@ -6855,6 +6929,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9734,6 +9820,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11088,7 +11175,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12056,8 +12143,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13482,31 +13568,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13639,6 +13704,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15897,7 +15966,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16465,7 +16534,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16494,6 +16562,19 @@ msgstr "Nód Cumaisc2" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Nód Beochana" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Nód Beochana" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17936,10 +18017,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18043,12 +18120,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Nód Measc" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18064,6 +18145,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18092,7 +18177,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18103,19 +18188,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18128,7 +18211,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18144,7 +18227,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Ãbhar:" #: platform/android/export/export_plugin.cpp @@ -18152,15 +18235,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18170,7 +18250,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18401,6 +18481,15 @@ msgstr "Cruthaigh" msgid "Custom BG Color" msgstr "Cruthaigh" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18422,19 +18511,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Ãbhar:" + +#: platform/javascript/export/export.cpp +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18508,15 +18606,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18794,9 +18892,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "CrannBeochan" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18812,15 +18927,67 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Cuntas:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18831,7 +18998,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18872,6 +19039,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "CrannBeochan" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19169,6 +19345,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19211,6 +19391,62 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19229,6 +19465,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19244,6 +19496,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19355,7 +19611,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20125,13 +20382,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Nód Cumaisc2" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21213,12 +21473,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23631,6 +23885,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Nód Beochana" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Nód Beochana" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24928,7 +25192,7 @@ msgstr "Athrú: " msgid "Refraction" msgstr "Cuntas:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25001,8 +25265,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Scála:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Cuntas:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25018,10 +25288,15 @@ msgid "Source Group Name" msgstr "Acmhainn" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Ãbhar:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25030,11 +25305,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Cruthaigh" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25046,6 +25326,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "ScagairÃ..." + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25062,7 +25347,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25434,6 +25719,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Nód Beochana" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25449,6 +25739,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Scrios ionchur" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Nód Cumaisc2" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Scrios ionchur" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Ãbhar:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/gl.po b/editor/translations/gl.po index de85fe0a68..398746ea6a 100644 --- a/editor/translations/gl.po +++ b/editor/translations/gl.po @@ -223,9 +223,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "AnalÃtica de Rendemento de Rede" @@ -386,6 +387,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mover Modo" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Eliminar Entrada" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -587,7 +598,8 @@ msgstr "Descrición" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Executar" @@ -674,6 +686,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Ruta da Escena:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -681,19 +698,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Control de Versións" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Control de Versións" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Nome do Plugin:" +msgid "Version Control Plugin Name" +msgstr "Control de Versións" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -810,7 +823,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtros:" @@ -2249,8 +2263,8 @@ msgid "Open" msgstr "Abrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Dono De:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2562,7 +2576,7 @@ msgid "Bus Options" msgstr "Opcións de Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -2822,6 +2836,25 @@ msgid "Choose" msgstr "Elixir" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Copiar Ruta do Nodo" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paquete instalado correctamente!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Fracasado:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Almacenando Arquivo:" @@ -2834,6 +2867,31 @@ msgid "Packing" msgstr "Empaquetando" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Gardar Como" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Non se puido crear cartafol." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Non se puido iniciar subproceso!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Non se puido abrir o arquivo para escritura:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Gardar Como" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2954,11 +3012,31 @@ msgstr "Non se encontrou un modelo de depuración personalizado." msgid "Custom release template not found." msgstr "Non se encontrou un modelo release personalizado." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Modelo:" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Non se encontrou o arquivo do modelo:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Fallou a carga do Recurso." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Na exportación de 32 bits o PCK integrado non pode ser maior de 4 GiB." @@ -3133,9 +3211,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportación" @@ -4310,15 +4388,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Escena" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Ruta da Escena:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4444,6 +4513,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versións" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Renomear" @@ -4472,6 +4545,10 @@ msgstr "Act./Desact. modo sen distraccións." msgid "Add a new scene." msgstr "Engadir unha nova escena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Escena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ir á escena aberta previamente." @@ -5253,6 +5330,11 @@ msgstr "" "Engade uns axustes de exportación executables, ou define algún xa existente " "como executable." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proxecto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escribe a túa lóxica no método '_run()'." @@ -5532,7 +5614,9 @@ msgid "Draw Spaces" msgstr "Chamadas" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navegación" @@ -7018,7 +7102,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtros:" @@ -7314,6 +7398,18 @@ msgid "Saving..." msgstr "Gardando..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10281,6 +10377,7 @@ msgid "Points" msgstr "Puntos" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgonos" @@ -11687,8 +11784,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Converter a CPUParticles2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12728,8 +12826,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Rexión" @@ -14222,33 +14319,10 @@ msgid "Delete preset '%s'?" msgstr "Eliminar axustes de exportación '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Fallou a exportación do proxecto á plataforma '%s'.\n" -"Esto pode deberse a un problema cos axustes de exportación." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14392,6 +14466,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadores do Proxecto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16751,7 +16830,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgonos" @@ -17367,7 +17446,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17397,6 +17475,19 @@ msgstr "Centro" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navegación" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navegación" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18929,10 +19020,6 @@ msgid "Could not execute on device." msgstr "Non se puido crear cartafol." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19042,12 +19129,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19066,6 +19157,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Non se puido iniciar subproceso!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19095,7 +19191,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19106,20 +19202,18 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto." #: platform/android/export/export_plugin.cpp @@ -19131,8 +19225,9 @@ msgid "Building Android Project (gradle)" msgstr "Construir Proxecto Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "A creación do proxecto para Android fallou; comproba a saÃda para encontrar " @@ -19152,7 +19247,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Contenido do Paquete:" #: platform/android/export/export_plugin.cpp @@ -19161,15 +19256,13 @@ msgid "Creating APK..." msgstr "Conectando..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Non se puido iniciar subproceso!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19181,7 +19274,7 @@ msgstr "Engadindo %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Non se puido iniciar subproceso!" #: platform/android/export/export_plugin.cpp @@ -19423,6 +19516,17 @@ msgstr "Cortar Nodos" msgid "Custom BG Color" msgstr "Cortar Nodos" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Modelo:" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Non se encontrou un modelo release personalizado." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19445,23 +19549,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Non se puido crear cartafol." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Extensión inválida." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Non se puido crear cartafol." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Contidos:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Non se puido crear cartafol." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Escalar (Razón):" @@ -19537,17 +19653,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Non se puido crear cartafol." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Non se puido crear cartafol." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Erro ao gardar TileSet!" #: platform/javascript/export/export.cpp @@ -19845,9 +19961,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Non se puido iniciar subproceso!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Non se puido iniciar subproceso!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Linguaxe" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19863,18 +19998,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Non se atopou ningún sub-recurso." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Erro gardando o arquivo: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direccións" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Non se puido iniciar subproceso!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Creando Miniatura" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Non se puido iniciar subproceso!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ruta base inválida." #: platform/osx/export/export.cpp msgid "" @@ -19884,7 +20075,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19925,6 +20116,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proxecto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto." + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -20234,6 +20435,11 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Non se pode eliminar o arquivo temporal:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20281,6 +20487,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Pegar Animación" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Argumentos inválidos para construir '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nome inválido." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Non se pode eliminar o arquivo temporal:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20302,6 +20568,23 @@ msgid "Invalid product version:" msgstr "Nome de Proxecto Inválido." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Extensión inválida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nova Xanela" @@ -20318,6 +20601,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20443,7 +20730,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instanciar" @@ -21281,15 +21569,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centro Abaixo" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viaxe" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22484,12 +22776,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25155,6 +25441,16 @@ msgid "3D Physics" msgstr "Fotograma de FÃsica %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navegación" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26562,7 +26858,7 @@ msgstr "Transición: " msgid "Refraction" msgstr "Escalar (Razón):" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26645,7 +26941,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Escalado: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Cambiar Tipo Base:" #: scene/resources/navigation_mesh.cpp @@ -26662,10 +26963,15 @@ msgid "Source Group Name" msgstr "Fonte" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Fragment" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26674,11 +26980,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Rexión" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26691,6 +27002,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Cargar Valores por Defecto" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26707,7 +27023,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27118,6 +27434,11 @@ msgid "Scenario" msgstr "Escena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navegación" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27135,6 +27456,26 @@ msgstr "Por Defecto" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Por Defecto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Vista Previa Cinemática" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Probas" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Editar Conexión:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/he.po b/editor/translations/he.po index e1019a21f7..78c74fd01b 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -227,9 +227,10 @@ msgid "Data" msgstr "מידע" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "רשת" @@ -385,6 +386,16 @@ msgstr "תור הור×ות" msgid "Max Size (KB)" msgstr "גודל מקסימלי (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "מצב ×©×™× ×•×™ ×§× ×” מידה (R)" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "מחיקת קלט" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -576,7 +587,8 @@ msgstr "תי×ור" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "הרצה" @@ -663,6 +675,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "× ×ª×™×‘ ×¡×¦× ×•×ª:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -670,19 +687,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "בקרת גירס×ות" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "בקרת גירס×ות" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "×©× ×”×ž×¤×¨×§:" +msgid "Version Control Plugin Name" +msgstr "בקרת גירס×ות" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -796,7 +809,8 @@ msgid "Quality" msgstr "×יכות" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "×ž×¡× × ×™×" @@ -2220,8 +2234,8 @@ msgid "Open" msgstr "פתיחה" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "×‘×¢×œ×™× ×©×œ:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2520,7 +2534,7 @@ msgid "Bus Options" msgstr "×פשרויות ×פיק" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "שכפול" @@ -2778,6 +2792,25 @@ msgid "Choose" msgstr "בחירה" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "העתקת × ×ª×™×‘ המפרק" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "החבילה ×”×•×ª×§× ×” בהצלחה!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "× ×›×©×œ:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "קובץ ×חסון:" @@ -2790,6 +2823,31 @@ msgid "Packing" msgstr "×ורז" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "שמירה בש×" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח קובץ לכתיבה:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "שמירה בש×" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2905,11 +2963,32 @@ msgstr "×ª×‘× ×™×ª × ×™×¤×•×™ שגי×ות מות×מת ×ישית ×œ× × ×ž×¦× msgid "Custom release template not found." msgstr "×ª×‘× ×™×ª שחרור מות×מת-×ישית ×œ× × ×ž×¦××”." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "הקובץ ×œ× ×§×™×™×." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "קובץ ×”×ª×‘× ×™×ª ×œ× × ×ž×¦×:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "×ª×‘× ×™×ª ×™×¦×•× ×©×’×•×™×”:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "×‘×™×™×¦×•× ×רכיטקטורת 32 ביט, ×” PCK ×”×ž×•×‘× ×” ×œ× ×™×›×•×œ לחרוג מעבר ל 4 GiB." @@ -3078,9 +3157,9 @@ msgid "Import" msgstr "ייבו×" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "ייצו×" @@ -4221,15 +4300,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "×¡×¦× ×”" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "× ×ª×™×‘ ×¡×¦× ×•×ª:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4357,6 +4427,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "בקרת גירס×ות" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "×©×™× ×•×™ ש×" @@ -4385,6 +4459,10 @@ msgstr "הפעל/בטל מצב ×œ×œ× ×”×¡×—×•×ª דעת." msgid "Add a new scene." msgstr "הוספת ×¡×¦× ×” חדשה." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "×¡×¦× ×”" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "מעבר ×œ×¡×¦× ×” הקודמת." @@ -5164,6 +5242,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "מיז×" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "× ×™×ª×Ÿ לכתוב ×ת הלוגיקה שלך בשיטה ‎_run()‎." @@ -5445,7 +5528,9 @@ msgid "Draw Spaces" msgstr "קרי×ות" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "עריכת מצולע" @@ -6960,7 +7045,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "×ž×¡× × ×™×..." @@ -7254,6 +7339,18 @@ msgid "Saving..." msgstr "שמירה…" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10288,6 +10385,7 @@ msgid "Points" msgstr "הזזת × ×§×•×“×”" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "עריכת מצולע" @@ -11732,7 +11830,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "המרה ל×ותיות גדולות" #: editor/plugins/sprite_editor_plugin.cpp @@ -12799,8 +12897,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "מצב גולמי" @@ -14328,32 +14425,11 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "ייצו×" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "×™×™×¦×•× ×ž×™×–×" @@ -14495,6 +14571,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "מקימי המיז×" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª ייצו×" @@ -16865,7 +16946,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "עריכת מצולע" @@ -17483,7 +17564,6 @@ msgid "Use In Baked Light" msgstr "×פיית Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17513,6 +17593,19 @@ msgstr "×”×–×—×” משמ×ל" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "עריכת מצולע" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "עריכת מצולע" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "המישור הב×" @@ -19068,10 +19161,6 @@ msgid "Could not execute on device." msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19183,12 +19272,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "×ות" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19208,6 +19301,11 @@ msgid "Could not find keystore, unable to export." msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך ×ž×©× ×”!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19238,7 +19336,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19252,9 +19350,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "חוסר הת×מה בגירסת ×× ×“×¨×•×יד:\n" @@ -19264,12 +19360,13 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19281,8 +19378,9 @@ msgid "Building Android Project (gradle)" msgstr "×‘× ×™×™×ª ×ž×™×–× ×× ×“×¨×•×יד (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "×‘× ×™×™×ª ×ž×™×–× ×× ×“×¨×•×יד × ×›×©×œ×”, × ×™×ª×Ÿ לבדוק ×ת הפלט ל×יתור השגי××”.\n" @@ -19300,7 +19398,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "×”× ×¤×©×” ×œ× × ×ž×¦××”: '%s'" #: platform/android/export/export_plugin.cpp @@ -19310,15 +19408,12 @@ msgstr "יצירת קווי מת×ר..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19330,7 +19425,7 @@ msgstr "×יתור…" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" #: platform/android/export/export_plugin.cpp @@ -19572,6 +19667,17 @@ msgstr "גזירת מפרקי×" msgid "Custom BG Color" msgstr "גזירת מפרקי×" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "×ª×‘× ×™×ª שחרור מות×מת-×ישית ×œ× × ×ž×¦××”." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "×œ× ×¦×•×™×Ÿ App Store Team ID - ×œ× × ×™×ª×Ÿ להגדיר ×ת המיז×." @@ -19593,23 +19699,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "הפעלת ×”Ö¾HTML ×”×ž×™×•×¦× ×‘×“×¤×“×¤×Ÿ בררת המחדל של המערכת." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "×ª×‘× ×™×ª ×™×¦×•× ×©×’×•×™×”:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "תוכן:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "×ž×•× ×™×:" @@ -19685,17 +19803,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ž×¢×˜×¤×ª HTML מות×מת:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "שגי××” בשמירת ×”×¡×¦× ×”." #: platform/javascript/export/export.cpp @@ -19993,9 +20111,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך ×ž×©× ×”!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "עריכת מצולע" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20011,21 +20148,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "×œ× × ×ž×¦×!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "שגי××” בשמירת קובץ: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "×›×™×•×•× ×™×" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך ×ž×©× ×”!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "יצירת ×ª×ž×•× ×” ממוזערת" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "×ª×‘× ×™×ª ×™×¦×•× ×©×’×•×™×”:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20033,7 +20225,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20075,6 +20267,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "מיז×" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "מזהה ×œ× ×—×•×§×™:" @@ -20388,6 +20590,11 @@ msgid "Debug Algorithm" msgstr "× ×™×¤×•×™ שגי×ות" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ להסיר:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20435,6 +20642,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "הדבקת ×”× ×¤×©×”" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ לפתוח ×ª×‘× ×™×ª לייצו×:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "מזהה ×œ× ×—×•×§×™:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "×©× ×©×’×•×™." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "×œ× × ×™×ª×Ÿ להסיר:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20456,6 +20727,23 @@ msgid "Invalid product version:" msgstr "GUID מוצר ×œ× ×—×•×§×™." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "סיומת ×œ× ×—×•×§×™×ª." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "חלון חדש" @@ -20472,6 +20760,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20598,7 +20890,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "בחירת מרחק:" @@ -21439,17 +21732,19 @@ msgstr "" "מ×פיין ×ו לצייר מצולע." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance חייב להיות ילד ×ו × ×›×“ למפרק Navigation2D. ×”×•× ×ž×¡×¤×§ " -"רק × ×ª×•× ×™ × ×™×•×•×˜." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "מתחת" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "טיול" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22655,14 +22950,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance חייב להיות ילד ×ו × ×›×“ למפרק Navigation. ×”×•× ×ž×¡×¤×§ רק " -"× ×ª×•× ×™ × ×™×•×•×˜." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25341,6 +25628,16 @@ msgid "3D Physics" msgstr "שקופית פיזיקלית %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "עריכת מצולע" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "עריכת מצולע" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26753,7 +27050,7 @@ msgstr "מעברון: " msgid "Refraction" msgstr "×ž×•× ×™×:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26835,7 +27132,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "×§× ×” מידה:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "קביעת סוג ×ž×©×ª× ×”" #: scene/resources/navigation_mesh.cpp @@ -26853,10 +27155,15 @@ msgid "Source Group Name" msgstr "מש×ב" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "תוכן:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26866,11 +27173,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "מצב גולמי" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "מיזוג ×ž×¡×¦× ×”" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26884,6 +27196,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "×˜×¢×™× ×ª בררת המחדל" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "בחירת מרחק:" @@ -26900,7 +27217,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27310,6 +27627,11 @@ msgid "Scenario" msgstr "×¡×¦× ×”" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "עריכת מצולע" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27327,6 +27649,26 @@ msgstr "×œ×™× ×™×רי" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "בחירת מחדל" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "תצוגה מקדימה:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "בבדיקה" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "עריכת חיבור:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index ec193d7f2d..2486887cac 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -214,9 +214,10 @@ msgid "Data" msgstr "डेटा" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "संजाल" @@ -369,6 +370,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "दृशà¥à¤¯ रोकें" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -560,7 +570,8 @@ msgstr "विवरण" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -647,6 +658,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "दृशà¥à¤¯ पथ:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -654,19 +670,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "पà¥à¤²à¤—इनà¥à¤¸" +msgid "Version Control Plugin Name" +msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -780,7 +792,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "फिलà¥à¤Ÿà¤°:" @@ -2209,8 +2222,8 @@ msgid "Open" msgstr "खोलो इसे" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "के सà¥à¤µà¤¾à¤®à¥€:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2518,7 +2531,7 @@ msgid "Bus Options" msgstr "बस विकलà¥à¤ª" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" @@ -2777,6 +2790,24 @@ msgid "Choose" msgstr "चà¥à¤¨à¥‡à¤‚" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "पैकेज सफलतापूरà¥à¤µà¤• सà¥à¤¥à¤¾à¤ªà¤¿à¤¤!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "विफल:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "फ़ाइल सà¥à¤Ÿà¥‹à¤° कर रहा है:" @@ -2789,6 +2820,31 @@ msgid "Packing" msgstr "पैक कर रहा है" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "इस तरह बचा के रखिये" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "फ़ाइल रायटिंग के लिठनहीं खोल सकते:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "इस तरह बचा के रखिये" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2906,11 +2962,31 @@ msgstr "कसà¥à¤Ÿà¤® डिबग टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं ठmsgid "Custom release template not found." msgstr "कसà¥à¤Ÿà¤® रिलिज टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं मिला." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ का पà¥à¤°à¤¬à¤‚धन करें" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ फ़ाइल नहीं मिला:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "निरà¥à¤¯à¤¾à¤¤ टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ ज़िप नहीं खोल सकते।" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "32-बिट â€à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ पर à¤à¤®à¤¬à¥‡à¤¡à¥à¤¡à¥‡à¤¡ PCK 4 GiB से बड़ी नहीं इसà¥à¤¤à¥‡à¤®à¤¾à¤² कर सकते." @@ -3084,9 +3160,9 @@ msgid "Import" msgstr "आयात" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "â€à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ" @@ -4230,15 +4306,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "दृशà¥à¤¯" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "दृशà¥à¤¯ पथ:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4363,6 +4430,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "नाम बदली" @@ -4391,6 +4462,10 @@ msgstr "वà¥à¤¯à¤¾à¤•à¥à¤²à¤¤à¤¾ मà¥à¤•à¥à¤¤ मोड टॉगल।" msgid "Add a new scene." msgstr "à¤à¤• नया दृशà¥à¤¯ जोड़ें।" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "दृशà¥à¤¯" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "पहले खोले गठदृशà¥à¤¯ में जाà¤à¤‚।" @@ -5180,6 +5255,11 @@ msgstr "" "कृपया निरà¥à¤¯à¤¾à¤¤ मेनू में à¤à¤• निषà¥à¤ªà¤¾à¤¦à¤¨ योगà¥à¤¯ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ जोड़ें, या मौजूदा पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ को निषà¥à¤ªà¤¾à¤¦à¤¨ योगà¥à¤¯ के " "रूप में सेट करें।" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "परियोजना" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "अपने तरà¥à¤• को _run () विधि में लिखें।" @@ -5453,7 +5533,9 @@ msgid "Draw Spaces" msgstr "कॉल" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" @@ -6928,7 +7010,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "फिलà¥à¤Ÿà¤°:" @@ -7217,6 +7299,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10146,6 +10240,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" @@ -11540,8 +11635,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12572,8 +12668,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14066,31 +14161,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14229,6 +14303,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "परियोजना के संसà¥à¤¥à¤¾à¤ªà¤•" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16552,7 +16631,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" @@ -17146,7 +17225,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17176,6 +17254,19 @@ msgstr "को हटा दें" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18704,10 +18795,6 @@ msgid "Could not execute on device." msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18812,12 +18899,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "सिगà¥à¤¨à¤²" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18836,6 +18927,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18864,7 +18960,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18875,20 +18971,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18900,7 +18995,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18916,7 +19011,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "पैकेज में है:" #: platform/android/export/export_plugin.cpp @@ -18925,15 +19020,13 @@ msgid "Creating APK..." msgstr "जोड़ने..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18945,7 +19038,7 @@ msgstr "पसंदीदा:" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" #: platform/android/export/export_plugin.cpp @@ -19187,6 +19280,17 @@ msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" msgid "Custom BG Color" msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ का पà¥à¤°à¤¬à¤‚धन करें" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "कसà¥à¤Ÿà¤® रिलिज टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं मिला." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19209,23 +19313,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "गलत फॉणà¥à¤Ÿ का आकार |" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "शो में फाइल सिसà¥à¤Ÿà¤®" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "संसà¥à¤•रण:" @@ -19301,17 +19417,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "तà¥à¤°à¥à¤Ÿà¤¿ बचत टाइलसेट!" #: platform/javascript/export/export.cpp @@ -19602,9 +19718,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19620,18 +19755,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "सब-रिसोरà¥à¤¸ नहीं मिला." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "फ़ाइल बचाने में चूक: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "निरà¥à¤¦à¥‡à¤¶à¥‹à¤‚" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "थंबनेल बनाना" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "गलत फॉणà¥à¤Ÿ का आकार |" #: platform/osx/export/export.cpp msgid "" @@ -19641,7 +19832,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19683,6 +19874,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "परियोजना" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "गलत फॉणà¥à¤Ÿ का आकार |" @@ -19995,6 +20195,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "अलà¥à¤ªà¤•ालिक फ़ाइल निकाली नहीं जा सकà¥à¤¤à¥€:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20041,6 +20246,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "कोनà¥à¤¸à¥à¤Ÿà¤¨à¥à¤Ÿ" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "गलत फॉणà¥à¤Ÿ का आकार |" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "अमानà¥à¤¯ नाम." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "अलà¥à¤ªà¤•ालिक फ़ाइल निकाली नहीं जा सकà¥à¤¤à¥€:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20062,6 +20327,23 @@ msgid "Invalid product version:" msgstr "गलत फॉणà¥à¤Ÿ का आकार |" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "गलत फॉणà¥à¤Ÿ का आकार |" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "नया विंडो" @@ -20078,6 +20360,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20197,7 +20483,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "इनसà¥à¤Ÿà¤¨à¥à¤¸" @@ -21002,13 +21289,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "को हटा दें" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22142,12 +22432,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24726,6 +25010,16 @@ msgid "3D Physics" msgstr "फिजिकà¥à¤¸ फà¥à¤°à¥‡à¤® %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26108,7 +26402,7 @@ msgstr "संकà¥à¤°à¤®à¤£: " msgid "Refraction" msgstr "संसà¥à¤•रण:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26187,8 +26481,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "सà¥à¤•ेल अनà¥à¤ªà¤¾à¤¤:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "संसà¥à¤•रण:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -26204,10 +26504,15 @@ msgid "Source Group Name" msgstr "संसाधन" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ बढ़ाà¤à¤" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26216,11 +26521,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "खà¥à¤²à¤¾ हाल" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26233,6 +26543,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "पà¥à¤°à¤¾à¤¯à¤¿à¤• लोड कीजिये" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26249,7 +26564,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26650,6 +26965,11 @@ msgid "Scenario" msgstr "दृशà¥à¤¯" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26667,6 +26987,26 @@ msgstr "चूक" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "चूक" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "चूक" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "चूक" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "कनेकà¥à¤¶à¤¨ संपादित करें:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index 23e730f0a2..c9a87722f5 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -214,9 +214,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -372,6 +373,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "NaÄin reprodukcije:" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -558,7 +568,8 @@ msgstr "Opis" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -643,26 +654,24 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -#, fuzzy -msgid "Plugin Name" -msgstr "Naziv ÄŒvora(node):" +msgid "Version Control Plugin Name" +msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -770,7 +779,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtriraj signale" @@ -2182,8 +2192,8 @@ msgid "Open" msgstr "Otvori" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Vlasnici:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2484,7 +2494,7 @@ msgid "Bus Options" msgstr "Opcije Klase" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliciraj" @@ -2741,6 +2751,23 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paket uspjeÅ¡no instaliran!" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2753,6 +2780,28 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Spremi Kao" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Spremi Kao" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2856,8 +2905,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3033,9 +3099,9 @@ msgid "Import" msgstr "Uvezi" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Izvoz" @@ -4124,14 +4190,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4252,6 +4310,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Preimenuj zvuÄnu sabirnicu" @@ -4280,6 +4342,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5020,6 +5086,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Direkcije" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5283,7 +5354,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigacija" @@ -6716,7 +6789,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtriraj signale" @@ -7001,6 +7074,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9907,6 +9992,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11273,8 +11359,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Spoji '%s' na '%s'" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12261,8 +12348,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Regija" @@ -13716,31 +13802,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13877,6 +13942,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "OsnivaÄi projekta" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16160,7 +16230,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16745,7 +16815,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16775,6 +16844,19 @@ msgstr "Premjesti Ävor(node)" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigacija" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "NaÄin Navigacije" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18261,10 +18343,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18368,12 +18446,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Brisati odabrani kljuÄ/odabrane kljuÄeve" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18389,6 +18471,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18417,7 +18503,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18428,19 +18514,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18453,7 +18537,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18468,7 +18552,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18476,15 +18560,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18494,8 +18575,9 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "" +#, fuzzy +msgid "Could not export project files." +msgstr "Trenutni Profil:" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -18731,6 +18813,15 @@ msgstr "Funkcije" msgid "Custom BG Color" msgstr "Funkcije" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18752,23 +18843,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Nevažeće ime." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Trenutni Profil:" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Uredi vezu:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Trenutni Profil:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Opis:" @@ -18843,16 +18945,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." +msgstr "Trenutni Profil:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "PogreÅ¡ka prilikom spremanja datoteke: %s" #: platform/javascript/export/export.cpp msgid "Web" @@ -19133,9 +19237,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Trenutni Profil:" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Navigacija" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19151,18 +19273,72 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "PogreÅ¡ka prilikom spremanja datoteke: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direkcije" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Nevažeće ime." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19170,7 +19346,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19211,6 +19387,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Direkcije" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19512,6 +19697,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19557,6 +19746,65 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Zalijepi Animaciju" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Neispravni argumenti za konstrukciju '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nevažeće ime." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19577,6 +19825,23 @@ msgid "Invalid product version:" msgstr "Nevažeće ime." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Nevažeće ime." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19592,6 +19857,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19707,7 +19976,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20500,13 +20770,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Premjesti Ävor(node)" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21617,12 +21890,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24132,6 +24399,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigacija" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigacija" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25492,7 +25769,7 @@ msgstr "" msgid "Refraction" msgstr "Opis:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25570,7 +25847,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Upozorenje:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Promijeni vrstu baze:" #: scene/resources/navigation_mesh.cpp @@ -25587,7 +25869,11 @@ msgid "Source Group Name" msgstr "Izvor:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25599,11 +25885,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Regija" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25616,6 +25907,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "UÄitaj Zadano" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25632,7 +25928,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26020,6 +26316,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigacija" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26037,6 +26338,26 @@ msgstr "Lijevo Linearno" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Mesh2D Pregled" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Mesh2D Pregled" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Mesh2D Pregled" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Uredi vezu:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index dc2f97cc7d..5ee85051da 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -23,13 +23,14 @@ # balintmaci <balintmaci@gmail.com>, 2021. # Balázs Püspök-Kiss <pkblazsak@gmail.com>, 2021. # Mr.Catfood <sipos22@msn.com>, 2022. +# 6Leoo6 <leo.takacs@yahoo.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-03 02:51+0000\n" -"Last-Translator: Mr.Catfood <sipos22@msn.com>\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" +"Last-Translator: 6Leoo6 <leo.takacs@yahoo.com>\n" "Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/" "godot/hu/>\n" "Language: hu\n" @@ -37,7 +38,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -241,9 +242,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Hálózati profilkészÃtÅ‘" @@ -365,7 +367,7 @@ msgstr "Érvénytelen bemenet %i (nem átadott) a kifejezésben" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self nem használható, mert a példány null (nincs átadva)" +msgstr "Nem használható self mivel nincs megadva" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -405,6 +407,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mozgató Mód" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Bemenet Törlése" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -441,9 +453,8 @@ msgid "Pressed" msgstr "ElÅ‘re beállÃtott" #: core/os/input_event.cpp -#, fuzzy msgid "Scancode" -msgstr "Keresés" +msgstr "beolvasási kód" #: core/os/input_event.cpp msgid "Physical Scancode" @@ -451,7 +462,7 @@ msgstr "" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" @@ -605,7 +616,8 @@ msgstr "LeÃrás" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Futtatás" @@ -694,6 +706,11 @@ msgid "Main Run Args" msgstr "FÅ‘ Jelenet Argumentumok:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scene elérési Út:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -701,19 +718,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Verziókezelés" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Verziókezelés" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "BÅ‘vÃtmény neve:" +msgid "Version Control Plugin Name" +msgstr "Verziókezelés" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -832,7 +845,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "SzűrÅ‘k:" @@ -2152,7 +2166,7 @@ msgstr "Biztosan eltávolÃtja az összes kapcsolatot a(z) \"%s\" jelzésrÅ‘l?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "Jelzések" +msgstr "jelek" #: editor/connections_dialog.cpp msgid "Filter signals" @@ -2279,8 +2293,8 @@ msgid "Open" msgstr "Megnyitás" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Tulajdonosai:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2582,7 +2596,7 @@ msgid "Bus Options" msgstr "Busz BeállÃtások" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "MegkettÅ‘zés" @@ -2843,6 +2857,25 @@ msgid "Choose" msgstr "Kiválaszt" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Node Útvonal Másolása" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "A csomag telepÃtése sikeres volt!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Sikertelen:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Tároló Fájl:" @@ -2855,6 +2888,31 @@ msgid "Packing" msgstr "Csomagolás" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Mentés Másként" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nem sikerült létrehozni a mappát." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nem lehet megnyitni a fájlt Ãrásra:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Mentés Másként" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2974,11 +3032,32 @@ msgstr "Az egyéni hibakeresési sablon nem található." msgid "Custom release template not found." msgstr "Az egyéni kiadási sablon nem található." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Sablonok kezelése" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "A megadott útvonal nem létezik." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Sablon fájl nem található:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Nem nyitható meg az export sablon zip." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "32-bites exportokon a beágyazott PCK nem lehet nagyobb mint 4 GiB." @@ -3157,9 +3236,9 @@ msgid "Import" msgstr "Importálás" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportálás" @@ -4339,15 +4418,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Jelenet" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scene elérési Út:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4474,6 +4544,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Verziókezelés" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Ãtnevezés" @@ -4502,6 +4576,10 @@ msgstr "Zavarmentes mód váltása." msgid "Add a new scene." msgstr "Hozzáad egy új jelenetet." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Jelenet" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ugrás az elÅ‘zÅ‘leg megnyitott jelenetre." @@ -5279,6 +5357,11 @@ msgstr "" "Nem található futtatható exportállomány ehhez a platformhoz.\n" "Kérem adjon hozzá egy futtatható exportállományt az export menüben." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Ãrja a logikát a _run() metódusba." @@ -5559,7 +5642,9 @@ msgid "Draw Spaces" msgstr "HÃvások" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigáció" @@ -5813,7 +5898,7 @@ msgstr "Pont" #: scene/resources/particles_material.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp msgid "Shape" -msgstr "" +msgstr "Alakzat" #: editor/editor_settings.cpp #, fuzzy @@ -7053,7 +7138,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "SzűrÅ‘k:" @@ -7072,7 +7157,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp msgid "sRGB" -msgstr "" +msgstr "sRGB" #: editor/import/resource_importer_layered_texture.cpp #, fuzzy @@ -7351,6 +7436,18 @@ msgid "Saving..." msgstr "Mentés..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10319,6 +10416,7 @@ msgid "Points" msgstr "Pontok" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Sokszögek" @@ -11715,8 +11813,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Konvertálás CPUParticles2D-re" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12753,8 +12852,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Régió" @@ -13241,7 +13339,7 @@ msgstr "" #: editor/plugins/version_control_editor_plugin.cpp msgid "SSH Passphrase" -msgstr "" +msgstr "SSH Passphrase" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect new changes" @@ -14209,31 +14307,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Összes exportálása" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Exportálási Útvonal" @@ -14373,6 +14450,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projekt AlapÃtói" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Export Sablonok Kezelése" @@ -16704,10 +16786,9 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp -#, fuzzy +#: scene/3d/collision_polygon.cpp msgid "Polygon" -msgstr "Sokszögek" +msgstr "Sokszög" #: modules/csg/csg_shape.cpp msgid "Spin Degrees" @@ -17321,7 +17402,6 @@ msgid "Use In Baked Light" msgstr "Fény Besütése" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17351,6 +17431,19 @@ msgstr "Középre" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigáció" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigációs mód" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "KövetkezÅ‘ SÃklap" @@ -18128,7 +18221,7 @@ msgstr "" #: modules/visual_script/visual_script_flow_control.cpp msgid "While" -msgstr "" +msgstr "AmÃg" #: modules/visual_script/visual_script_flow_control.cpp msgid "while (cond):" @@ -18457,7 +18550,7 @@ msgstr "" #: modules/visual_script/visual_script_yield_nodes.cpp msgid "Yield" -msgstr "" +msgstr "hozam" #: modules/visual_script/visual_script_yield_nodes.cpp msgid "Wait" @@ -18896,10 +18989,6 @@ msgid "Could not execute on device." msgstr "Nem sikerült létrehozni a mappát." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19003,12 +19092,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Jelzés" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19027,6 +19120,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19057,7 +19155,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19068,20 +19166,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Az alprocesszt nem lehetett elindÃtani!" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19093,7 +19190,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19109,7 +19206,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Az animáció nem található: '%s'" #: platform/android/export/export_plugin.cpp @@ -19118,15 +19215,13 @@ msgid "Creating APK..." msgstr "Kontúrok létrehozása…" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Az alprocesszt nem lehetett elindÃtani!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19138,7 +19233,7 @@ msgstr "%s Hozzáadása..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Az alprocesszt nem lehetett elindÃtani!" #: platform/android/export/export_plugin.cpp @@ -19380,6 +19475,17 @@ msgstr "Node-ok kivágása" msgid "Custom BG Color" msgstr "Node-ok kivágása" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Sablonok kezelése" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Az egyéni kiadási sablon nem található." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19401,23 +19507,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Nem sikerült létrehozni a mappát." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Érvénytelen kiterjesztés." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Nem sikerült létrehozni a mappát." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Margó BeállÃtása" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Nem sikerült létrehozni a mappát." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Felsorolások:" @@ -19493,17 +19611,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Nem sikerült létrehozni a mappát." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Nem sikerült létrehozni a mappát." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Hiba TileSet mentésekor!" #: platform/javascript/export/export.cpp @@ -19802,9 +19920,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalizáció" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19820,18 +19957,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Nincs Találat!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Hiba a fájl mentésekor: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Irányok" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Indexkép Létrehozása" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Az alprocesszt nem lehetett elindÃtani!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Érvénytelen Alapútvonal." #: platform/osx/export/export.cpp msgid "" @@ -19841,7 +20034,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19883,6 +20076,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Érvénytelen azonosÃtó:" @@ -20193,6 +20395,11 @@ msgid "Debug Algorithm" msgstr "HibakeresÅ‘" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Az ideiglenes fájl nem távolÃtható el:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20240,6 +20447,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Véletlenszerű Forgatás:" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Érvénytelen azonosÃtó:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Érvénytelen név." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Az ideiglenes fájl nem távolÃtható el:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20261,6 +20528,23 @@ msgid "Invalid product version:" msgstr "Érvénytelen termék GUID." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Érvénytelen kiterjesztés." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Új ablak" @@ -20277,6 +20561,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20400,7 +20688,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Példány" @@ -21230,15 +21519,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Középre lent" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Utazás" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22412,12 +22705,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25063,6 +25350,16 @@ msgid "3D Physics" msgstr "Fizika Keret %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigáció" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigáció" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26475,7 +26772,7 @@ msgstr "Ãtmenet: " msgid "Refraction" msgstr "Felsorolások:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26558,7 +26855,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skála:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "AlaptÃpus módosÃtása:" #: scene/resources/navigation_mesh.cpp @@ -26576,10 +26878,15 @@ msgid "Source Group Name" msgstr "Forrás" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "FÅ‘ Jelenet Argumentumok:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26588,11 +26895,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Régió" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26605,6 +26917,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Alapértelmezett Betöltése" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26621,7 +26938,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27030,6 +27347,11 @@ msgid "Scenario" msgstr "Jelenet" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigáció" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27047,6 +27369,26 @@ msgstr "Bal lineáris" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Alapértelmezett" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ElÅ‘nézet frissÃtése" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Tesztelés" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Kapcsolat szerkesztése:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/id.po b/editor/translations/id.po index c60a3ce184..4788d2a7c2 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -237,9 +237,10 @@ msgid "Data" msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Jaringan" @@ -389,6 +390,16 @@ msgstr "Antrian Pesan" msgid "Max Size (KB)" msgstr "Ukuran Maksimum (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mode Pindah" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Hapus Masukan" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -568,7 +579,8 @@ msgstr "Deskripsi" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Jalankan" @@ -654,6 +666,10 @@ msgid "Main Run Args" msgstr "Jalan Utama Argumen" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Penamaan Skena" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Cari dalam Ekstensi File" @@ -661,18 +677,15 @@ msgstr "Cari dalam Ekstensi File" msgid "Script Templates Search Path" msgstr "Jalur Pencarian Template Skrip" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Kontrol Versi" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Muat Otomatis Saat Memulai" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nama Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Kontrol Versi" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -781,7 +794,8 @@ msgid "Quality" msgstr "Kualitas" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filter" @@ -2210,8 +2224,8 @@ msgid "Open" msgstr "Buka" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Pemilik Dari:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2514,7 +2528,7 @@ msgid "Bus Options" msgstr "Pilihan Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Gandakan" @@ -2774,6 +2788,25 @@ msgid "Choose" msgstr "Pilih" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Salin Lokasi Node" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paket Sukses Terpasang!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Gagal:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Menyimpan File:" @@ -2786,6 +2819,31 @@ msgid "Packing" msgstr "Mengemas" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Simpan Sebagai" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Tidak dapat membuat folder." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Tidak dapat ekspor berkas proyek" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Tidak dapat membuka file untuk menulis:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Simpan Sebagai" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2905,11 +2963,33 @@ msgstr "Templat awakutu kustom tidak ditemukan." msgid "Custom release template not found." msgstr "Templat rilis kustom tidak ditemukan." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Kelola Templat" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Lokasi ekspor yang diberikan tidak ada:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Templat berkas tidak ditemukan:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Templat ekspor tidak valid:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Lapisan" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Pada ekspor 32-bit PCK yang ditanamkan tidak boleh lebih dari 4GiB." @@ -3084,9 +3164,9 @@ msgid "Import" msgstr "Impor" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Ekspor" @@ -4251,14 +4331,6 @@ msgstr "" "Tidak dapat menulis ke file '%s', file sedang digunakan, terkunci atau tidak " "memiliki izin." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scene" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Penamaan Skena" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4387,6 +4459,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kontrol Versi" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Ubah Nama" @@ -4415,6 +4491,10 @@ msgstr "Toggle mode tanpa gangguan." msgid "Add a new scene." msgstr "Tambah skena baru." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scene" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Pergi ke skena yang sebelumnya dibuka." @@ -5209,6 +5289,11 @@ msgstr "" "Tidak ada preset ekspor yang bisa digunakan untuk platform ini.\n" "Mohon tambahkan preset yang bisa digunakan di menu ekspor." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proyek" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Tulis logika di dalam fungsi _run()." @@ -5489,7 +5574,9 @@ msgid "Draw Spaces" msgstr "Gambarkan Spasi" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigasi" @@ -6961,7 +7048,7 @@ msgstr "Ulang" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filter:" @@ -7250,6 +7337,18 @@ msgid "Saving..." msgstr "Menyimpan..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp #, fuzzy msgid "2D, Detect 3D" msgstr "Deteksi 3D" @@ -10238,6 +10337,7 @@ msgid "Points" msgstr "Titik" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Poligon" @@ -11626,7 +11726,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Geometri tidak valid, tidak dapat diganti dengan mesh." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Konversikan menjadi Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12677,8 +12778,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Pilih bentuk sebelumnya, subtile, atau Tile." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Wilayah" @@ -14222,36 +14322,10 @@ msgid "Delete preset '%s'?" msgstr "Hapus preset '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Gagal mengekspor proyek untuk platform '%s'.\n" -"Templat Ekspor kelihatannya belum terpasang atau tidak valid." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Gagal mengekspor proyek untuk platform '%s'.\n" -"Ini mungkin disebabkan oleh masalah konfigurasi dalam preset ekspor atau " -"pengaturan ekspor Anda." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Mengekspor Semua" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Lokasi ekspor yang diberikan tidak ada:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Templat ekspor untuk platform ini tidak ada / rusak:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Lokasi Ekspor" @@ -14402,6 +14476,11 @@ msgid "Export templates for this platform are missing:" msgstr "Tidak ada templat ekspor untuk platform ini:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Penemu Proyek" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Mengatur Templat Ekspor" @@ -16826,7 +16905,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Poligon" @@ -17425,7 +17504,6 @@ msgid "Use In Baked Light" msgstr "Panggang Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "Sel" @@ -17452,6 +17530,19 @@ msgstr "Pusat Z" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigasi" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Mode Navigasi" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Dataran Selanjutnya" @@ -19001,10 +19092,6 @@ msgid "Could not execute on device." msgstr "Tidak dapat dijalankan di perangkat." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Tak dapat menemukan perkakas 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19125,12 +19212,16 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" "Versi \"Target SDK\" harus lebih tinggi atau sama dengan versi \"Min SDK\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinyal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19146,6 +19237,11 @@ msgid "Could not find keystore, unable to export." msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Tidak dapat memulai subproses!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19176,7 +19272,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nama berkas tidak valid! APK Android memerlukan ekstensi *.apk ." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Format ekspor tidak didukung!\n" #: platform/android/export/export_plugin.cpp @@ -19188,10 +19285,9 @@ msgstr "" "versinya. Silakan pasang ulang dari menu 'Proyek'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Versi build Android tidak cocok:\n" @@ -19201,11 +19297,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n" #: platform/android/export/export_plugin.cpp @@ -19217,8 +19314,9 @@ msgid "Building Android Project (gradle)" msgstr "Membangun Proyek Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Pembangunan proyek Android gagal, periksa output untuk galatnya.\n" @@ -19238,7 +19336,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animasi tidak ditemukan: '%s'" #: platform/android/export/export_plugin.cpp @@ -19247,17 +19345,15 @@ msgid "Creating APK..." msgstr "Membuat kontur..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Tidak dapat menemukan contoh APK untuk ekspor:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19268,7 +19364,8 @@ msgid "Adding files..." msgstr "Menambahkan %s..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Tidak dapat ekspor berkas proyek" #: platform/android/export/export_plugin.cpp @@ -19514,6 +19611,17 @@ msgstr "Potong Node" msgid "Custom BG Color" msgstr "Potong Node" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Kelola Templat" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Templat rilis kustom tidak ditemukan." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19536,22 +19644,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Jalankan HTML yang diekspor dalam peramban baku sistem." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Tidak dapat membuka templat untuk ekspor:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Templat ekspor tidak valid:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Tidak dapat menulis berkas:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Atur Batas" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Tidak dapat membaca berkas:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Variant" msgstr "Varian" @@ -19623,15 +19744,18 @@ msgid "Icon 512 X 512" msgstr "Ikon 512 X 512" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Tidak dapat membaca shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Tidak dapat menciptakan direktori server HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Kesalahan memulai server HTTP:" #: platform/javascript/export/export.cpp @@ -19929,9 +20053,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Tidak dapat ekspor berkas proyek" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Tidak dapat memulai subproses!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Notarisasi" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Catatan: Proses notaris umumnya memakan waktu kurang dari satu jam. Ketika " "proses selesai, Anda akan menerima email." @@ -19953,18 +20097,74 @@ msgstr "" "diekspor (opsional):" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Identitas tidak ditemukan." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Error menyimpan berkas: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Arah" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Tidak dapat memulai subproses!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Membuat bundel aplikasi" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Tidak dapat menemukan contoh APK untuk ekspor:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Templat ekspor tidak valid:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19972,7 +20172,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20015,6 +20215,16 @@ msgid "Sending archive for notarization" msgstr "Mengirim arsip untuk notaris" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proyeksi" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identifier bundel tidak valid:" @@ -20334,6 +20544,11 @@ msgid "Debug Algorithm" msgstr "Algoritma Awakutu" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Tidak dapat menghapus berkas sementara:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "Tipe Identitas" @@ -20376,6 +20591,70 @@ msgid "Trademarks" msgstr "Merek Dagang" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Perputaran Acak:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Tipe Identitas" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nama tidak sah." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Tidak dapat menghapus berkas sementara:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20394,6 +20673,23 @@ msgid "Invalid product version:" msgstr "Versi produk tidak valid:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Ekstensi tidak valid." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Jendela Baru" @@ -20410,6 +20706,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -20533,7 +20833,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "Jarak Maks" @@ -21376,17 +21677,19 @@ msgstr "" "ini bekerja. Silakan atur sebuah properti atau gambar sebuah polygon." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance harus menjadi sebuah child atau grandchild ke " -"sebuah node Navigation2D. Ini hanya menyediakan data navigasi." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Bawah Tengah" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Menjelajah" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22569,14 +22872,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent hanya dapat digunakan di bawah node spasial." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node " -"Navigation. Ini hanya menyediakan data navigasi." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25307,6 +25602,16 @@ msgid "3D Physics" msgstr "Fisika" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigasi" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigasi" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26736,7 +27041,7 @@ msgstr "Transisi: " msgid "Refraction" msgstr "Enumerasi:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26821,7 +27126,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Penskalaan: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Atur Jenis variabel" #: scene/resources/navigation_mesh.cpp @@ -26838,8 +27148,14 @@ msgid "Source Group Name" msgstr "Sumber" #: scene/resources/navigation_mesh.cpp -msgid "Agent" -msgstr "" +#, fuzzy +msgid "Cells" +msgstr "Sel" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumen Skena Utama:" #: scene/resources/navigation_mesh.cpp msgid "Max Climb" @@ -26851,11 +27167,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Wilayah" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Gabung dari Skena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26868,6 +27189,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Detail Bayangan" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "Jarak sampel" @@ -26885,7 +27211,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27292,6 +27618,11 @@ msgid "Scenario" msgstr "Skena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigasi" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27309,6 +27640,26 @@ msgstr "Linier ke Kiri" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Langkah Desimal Baku" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Perbarui Pratinjau" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Menguji" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Sunting Koneksi:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/is.po b/editor/translations/is.po index c9cdcef9bb..ea3301ce7f 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -209,9 +209,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -366,6 +367,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Breyta Viðbót" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -551,7 +561,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -636,24 +647,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -762,7 +772,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Verkefna Stjóri" @@ -2193,7 +2204,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2487,7 +2498,7 @@ msgid "Bus Options" msgstr "Val á kvarða" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2743,6 +2754,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2755,6 +2782,27 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Verkefna Stjóri" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2858,8 +2906,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3033,9 +3098,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4121,14 +4186,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4249,6 +4306,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Endurnefning Anim track" @@ -4277,6 +4338,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5012,6 +5077,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Verkefna Stjóri" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5270,7 +5340,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Breyta Viðbót" @@ -6679,7 +6751,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Verkefna Stjóri" @@ -6955,6 +7027,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9875,6 +9959,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Breyta Viðbót" @@ -11237,8 +11322,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Hreyfa Viðbótar Lykil" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12226,8 +12312,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13686,31 +13771,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13847,6 +13911,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Verkefna Stjóri" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16132,7 +16201,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Breyta Viðbót" @@ -16705,7 +16774,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16734,6 +16802,19 @@ msgstr "Anim DELETE-lyklar" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Breyta Viðbót" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Breyta Viðbót" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18204,10 +18285,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18311,12 +18388,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "TvÃteknir lyklar" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18332,6 +18413,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18360,7 +18445,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18371,19 +18456,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18396,7 +18479,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18411,7 +18494,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18419,15 +18502,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18437,7 +18517,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18670,6 +18750,15 @@ msgstr "TvÃteknir lyklar" msgid "Custom BG Color" msgstr "TvÃteknir lyklar" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18691,19 +18780,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Breyta Tengingu: " + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18780,15 +18878,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -19063,9 +19161,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Breyta Viðbót" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19081,18 +19196,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Allt úrvalið" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Breyta umbreytingu" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19100,7 +19268,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19141,6 +19309,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Verkefna Stjóri" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19439,6 +19616,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19482,6 +19663,62 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19500,6 +19737,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19515,6 +19768,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19628,7 +19885,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20410,13 +20668,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Anim DELETE-lyklar" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21515,12 +21776,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23959,6 +24214,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Breyta Viðbót" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Breyta Viðbót" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25292,7 +25557,7 @@ msgstr "Stillið breyting á:" msgid "Refraction" msgstr "Stillið breyting á:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25368,8 +25633,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Val á kvarða" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Stillið breyting á:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25384,7 +25655,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25396,11 +25671,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Afrita val" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25412,6 +25692,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25428,7 +25712,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25810,6 +26094,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Breyta Viðbót" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25825,6 +26114,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Afrita val" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Afrita val" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Afrita val" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Breyta Tengingu: " + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index e01ce11900..c529c06241 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -73,7 +73,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-08 06:48+0000\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" "Last-Translator: Mirko <miknsop@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" @@ -82,7 +82,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -266,9 +266,10 @@ msgid "Data" msgstr "Dati" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Reti" @@ -374,7 +375,7 @@ msgstr "Byte insufficienti per decodificarli o formato non valido." #: core/math/expression.cpp #, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "Input %i non valido (assente) nell'espressione" +msgstr "Input %d non valido (assente) nell'espressione" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -417,6 +418,16 @@ msgstr "Coda Messaggi" msgid "Max Size (KB)" msgstr "Dimensione Massima (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Modalità spostamento" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Elimina Input" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -596,7 +607,8 @@ msgstr "Descrizione" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Esegui" @@ -681,6 +693,10 @@ msgid "Main Run Args" msgstr "Parametri Principali Eseguiti" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Nome Scena" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Cerca nelle Estensioni dei File" @@ -688,18 +704,15 @@ msgstr "Cerca nelle Estensioni dei File" msgid "Script Templates Search Path" msgstr "Percorso di Ricerca dei Template di Script" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Controllo della versione" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Autocaricamento all'Avvio" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nome dell'estensione" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Controllo della versione" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -806,7 +819,8 @@ msgid "Quality" msgstr "Qualità " #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtri" @@ -1336,7 +1350,7 @@ msgstr "Rimuovi questa traccia." #: editor/animation_track_editor.cpp #, fuzzy msgid "Time (s):" -msgstr "Tempo (s): " +msgstr "Tempo (s):" #: editor/animation_track_editor.cpp #, fuzzy @@ -1620,7 +1634,7 @@ msgstr "Aggiungi una chiave a una traccia di chiamate metodi" #: editor/animation_track_editor.cpp #, fuzzy msgid "Method not found in object:" -msgstr "Metodo non trovato nell'oggetto: " +msgstr "Metodo non trovato nell'oggetto:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2231,8 +2245,8 @@ msgid "Open" msgstr "Apri" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Proprietari di:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2536,7 +2550,7 @@ msgid "Bus Options" msgstr "Opzioni Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplica" @@ -2795,6 +2809,26 @@ msgid "Choose" msgstr "Scegli" #: editor/editor_export.cpp +#, fuzzy +msgid "Project export for platform:" +msgstr "Esportazione del progetto per la piattaforma:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Completato con errori." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Completato con successo." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Fallito." + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Memorizzazione file:" @@ -2807,6 +2841,31 @@ msgid "Packing" msgstr "Impacchettando" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Salva PCK" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Impossibile creare la cartella." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Impossibile esportare i file del progetto" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Impossibile aprire il file in scrittura:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Salva ZIP" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2925,11 +2984,33 @@ msgstr "Modello di sviluppo personalizzato non trovato." msgid "Custom release template not found." msgstr "Modello di rilascio personalizzato non trovato." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Gestisci i modelli d'esportazione" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Il percorso di esportazione specificato non esiste:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "File del modello non trovato:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Template di esportazione non valido:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Padding" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Il PCK integrato non può essere più grande di 4 GiB nelle esportazioni a 32 " @@ -3107,9 +3188,9 @@ msgid "Import" msgstr "Importa" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Esporta" @@ -4266,14 +4347,6 @@ msgid "" msgstr "" "Impossibile scrivere sul file '%s', file in uso, bloccato o mancano permessi." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scena" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Nome Scena" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4388,6 +4461,10 @@ msgid "Default Color Picker Mode" msgstr "Modalità di Scelta Colore Predefinita" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controllo della versione" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nome Utente" @@ -4415,6 +4492,10 @@ msgstr "Commuta la modalità senza distrazioni." msgid "Add a new scene." msgstr "Aggiungi una nuova scena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Va alla scena precedentemente aperta." @@ -5110,7 +5191,7 @@ msgstr "Dimensione:" #: editor/editor_properties_array_dict.cpp #, fuzzy msgid "Page:" -msgstr "Pagina: " +msgstr "Pagina:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5207,6 +5288,11 @@ msgstr "" "Per favore, aggiungerne una nel menù di esportazione o impostarne una già " "esistente come eseguibile." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Progetto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Inserisci la logica dello script nel metodo _run()." @@ -5460,7 +5546,9 @@ msgid "Draw Spaces" msgstr "Disegna Spazi" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigazione" @@ -5717,8 +5805,9 @@ msgid "Grid Division Level Min" msgstr "Livello minimo di divisioni della griglia" #: editor/editor_settings.cpp +#, fuzzy msgid "Grid Division Level Bias" -msgstr "" +msgstr "Livello di Bias di divisioni della griglia" #: editor/editor_settings.cpp msgid "Grid XZ Plane" @@ -6019,8 +6108,9 @@ msgid "Keyword Color" msgstr "Colore Parola Chiave" #: editor/editor_settings.cpp +#, fuzzy msgid "Control Flow Keyword Color" -msgstr "" +msgstr "Colore Parola Chiave Controllo Flusso" #: editor/editor_settings.cpp msgid "Base Type Color" @@ -6886,7 +6976,7 @@ msgstr "Ripeti" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filtro" @@ -7122,7 +7212,7 @@ msgstr "Generando Lightmap" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Generating for Mesh:" -msgstr "Generazione della Mesh: " +msgstr "Generazione della Mesh:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7150,6 +7240,18 @@ msgid "Saving..." msgstr "Salvataggio..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "2D, Rileva 3D" @@ -8119,7 +8221,7 @@ msgstr "Assegna l'animazione finale. Utile per le sotto-transizioni." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Transition:" -msgstr "Transizione: " +msgstr "Transizione:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9894,7 +9996,7 @@ msgstr "Volume" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy msgid "Emission Source:" -msgstr "Sorgente Emissione: " +msgstr "Sorgente Emissione:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10127,6 +10229,7 @@ msgid "Points" msgstr "Punti" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Poligoni" @@ -10461,6 +10564,7 @@ msgstr "Script precedente" #: editor/plugins/script_editor_plugin.cpp #: scene/resources/default_theme/default_theme.cpp +#, fuzzy msgid "File" msgstr "File" @@ -10992,13 +11096,13 @@ msgstr "Trasla" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Scaling:" -msgstr "Scalatura: " +msgstr "Scalatura:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Translating:" -msgstr "Traslazione: " +msgstr "Traslazione:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11045,6 +11149,7 @@ msgid "Vertices:" msgstr "Vertici:" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "FPS: %d (%s ms)" msgstr "FPS: %d (%s ms)" @@ -11298,8 +11403,9 @@ msgid "Orbit View Up" msgstr "Orbita la visuale in sù" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Orbit View 180" -msgstr "" +msgstr "Orbita la visuale 180" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" @@ -11516,7 +11622,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Geometria non valida, impossibile sostituirla con una mesh." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Converti in Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11550,17 +11657,17 @@ msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy msgid "Simplification:" -msgstr "Semplificazione: " +msgstr "Semplificazione:" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy msgid "Shrink (Pixels):" -msgstr "Rimpicciolisci (Pixels): " +msgstr "Rimpicciolisci (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy msgid "Grow (Pixels):" -msgstr "Ingrandisci (Pixels): " +msgstr "Ingrandisci (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12501,8 +12608,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Seleziona la precedente forma, sottotile, o Tile." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Regione" @@ -12987,8 +13093,9 @@ msgid "Select SSH private key path" msgstr "Seleziona il percorso della chiave privata SSH" #: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "SSH Passphrase" -msgstr "" +msgstr "Frase di accesso SSH" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect new changes" @@ -13067,8 +13174,9 @@ msgid "Pull" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Push" -msgstr "" +msgstr "Push" #: editor/plugins/version_control_editor_plugin.cpp msgid "Force Push" @@ -13091,8 +13199,9 @@ msgid "Typechange" msgstr "Cambio di tipo" #: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Unmerged" -msgstr "" +msgstr "Non mescolato" #: editor/plugins/version_control_editor_plugin.cpp msgid "View:" @@ -14003,49 +14112,26 @@ msgid "Runnable" msgstr "Eseguibile" #: editor/project_export.cpp +#, fuzzy msgid "Export the project for all the presets defined." -msgstr "" +msgstr "Esporta il progetto per tutti i preset definiti." #: editor/project_export.cpp +#, fuzzy msgid "All presets must have an export path defined for Export All to work." msgstr "" +"Tutti i preset devono avere un percorso di esportazione definito affinché " +"\"Esporta tutto\" funzioni." #: editor/project_export.cpp msgid "Delete preset '%s'?" msgstr "Eliminare preset \"%s\"?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n" -"I template di esportazione sembrano essere mancanti o non validi." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n" -"Questo potrebbe essere dovuto a un problema di configurazione nel preset di " -"esportazione o nelle impostazioni di esportazione." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Esportando Tutto" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Il percorso di esportazione specificato non esiste:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"I template di esportazione per questa piattaforma sono mancanti/corrotti:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Percorso di Esportazione" @@ -14193,6 +14279,11 @@ msgid "Export templates for this platform are missing:" msgstr "Le export templates per questa piattaforma sono mancanti:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fondatori del progetto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gestisci template d'esportazione" @@ -15743,7 +15834,7 @@ msgstr "Allega Script Nodo" #: editor/script_editor_debugger.cpp #, fuzzy msgid "Remote %s:" -msgstr "Remoto " +msgstr "Remoto %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16270,7 +16361,6 @@ msgid "Drop Mouse On GUI Input Disabled" msgstr "" #: main/main.cpp -#, fuzzy msgid "stdout" msgstr "stdout" @@ -16317,14 +16407,13 @@ msgstr "Dispositivi Input" #: main/main.cpp #, fuzzy msgid "Pointing" -msgstr "Punto" +msgstr "Puntamento" #: main/main.cpp msgid "Touch Delay" msgstr "Delay Tocco" #: main/main.cpp servers/visual_server.cpp -#, fuzzy msgid "GLES3" msgstr "GLES3" @@ -16474,7 +16563,6 @@ msgid "Active Soft World" msgstr "" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "CSG" msgstr "CSG" @@ -16565,7 +16653,7 @@ msgstr "Lati Anello" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "Poligono" @@ -16731,7 +16819,7 @@ msgstr "Singleton GDNative disabilitato" #: modules/gdnative/gdnative_library_singleton_editor.cpp #, fuzzy msgid "Libraries:" -msgstr "Librerie: " +msgstr "Librerie:" #: modules/gdnative/nativescript/nativescript.cpp msgid "Class Name" @@ -17130,7 +17218,6 @@ msgid "Use In Baked Light" msgstr "Utilizza in Luce Preprocessata" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "Cella" @@ -17156,6 +17243,19 @@ msgstr "Centra Z" msgid "Mask" msgstr "Maschera" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigazione" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Sensazione Navigazione" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Piano Successivo" @@ -17365,12 +17465,14 @@ msgid "Oversample" msgstr "" #: modules/mobile_vr/mobile_vr_interface.cpp +#, fuzzy msgid "K1" -msgstr "" +msgstr "K1" #: modules/mobile_vr/mobile_vr_interface.cpp +#, fuzzy msgid "K2" -msgstr "" +msgstr "K2" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -17569,7 +17671,7 @@ msgstr "" #: modules/visual_script/visual_script.cpp #, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "Il nodo ha ritornato una sequenza di output invalida: " +msgstr "Il nodo ha ritornato una sequenza di output invalida:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -17578,7 +17680,7 @@ msgstr "Trovato bit di sequenza ma non il nodo nello stack, segnalare il bug!" #: modules/visual_script/visual_script.cpp #, fuzzy msgid "Stack overflow with stack depth:" -msgstr "Overflow dello stack con profondità dello stack: " +msgstr "Overflow dello stack con profondità dello stack:" #: modules/visual_script/visual_script.cpp #, fuzzy @@ -17906,11 +18008,12 @@ msgstr "Modifica membro" #: scene/resources/visual_shader.cpp #, fuzzy msgid "Expression" -msgstr "Cambia espressione" +msgstr "Espressione" #: modules/visual_script/visual_script_flow_control.cpp +#, fuzzy msgid "Return" -msgstr "" +msgstr "Ritorno" #: modules/visual_script/visual_script_flow_control.cpp #, fuzzy @@ -17931,8 +18034,9 @@ msgid "if (cond) is:" msgstr "if (cond) is:" #: modules/visual_script/visual_script_flow_control.cpp +#, fuzzy msgid "While" -msgstr "" +msgstr "While" #: modules/visual_script/visual_script_flow_control.cpp msgid "while (cond):" @@ -17949,7 +18053,7 @@ msgstr "" #: modules/visual_script/visual_script_flow_control.cpp #, fuzzy msgid "Input type not iterable:" -msgstr "Il tipo di input non è iterabile: " +msgstr "Il tipo di input non è iterabile:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" @@ -17958,7 +18062,7 @@ msgstr "L'iteratore è diventato invalido" #: modules/visual_script/visual_script_flow_control.cpp #, fuzzy msgid "Iterator became invalid:" -msgstr "L'iteratore è diventato invalido: " +msgstr "L'iteratore è diventato invalido:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -18119,12 +18223,12 @@ msgstr "Operatore" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy msgid "Invalid argument of type:" -msgstr ": Argomento invalido di tipo: " +msgstr "Argomento invalido di tipo:" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy msgid "Invalid arguments:" -msgstr ": Argomenti invalidi: " +msgstr "Argomenti invalidi:" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -18137,12 +18241,12 @@ msgstr "Var Nome" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy msgid "VariableGet not found in script:" -msgstr "VariableGet non trovato nello script: " +msgstr "VariableGet non trovato nello script:" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy msgid "VariableSet not found in script:" -msgstr "VariableSet non trovato nello script: " +msgstr "VariableSet non trovato nello script:" #: modules/visual_script/visual_script_nodes.cpp msgid "Preload" @@ -18244,8 +18348,9 @@ msgid "Search VisualScript" msgstr "Ricerca VisualScript" #: modules/visual_script/visual_script_yield_nodes.cpp +#, fuzzy msgid "Yield" -msgstr "" +msgstr "Yield" #: modules/visual_script/visual_script_yield_nodes.cpp msgid "Wait" @@ -18270,17 +18375,17 @@ msgstr "Tempo Di Attesa" #: modules/visual_script/visual_script_yield_nodes.cpp #, fuzzy msgid "WaitSignal" -msgstr "Segnale" +msgstr "WaitSignal" #: modules/visual_script/visual_script_yield_nodes.cpp #, fuzzy msgid "WaitNodeSignal" -msgstr "Segnale" +msgstr "WaitNodeSignal" #: modules/visual_script/visual_script_yield_nodes.cpp #, fuzzy msgid "WaitInstanceSignal" -msgstr "Istanza" +msgstr "WaitInstanceSignal" #: modules/webrtc/webrtc_data_channel.cpp #, fuzzy @@ -18659,10 +18764,6 @@ msgid "Could not execute on device." msgstr "Impossibile eseguire sul dispositivo." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Impossibile trovare lo strumento \"apksigner\"." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18792,12 +18893,17 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Segnale" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "Non è stato possibile trovare \"apksigner\".\n" "Verificare che il comando sia disponibile nella directory degli strumenti di " @@ -18817,6 +18923,11 @@ msgid "Could not find keystore, unable to export." msgstr "Non è stato possibile trovare keystore, impossible esportare." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Non è stato possibile avviare l'eseguibile apksigner." + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' ha restituito con errore #%d" @@ -18847,8 +18958,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome file non valido! L'APK Android richiede l'estensione *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" -msgstr "Formato d'esportazione non supportato!\n" +msgid "Unsupported export format!" +msgstr "Formato d'esportazione non supportato!" #: platform/android/export/export_plugin.cpp msgid "" @@ -18860,27 +18971,27 @@ msgstr "" "\"Progetto\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" -"Versione build di Android non coerente:\n" -" Template installato: %s\n" -" Versione Godot: %s\n" -"Per favore, reinstalla il build template di Android dal menu \"Progetto\"." +"Versione build di Android non coerente: Template installato: %s, Versione " +"Godot: %s. Per favore, reinstalla il build template di Android dal menu " +"\"Progetto\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Impossibile sovrascrivere i file res://android/build/res/*.xml con il nome " "del progetto" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "Impossibile esportare i file del progetto in un progetto gradle\n" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Impossibile esportare i file del progetto in un progetto gradle." #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18891,8 +19002,9 @@ msgid "Building Android Project (gradle)" msgstr "Compilazione di un progetto Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Compilazione del progetto Android fallita, controlla l'output per vedere gli " @@ -18913,7 +19025,8 @@ msgstr "" "directory del progetto gradle per gli output." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pacchetto non trovato: \"%s\"" #: platform/android/export/export_plugin.cpp @@ -18921,17 +19034,14 @@ msgid "Creating APK..." msgstr "Creazione APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" -"Impossibile trovare il template APK per l'esportazione:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Impossibile trovare il template APK per l'esportazione: \"%s\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18945,7 +19055,8 @@ msgid "Adding files..." msgstr "Aggiungendo file..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Impossibile esportare i file del progetto" #: platform/android/export/export_plugin.cpp @@ -19188,6 +19299,17 @@ msgstr "Taglia nodi" msgid "Custom BG Color" msgstr "Taglia nodi" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Gestisci i modelli d'esportazione" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Modello di rilascio personalizzato non trovato." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19210,22 +19332,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Esegui il codice HTML esportato nel browser di sistema predefinito." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Impossibile aprire il template per l'esportazione:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Template di esportazione non valido:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Impossibile scrivere il file:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Imposta Margine" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Impossibile leggere il file:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Separazione:" @@ -19300,15 +19435,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Impossibile leggere la shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Impossibile creare la directory per il server HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Errore all'avvio del server HTTP:" #: platform/javascript/export/export.cpp @@ -19609,9 +19747,28 @@ msgid "Apple Team ID" msgstr "ID Apple Team" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Impossibile esportare i file del progetto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Impossibile avviare l'eseguibile xcrun." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localizzazione" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19627,20 +19784,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Nessuna icona trovata." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Errore nel salvataggio del file: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direzione" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Impossibile avviare l'eseguibile hdiutil." + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Creando la miniatura" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Impossibile trovare il template dell'app per l'esportazione:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Template di esportazione non valido:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19648,7 +19861,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19689,6 +19902,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proiezione" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Impossibile aprire il file da leggere dal percorso \"%s\"." + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificatore del bundle non valido:" @@ -19997,14 +20220,13 @@ msgstr "" "620x300)." #: platform/uwp/export/export.cpp -#, fuzzy msgid "UWP" msgstr "UWP" #: platform/uwp/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "Signtool" -msgstr "Segnale" +msgstr "Signtool" #: platform/uwp/export/export.cpp msgid "Debug Certificate" @@ -20016,6 +20238,11 @@ msgid "Debug Algorithm" msgstr "Debugger" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Impossibile rimuovere il file temporaneo:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20063,6 +20290,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rotazione Casuale:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Non è stato possibile trovare keystore, impossible esportare." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Non è stato possibile trovare keystore, impossible esportare." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Non è stato possibile trovare keystore, impossible esportare." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Non è stato possibile trovare keystore, impossible esportare." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identificatore non valido:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nome non valido." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Impossibile rimuovere il file temporaneo:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20081,29 +20372,47 @@ msgid "Invalid product version:" msgstr "Versione prodotto non valida:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Estensione non valida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Windows" #: platform/windows/export/export.cpp -#, fuzzy msgid "Rcedit" msgstr "Rcedit" #: platform/windows/export/export.cpp -#, fuzzy msgid "Osslsigncode" msgstr "Osslsigncode" #: platform/windows/export/export.cpp -#, fuzzy msgid "Wine" msgstr "Wine" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy msgid "Frames" -msgstr "Fotogramma %" +msgstr "Fotogrammi" #: scene/2d/animated_sprite.cpp msgid "" @@ -20178,8 +20487,9 @@ msgstr "Aggiorna Anteprima" #: scene/2d/area_2d.cpp scene/2d/cpu_particles_2d.cpp scene/3d/area.cpp #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp +#, fuzzy msgid "Gravity" -msgstr "" +msgstr "Gravità " #: scene/2d/area_2d.cpp scene/3d/area.cpp #, fuzzy @@ -20226,7 +20536,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Scegli la Distanza:" @@ -20234,7 +20545,7 @@ msgstr "Scegli la Distanza:" #: scene/2d/audio_stream_player_2d.cpp scene/3d/light.cpp #, fuzzy msgid "Attenuation" -msgstr "Animazione" +msgstr "Attenuazione" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp @@ -20638,13 +20949,14 @@ msgstr "Assegna" #: scene/resources/particles_material.cpp #, fuzzy msgid "Direction" -msgstr "Direzioni" +msgstr "Direzione" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp #: servers/audio/effects/audio_effect_reverb.cpp +#, fuzzy msgid "Spread" -msgstr "" +msgstr "Propagazione" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -20714,8 +21026,9 @@ msgstr "" #: scene/3d/physics_joint.cpp scene/3d/vehicle_body.cpp #: scene/resources/particles_material.cpp #: servers/audio/effects/audio_effect_reverb.cpp +#, fuzzy msgid "Damping" -msgstr "" +msgstr "Smorzamento" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -20730,8 +21043,9 @@ msgstr "Dividi Curva" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp scene/3d/light.cpp #: scene/resources/particles_material.cpp +#, fuzzy msgid "Angle" -msgstr "" +msgstr "Angolo" #: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp #: scene/resources/particles_material.cpp @@ -20864,8 +21178,9 @@ msgstr "" #: scene/2d/joints_2d.cpp scene/resources/animation.cpp #: scene/resources/ray_shape.cpp scene/resources/segment_shape_2d.cpp +#, fuzzy msgid "Length" -msgstr "" +msgstr "Lunghezza" #: scene/2d/joints_2d.cpp #, fuzzy @@ -20901,8 +21216,9 @@ msgstr "TextureRegion" #: scene/2d/light_2d.cpp scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp #: scene/3d/light.cpp scene/resources/environment.cpp #: scene/resources/material.cpp scene/resources/sky.cpp +#, fuzzy msgid "Energy" -msgstr "" +msgstr "Energia" #: scene/2d/light_2d.cpp msgid "Z Min" @@ -20929,7 +21245,7 @@ msgstr "" #: scene/2d/light_2d.cpp scene/3d/light.cpp scene/resources/style_box.cpp #, fuzzy msgid "Shadow" -msgstr "Shader" +msgstr "Ombra" #: scene/2d/light_2d.cpp #, fuzzy @@ -20979,13 +21295,14 @@ msgid "Default Color" msgstr "Predefinito" #: scene/2d/line_2d.cpp scene/resources/texture.cpp +#, fuzzy msgid "Fill" -msgstr "" +msgstr "Riempimento" #: scene/2d/line_2d.cpp scene/resources/texture.cpp #, fuzzy msgid "Gradient" -msgstr "Gradiente Modificato" +msgstr "Gradiente" #: scene/2d/line_2d.cpp #, fuzzy @@ -21031,8 +21348,9 @@ msgid "Antialiased" msgstr "Inizializza" #: scene/2d/multimesh_instance_2d.cpp scene/3d/multimesh_instance.cpp +#, fuzzy msgid "Multimesh" -msgstr "" +msgstr "Multimesh" #: scene/2d/navigation_2d.cpp scene/3d/baked_lightmap.cpp #: scene/3d/navigation.cpp scene/animation/root_motion_view.cpp @@ -21103,16 +21421,19 @@ msgstr "" "poligono." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance deve essere figlio o nipote di un nodo " -"Navigation2D. Esso fornisce solamente dati di navigazione." - -#: scene/2d/navigation_polygon.cpp +#, fuzzy msgid "Navpoly" -msgstr "" +msgstr "Navpoly" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "In Centro In Basso" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Spostamento" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp @@ -21288,7 +21609,7 @@ msgstr "Inizializza" #: scene/resources/physics_material.cpp #, fuzzy msgid "Friction" -msgstr "Funzioni" +msgstr "Frizione" #: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp #: scene/resources/physics_material.cpp @@ -21316,18 +21637,19 @@ msgstr "" "Modifica invece la dimensione nelle forme di collisione figlie." #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp +#, fuzzy msgid "Mass" -msgstr "" +msgstr "Massa" #: scene/2d/physics_body_2d.cpp #, fuzzy msgid "Inertia" -msgstr "Verticale:" +msgstr "Inerzia" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy msgid "Weight" -msgstr "Luce" +msgstr "Peso" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp msgid "Gravity Scale" @@ -21368,8 +21690,9 @@ msgid "Damp" msgstr "" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp +#, fuzzy msgid "Angular" -msgstr "" +msgstr "Angolare" #: scene/2d/physics_body_2d.cpp msgid "Applied Forces" @@ -21403,7 +21726,7 @@ msgstr "" #: scene/resources/line_shape_2d.cpp scene/resources/material.cpp #, fuzzy msgid "Normal" -msgstr "Formato" +msgstr "Normale" #: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp #, fuzzy @@ -21784,7 +22107,7 @@ msgstr "" #: servers/audio/effects/audio_effect_filter.cpp #, fuzzy msgid "dB" -msgstr "B" +msgstr "dB" #: scene/3d/audio_stream_player_3d.cpp #, fuzzy @@ -21904,7 +22227,7 @@ msgstr "Indenta a destra" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp #, fuzzy msgid "Propagation" -msgstr "Navigazione" +msgstr "Propagazione" #: scene/3d/baked_lightmap.cpp msgid "Image Path" @@ -21936,7 +22259,7 @@ msgstr "Traccia di proprietà " #: scene/3d/camera.cpp #, fuzzy msgid "Projection" -msgstr "Progetto" +msgstr "Proiezione" #: scene/3d/camera.cpp msgid "FOV" @@ -21950,7 +22273,7 @@ msgstr "Scostamento della griglia:" #: scene/3d/camera.cpp #, fuzzy msgid "Near" -msgstr "Più vicino" +msgstr "Vicino" #: scene/3d/camera.cpp msgid "Far" @@ -21963,7 +22286,7 @@ msgstr "" #: servers/physics_server.cpp #, fuzzy msgid "Margin" -msgstr "Imposta Margine" +msgstr "Margine" #: scene/3d/camera.cpp #, fuzzy @@ -22092,7 +22415,7 @@ msgstr "" #: scene/3d/cull_instance.cpp servers/visual_server.cpp #, fuzzy msgid "Portals" -msgstr "Ribalta orizzontalmente" +msgstr "Portali" #: scene/3d/cull_instance.cpp #, fuzzy @@ -22350,14 +22673,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. " -"Fornisce solamente dati per la navigazione." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -22711,12 +23026,12 @@ msgstr "" #: scene/3d/physics_joint.cpp #, fuzzy msgid "Upper" -msgstr "Maiuscolo" +msgstr "Superiore" #: scene/3d/physics_joint.cpp #, fuzzy msgid "Lower" -msgstr "Minuscolo" +msgstr "Minore" #: scene/3d/physics_joint.cpp msgid "Motor" @@ -23049,9 +23364,8 @@ msgid "Roomlist" msgstr "" #: scene/3d/room_manager.cpp servers/visual_server.cpp -#, fuzzy msgid "PVS" -msgstr "FPS" +msgstr "PVS" #: scene/3d/room_manager.cpp #, fuzzy @@ -23349,7 +23663,7 @@ msgstr "Funzioni" #: scene/3d/vehicle_body.cpp #, fuzzy msgid "Suspension" -msgstr "Cambia espressione" +msgstr "Sospensione" #: scene/3d/vehicle_body.cpp #, fuzzy @@ -23363,7 +23677,7 @@ msgstr "" #: scene/3d/visual_instance.cpp scene/resources/navigation_mesh.cpp #, fuzzy msgid "Geometry" -msgstr "Riprova" +msgstr "Geometria" #: scene/3d/visual_instance.cpp #, fuzzy @@ -23736,7 +24050,7 @@ msgstr "" #: scene/gui/base_button.cpp scene/gui/shortcut.cpp #, fuzzy msgid "Shortcut" -msgstr "Scorciatoie" +msgstr "Scorciatoia" #: scene/gui/base_button.cpp #, fuzzy @@ -24576,11 +24890,12 @@ msgstr "" #: scene/gui/texture_progress.cpp #, fuzzy msgid "Fill Mode" -msgstr "Modalità Riproduzione:" +msgstr "Modalità di riempimento" #: scene/gui/texture_progress.cpp scene/resources/material.cpp +#, fuzzy msgid "Tint" -msgstr "" +msgstr "Tinta" #: scene/gui/texture_progress.cpp msgid "Radial Fill" @@ -24594,7 +24909,7 @@ msgstr "Inizializza" #: scene/gui/texture_progress.cpp #, fuzzy msgid "Fill Degrees" -msgstr "Ruotando di %s gradi." +msgstr "Gradi di Riempimento" #: scene/gui/texture_progress.cpp scene/resources/primitive_meshes.cpp #, fuzzy @@ -25082,6 +25397,16 @@ msgid "3D Physics" msgstr "Fisica" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigazione" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigazione" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26006,8 +26331,9 @@ msgid "Sky Contribution" msgstr "Condizione" #: scene/resources/environment.cpp +#, fuzzy msgid "Fog" -msgstr "" +msgstr "Nebbia" #: scene/resources/environment.cpp #, fuzzy @@ -26510,7 +26836,7 @@ msgstr "Trasmissione" msgid "Refraction" msgstr "Separazione:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26593,7 +26919,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Scalatura:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Imposta Tipo di Variabile" #: scene/resources/navigation_mesh.cpp @@ -26610,8 +26941,14 @@ msgid "Source Group Name" msgstr "Sorgente" #: scene/resources/navigation_mesh.cpp -msgid "Agent" -msgstr "" +#, fuzzy +msgid "Cells" +msgstr "Cella" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argomenti Scena Principale:" #: scene/resources/navigation_mesh.cpp msgid "Max Climb" @@ -26623,11 +26960,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Regione" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Unisci da Scena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26641,6 +26983,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Carica i predefiniti" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Scegli la Distanza:" @@ -26658,7 +27005,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27074,6 +27421,11 @@ msgid "Scenario" msgstr "Scena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigazione" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27091,6 +27443,26 @@ msgstr "Lineare sinistra" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Passo Predefinito dei Float" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Anteprima Predefinita" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testing" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Modifica una connessione:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" @@ -27305,7 +27677,7 @@ msgstr "" #: servers/audio/effects/audio_effect_stereo_enhance.cpp #, fuzzy msgid "Time Pullout (ms)" -msgstr "Timeout." +msgstr "Estrazione Temporale (ms)" #: servers/audio/effects/audio_effect_stereo_enhance.cpp msgid "Surround" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index e3f760a17d..1ae3c9cf8c 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -242,9 +242,10 @@ msgid "Data" msgstr "データ" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" @@ -394,6 +395,16 @@ msgstr "メッセージã‚ュー" msgid "Max Size (KB)" msgstr "最大サイズ (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "移動モード" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "入力を削除" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -575,7 +586,8 @@ msgstr "説明" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "実行" @@ -663,6 +675,10 @@ msgid "Main Run Args" msgstr "メインシーンã®å¼•æ•°:" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "シーンã®å‘½åè¦å‰‡" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "ファイル拡張åã§æ¤œç´¢" @@ -670,18 +686,15 @@ msgstr "ファイル拡張åã§æ¤œç´¢" msgid "Script Templates Search Path" msgstr "ã‚¹ã‚¯ãƒªãƒ—ãƒˆãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ¤œç´¢ãƒ‘ス" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "起動時ã®è‡ªå‹•èªã¿è¾¼ã¿" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "プラグインå" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -801,7 +814,8 @@ msgid "Quality" msgstr "å“質" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "フィルター:" @@ -2232,8 +2246,8 @@ msgid "Open" msgstr "é–‹ã" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "次ã®ã‚ªãƒ¼ãƒŠãƒ¼:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2535,7 +2549,7 @@ msgid "Bus Options" msgstr "ãƒã‚¹ オプション" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "複製" @@ -2792,6 +2806,25 @@ msgid "Choose" msgstr "é¸ã¶" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "ノードã®ãƒ‘スをコピー" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æˆåŠŸã—ã¾ã—ãŸï¼" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "失敗:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "ファイルã®ä¿å˜:" @@ -2804,6 +2837,31 @@ msgid "Packing" msgstr "パックä¸" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "フォルダーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ァイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "書ã込むファイルを開ã‘ã¾ã›ã‚“:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2924,11 +2982,33 @@ msgstr "カスタムデãƒãƒƒã‚°ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" msgid "Custom release template not found." msgstr "カスタムリリーステンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "テンプレートã®ç®¡ç†" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "指定ã•れãŸã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ‘スãŒå˜åœ¨ã—ã¾ã›ã‚“:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "テンプレートファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "パディング" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "32ビットã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ã¯ã€çµ„ã¿è¾¼ã¿PCKã¯4GiBã‚’è¶…ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" @@ -3102,9 +3182,9 @@ msgid "Import" msgstr "インãƒãƒ¼ãƒˆ" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "エクスãƒãƒ¼ãƒˆ" @@ -4250,14 +4330,6 @@ msgstr "" "ファイル '%s'ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“。ファイルãŒä½¿ç”¨ä¸ã‹ã€ãƒãƒƒã‚¯ã•れã¦ã„ã‚‹ã‹ã€æ¨©é™ãŒ" "ã‚りã¾ã›ã‚“。" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "シーン" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "シーンã®å‘½åè¦å‰‡" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4377,6 +4449,10 @@ msgid "Default Color Picker Mode" msgstr "デフォルトã®ã‚«ãƒ©ãƒ¼ãƒ”ッカーモード" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "ユーザーå" @@ -4404,6 +4480,10 @@ msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰ã‚’切り替ãˆã‚‹ã€‚" msgid "Add a new scene." msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã‚’è¿½åŠ ã™ã‚‹ã€‚" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "シーン" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "以å‰ã«é–‹ã„ãŸã‚·ãƒ¼ãƒ³ã«ç§»å‹•ã™ã‚‹ã€‚" @@ -5196,6 +5276,11 @@ msgstr "" "エクスãƒãƒ¼ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«å®Ÿè¡Œå¯èƒ½ãªãƒ—ãƒªã‚»ãƒƒãƒˆã‚’è¿½åŠ ã™ã‚‹ã‹ã€æ—¢å˜ã®ãƒ—リセットを実" "行å¯èƒ½ã«ã—ã¦ãã ã•ã„。" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆ" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "ãƒã‚¸ãƒƒã‚¯ã‚’ _run() メソッドã«è¨˜è¿°ã™ã‚‹ã€‚" @@ -5455,7 +5540,9 @@ msgid "Draw Spaces" msgstr "スペースをæç”»" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "ナビゲーション" @@ -6902,7 +6989,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "フィルター:" @@ -7199,6 +7286,18 @@ msgid "Saving..." msgstr "ä¿å˜ä¸..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10175,6 +10274,7 @@ msgid "Points" msgstr "点" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "ãƒãƒªã‚´ãƒ³" @@ -11554,7 +11654,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "ジオメトリãŒç„¡åйã§ã™ã€‚メッシュã«ç½®ãæ›ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Mesh2Dã«å¤‰æ›ã™ã‚‹" #: editor/plugins/sprite_editor_plugin.cpp @@ -12544,8 +12645,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "å‰ã®ã‚·ã‚§ã‚¤ãƒ—ã€ã‚µãƒ–タイルã€ã¾ãŸã¯ã‚¿ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "é ˜åŸŸ" @@ -14055,38 +14155,10 @@ msgid "Delete preset '%s'?" msgstr "プリセット '%s' を削除ã—ã¾ã™ã‹ï¼Ÿ" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"プラットフォーム'%s' ã¸ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" -"エクスãƒãƒ¼ãƒˆç”¨ãƒ†ãƒ³ãƒ—レートãŒå˜åœ¨ã—ãªã„ã‹ã€ã‚ã‚‹ã„ã¯ç•°å¸¸ã§ã‚るよã†ã§ã™ã€‚" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"プラットフォーム'%s' ã¸ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n" -"エクスãƒãƒ¼ãƒˆç”¨ãƒ—リセットã‚ã‚‹ã„ã¯ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆè¨å®šã«å•題ãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾" -"ã™ã€‚" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ã™ã¹ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "指定ã•れãŸã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ‘スãŒå˜åœ¨ã—ã¾ã›ã‚“:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"ã“ã®ãƒ—ラットフォームã«å¯¾ã™ã‚‹ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレートãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹ã€ç ´æã—" -"ã¦ã„ã¾ã™:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "エクスãƒãƒ¼ãƒˆå…ˆã®ãƒ‘ス" @@ -14233,6 +14305,11 @@ msgid "Export templates for this platform are missing:" msgstr "ã“ã®ãƒ—ラットフォームã«å¯¾ã™ã‚‹ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆå‰µå§‹è€…" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "エクスãƒãƒ¼ãƒˆãƒ†ãƒ³ãƒ—レートã®ç®¡ç†" @@ -16619,7 +16696,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "ãƒãƒªã‚´ãƒ³" @@ -17224,7 +17301,6 @@ msgid "Use In Baked Light" msgstr "ライトマップを焼ã込む" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17254,6 +17330,19 @@ msgstr "ä¸å¤®" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "ナビゲーション" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ナビゲーションモード" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "次ã®å¹³é¢" @@ -18795,10 +18884,6 @@ msgid "Could not execute on device." msgstr "デãƒã‚¤ã‚¹ã§å®Ÿè¡Œã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "'apksigner' ツールãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18917,12 +19002,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" "\"Target Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ \"Min Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸Šã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "DMGをコード署åä¸" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "'apksigner' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚\n" "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ãŒ Android SDK build-tools ディレクトリã«ã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•" @@ -18942,6 +19032,11 @@ msgid "Could not find keystore, unable to export." msgstr "ã‚ーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "サブプãƒã‚»ã‚¹ã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' ãŒã‚¨ãƒ©ãƒ¼ #%d ã§çµ‚了ã—ã¾ã—ãŸ" @@ -18970,7 +19065,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "無効ãªãƒ•ァイルåã§ã™ï¼ Android APKã«ã¯æ‹¡å¼µå *.apk ãŒå¿…è¦ã§ã™ã€‚" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„エクスãƒãƒ¼ãƒˆãƒ•ォーマットã§ã™ï¼\n" #: platform/android/export/export_plugin.cpp @@ -18982,10 +19078,9 @@ msgstr "" "æƒ…å ±ãŒå˜åœ¨ã—ã¾ã›ã‚“。 「プãƒã‚¸ã‚§ã‚¯ãƒˆã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Androidビルド ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸ä¸€è‡´:\n" @@ -18995,13 +19090,15 @@ msgstr "" "ã ã•ã„。" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "res://android/build/res/*.xml ファイルをプãƒã‚¸ã‚§ã‚¯ãƒˆåã§ä¸Šæ›¸ãã§ãã¾ã›ã‚“" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "" "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ァイルをgladleプãƒã‚¸ã‚§ã‚¯ãƒˆã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ\n" @@ -19014,8 +19111,9 @@ msgid "Building Android Project (gradle)" msgstr "Androidプãƒã‚¸ã‚§ã‚¯ãƒˆã®æ§‹ç¯‰(gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Androidプãƒã‚¸ã‚§ã‚¯ãƒˆã®ãƒ“ルドã«å¤±æ•—ã—ã¾ã—ãŸã€‚エラーã®å‡ºåŠ›ã‚’ç¢ºèªã—ã¦ãã ã•ã„。\n" @@ -19035,7 +19133,8 @@ msgstr "" "gradleã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’確èªã—ã¦ãã ã•ã„。" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "見ã¤ã‹ã‚‰ãªã„パッケージ: %s" #: platform/android/export/export_plugin.cpp @@ -19043,17 +19142,16 @@ msgid "Creating APK..." msgstr "APK を作æˆã—ã¦ã„ã¾ã™..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートAPKãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19067,7 +19165,8 @@ msgid "Adding files..." msgstr "ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¿½åŠ ä¸..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ァイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" #: platform/android/export/export_plugin.cpp @@ -19309,6 +19408,17 @@ msgstr "ノードを切りå–ã‚‹" msgid "Custom BG Color" msgstr "ノードを切りå–ã‚‹" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "テンプレートã®ç®¡ç†" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "カスタムリリーステンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store ãƒãƒ¼ãƒ ID ãŒæœªæŒ‡å®š - プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’æ§‹æˆã§ãã¾ã›ã‚“。" @@ -19330,22 +19440,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "エクスãƒãƒ¼ãƒˆã—ãŸHTMLをシステム既定ã®ãƒ–ラウザã§å®Ÿè¡Œã™ã‚‹ã€‚" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "エクスãƒãƒ¼ãƒˆç”¨ã®ãƒ†ãƒ³ãƒ—レートを開ã‘ã¾ã›ã‚“ã§ã—ãŸ:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "ファイルを書ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "マージンをè¨å®šã™ã‚‹" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "ファイルをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "分離:" @@ -19420,15 +19543,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "HTMLシェルをèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "HTTPサーãƒãƒ¼ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæˆã«å¤±æ•—:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "HTTPサーãƒãƒ¼ã®é–‹å§‹ã«å¤±æ•—:" #: platform/javascript/export/export.cpp @@ -19725,9 +19851,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ァイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "サブプãƒã‚»ã‚¹ã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ãƒãƒ¼ã‚«ãƒ©ã‚¤ã‚º" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19743,21 +19888,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "アイコンãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "ファイルã®ä¿å˜ã‚¨ãƒ©ãƒ¼: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "æ–¹å‘" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "サブプãƒã‚»ã‚¹ã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸï¼" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "サムãƒã‚¤ãƒ«ã‚’作æˆä¸" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートAPKãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19765,7 +19965,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19806,6 +20006,17 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆ" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "" +"プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ァイルをgladleプãƒã‚¸ã‚§ã‚¯ãƒˆã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "無効ãªãƒãƒ³ãƒ‰ãƒ«ID:" @@ -20128,6 +20339,11 @@ msgid "Debug Algorithm" msgstr "デãƒãƒƒã‚¬ãƒ¼" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "一時ファイルを削除ã§ãã¾ã›ã‚“:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20175,6 +20391,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "ランダムãªå›žè»¢:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "ã‚ーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "ã‚ーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "ã‚ーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "ã‚ーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "無効ãªè˜åˆ¥å:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "無効ãªåå‰ã§ã™ã€‚" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "一時ファイルを削除ã§ãã¾ã›ã‚“:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20193,6 +20473,23 @@ msgid "Invalid product version:" msgstr "無効ãªè£½å“ãƒãƒ¼ã‚¸ãƒ§ãƒ³:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "無効ãªå®Ÿè¡Œå¯èƒ½ãƒ•ァイルã§ã™ã€‚" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Windows" @@ -20208,6 +20505,10 @@ msgstr "osslsigncode" msgid "Wine" msgstr "Wine" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20331,7 +20632,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "最大è·é›¢" @@ -21190,17 +21492,19 @@ msgstr "" "プãƒãƒ‘ティをè¨å®šã™ã‚‹ã‹ã€ãƒãƒªã‚´ãƒ³ã‚’æç”»ã—ã¦ãã ã•ã„。" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance ã¯ã€åã¾ãŸã¯å« Navigation2D ノードã«ã‚ã‚‹å¿…è¦ãŒã‚り" -"ã¾ã™ã€‚ナビゲーション データã®ã¿æä¾›ã—ã¾ã™ã€‚" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ä¸å¤®ä¸‹" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "トラベル" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22439,14 +22743,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent ã¯Spatialノードã®ä¸‹ã§ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance ã¯ã€ãƒŠãƒ“ゲーションノードã®åã‚„å«ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" -"ã“れã¯ãƒŠãƒ“ゲーションデータã®ã¿æä¾›ã—ã¾ã™ã€‚" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25188,6 +25484,16 @@ msgid "3D Physics" msgstr " (物ç†çš„)" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ナビゲーション" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ナビゲーション" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "hiDPIを使用" @@ -26615,7 +26921,7 @@ msgstr "トランジション" msgid "Refraction" msgstr "分離:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26700,7 +27006,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "縮尺: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "変数ã®åž‹ã‚’è¨å®š" #: scene/resources/navigation_mesh.cpp @@ -26718,10 +27029,15 @@ msgid "Source Group Name" msgstr "ソース" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "メインシーンã®å¼•æ•°:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26731,11 +27047,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "é ˜åŸŸ" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "シーンã‹ã‚‰ãƒžãƒ¼ã‚¸" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26749,6 +27070,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "デフォルトを表示" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "è·é›¢ã‚’å–å¾—:" @@ -26766,7 +27092,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27183,6 +27509,11 @@ msgid "Scenario" msgstr "シーン" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ナビゲーション" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27200,6 +27531,26 @@ msgstr "左線形" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "デフォルトã®Z Far" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "デフォルトã®ãƒ—レビュー" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "試験的" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "接続を編集:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 875dfbd491..34914a67b6 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -216,9 +216,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -372,6 +373,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -562,7 +572,8 @@ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -650,24 +661,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -776,7 +786,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ" @@ -2253,8 +2264,8 @@ msgid "Open" msgstr "გáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "მფლáƒáƒ‘ელები:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2564,7 +2575,7 @@ msgid "Bus Options" msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2822,6 +2833,23 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "პáƒáƒ™áƒ”ტი დáƒáƒ§áƒ”ნდრწáƒáƒ მáƒáƒ¢áƒ”ბით!" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2834,6 +2862,28 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ვერწáƒáƒ•შლით:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2937,8 +2987,27 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "წáƒáƒ•შáƒáƒšáƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი?" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ხáƒáƒœáƒ’რძლივáƒáƒ‘რ(წáƒáƒ›áƒ”ბში)." + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3118,9 +3187,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4230,14 +4299,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4358,6 +4419,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "áƒáƒ£áƒ“ირგáƒáƒ“áƒáƒ›áƒ¢áƒáƒœáƒ˜áƒ¡ სáƒáƒ®áƒ”ლის ცვლილებáƒ" @@ -4386,6 +4451,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5131,6 +5200,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5394,7 +5468,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "შექმნáƒ" @@ -6851,7 +6927,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ" @@ -7135,6 +7211,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10113,6 +10201,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "შექმნáƒ" @@ -11513,8 +11602,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "შექმნáƒ" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12525,8 +12615,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" @@ -14026,31 +14115,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14185,6 +14253,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16505,7 +16578,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "შექმნáƒ" @@ -17092,7 +17165,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17122,6 +17194,19 @@ msgstr "წáƒáƒ¨áƒšáƒ" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "შექმნáƒ" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "შექმნáƒ" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18629,10 +18714,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18737,12 +18818,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "სიგნáƒáƒšáƒ”ბი" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18758,6 +18843,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18786,7 +18875,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18797,19 +18886,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18822,7 +18909,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18838,7 +18925,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ხáƒáƒœáƒ’რძლივáƒáƒ‘რ(წáƒáƒ›áƒ”ბში)." #: platform/android/export/export_plugin.cpp @@ -18846,15 +18933,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18865,7 +18949,7 @@ msgid "Adding files..." msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19104,6 +19188,15 @@ msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¡áƒáƒ¦áƒ”ბების áƒáƒ¡áƒšá msgid "Custom BG Color" msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¡áƒáƒ¦áƒ”ბების áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19126,19 +19219,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -19215,16 +19318,17 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "ჩáƒáƒ¢áƒ•ირთვის შეცდáƒáƒ›áƒ”ბი!" #: platform/javascript/export/export.cpp msgid "Web" @@ -19507,9 +19611,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "შექმნáƒ" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19525,19 +19646,73 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "მუდმივი" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "ჩáƒáƒ¢áƒ•ირთვის შეცდáƒáƒ›áƒ”ბი!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19545,7 +19720,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19587,6 +19762,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." @@ -19896,6 +20080,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "ვერწáƒáƒ•შლით:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19942,6 +20131,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "მუდმივი" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "ვერწáƒáƒ•შლით:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19963,6 +20212,23 @@ msgid "Invalid product version:" msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19978,6 +20244,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -20092,7 +20362,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20890,13 +21161,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "წáƒáƒ¨áƒšáƒ" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22020,12 +22294,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24558,6 +24826,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "შექმნáƒ" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "შექმნáƒ" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25924,7 +26202,7 @@ msgstr "გáƒáƒ დáƒáƒ¡áƒ•ლáƒ" msgid "Refraction" msgstr "ფუნქციის შექმნáƒ" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26004,7 +26282,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "%s ტიპის ცვლილებáƒ" #: scene/resources/navigation_mesh.cpp @@ -26021,7 +26304,11 @@ msgid "Source Group Name" msgstr "რესურსი" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26033,11 +26320,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26050,6 +26342,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26066,7 +26363,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26461,6 +26758,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "შექმნáƒ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26477,6 +26779,26 @@ msgstr "წრფივი" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "%s ტიპის ცვლილებáƒ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "%s ტიპის ცვლილებáƒ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "%s ტიპის ცვლილებáƒ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/km.po b/editor/translations/km.po index b08b57906d..700f4f483c 100644 --- a/editor/translations/km.po +++ b/editor/translations/km.po @@ -200,9 +200,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -351,6 +352,14 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +msgid "Mouse Mode" +msgstr "" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -531,7 +540,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -614,24 +624,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -739,7 +748,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2125,7 +2135,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2416,7 +2426,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2672,6 +2682,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2684,6 +2710,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2784,8 +2830,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2955,9 +3018,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4033,14 +4096,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4155,6 +4210,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4182,6 +4241,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4909,6 +4972,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5163,7 +5230,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6546,7 +6615,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6813,6 +6882,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9689,6 +9770,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11042,7 +11124,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12000,8 +12082,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13418,31 +13499,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13575,6 +13635,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15822,7 +15886,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16381,7 +16445,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16407,6 +16470,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Key(s) ដែលបានជ្រើសស្ទួន" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ážáž˜áŸ’លៃ:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17836,10 +17912,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -17943,12 +18015,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17964,6 +18039,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -17992,7 +18071,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18003,19 +18082,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18028,7 +18105,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18043,7 +18120,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18051,15 +18128,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18069,7 +18143,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18293,6 +18367,15 @@ msgstr "" msgid "Custom BG Color" msgstr "" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18314,19 +18397,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "index នៃ type %s សម្រាប់ base type %s មិនážáŸ’រឺមážáŸ’រូវទáŸ" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +msgid "Icon Creation" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18398,15 +18490,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18673,9 +18765,25 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization failed." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18691,15 +18799,66 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "DMG Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18710,7 +18869,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18751,6 +18910,14 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19047,6 +19214,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19087,6 +19258,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "arguments ដែលប្រើសំរាប់រៀប '%s' មិនážáŸ’រឹមážáŸ’រូវទáŸ" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19105,6 +19333,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19120,6 +19364,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19229,7 +19477,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -19977,13 +20226,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21040,12 +21291,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23392,6 +23637,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Key(s) ដែលបានជ្រើសស្ទួន" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Key(s) ដែលបានជ្រើសស្ទួន" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24620,7 +24875,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24696,10 +24951,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transition" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24712,7 +24972,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24724,11 +24988,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24741,6 +25009,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24757,7 +25029,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25119,6 +25391,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transition" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25134,6 +25411,25 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "ážáž˜áŸ’លៃ:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ážáž˜áŸ’លៃ:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ážáž˜áŸ’លៃ:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Edge Connection Margin" +msgstr "" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 9dde50266e..b4a91e0076 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -32,13 +32,15 @@ # Lee Minhak <minarihak@gmail.com>, 2022. # 한수현 <shh1473@ajou.ac.kr>, 2022. # Taehun Yun <yooontehoon@naver.com>, 2022. +# vrSono <global.sonogong@gmail.com>, 2022. +# Seonghyeon Cho <seonghyeoncho96@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-30 16:17+0000\n" -"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" +"Last-Translator: Seonghyeon Cho <seonghyeoncho96@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -230,9 +232,10 @@ msgid "Data" msgstr "ë°ì´í„°" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "네트워í¬" @@ -337,9 +340,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ë””ì½”ë”©í• ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜ ìž˜ëª»ëœ í˜•ì‹ìž…니다." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "표현ì‹ì˜ ìž…ë ¥ %i (ì „ë‹¬ë˜ì§€ 않ìŒ) ì´(ê°€) 올바르지 않습니다" +msgstr "표현ì‹ì˜ ìž…ë ¥ %d (ì „ë‹¬ë˜ì§€ 않ìŒ) ì´(ê°€) 올바르지 않습니다" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -382,6 +384,16 @@ msgstr "메시지 대기열" msgid "Max Size (KB)" msgstr "최대 í¬ê¸°(KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "ì´ë™ 모드" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "ìž…ë ¥ ì‚ì œ" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -561,7 +573,8 @@ msgstr "ì„œìˆ " #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "실행" @@ -644,6 +657,10 @@ msgid "Main Run Args" msgstr "ë©”ì¸ ì‹¤í–‰ ì¸ìž" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "씬 ì´ë¦„ ì§€ì •" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "íŒŒì¼ í™•ìž¥ìžë¡œ 찾기" @@ -651,18 +668,15 @@ msgstr "íŒŒì¼ í™•ìž¥ìžë¡œ 찾기" msgid "Script Templates Search Path" msgstr "스í¬ë¦½íЏ 템플릿 검색 경로" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "ë²„ì „ 컨트롤" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "스타트업으로 ìžë™ 로드" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "ë²„ì „ 컨트롤" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -769,7 +783,8 @@ msgid "Quality" msgstr "품질" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "í•„í„°" @@ -1294,19 +1309,16 @@ msgid "Remove this track." msgstr "ì´ íŠ¸ëž™ì„ ì œê±°í•©ë‹ˆë‹¤." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "시간 (ì´ˆ): " +msgstr "시간 (ì´ˆ):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "위치" +msgstr "위치:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "íšŒì „" +msgstr "íšŒì „:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1323,44 +1335,36 @@ msgid "Type:" msgstr "타입:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:" +msgstr "(ì¸ì‹ë¶ˆê°€. 예ìƒí•œ 타입: %s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "ì†ë„ 완화" +msgstr "Easing:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In-Handle:" -msgstr "ìž…ë ¥ 핸들" +msgstr "ìž…ë ¥ 핸들:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out-Handle:" -msgstr "ì¶œë ¥ 핸들" +msgstr "ì¶œë ¥ 핸들:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Stream:" -msgstr "스트림" +msgstr "스트림:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start (s):" -msgstr "재시작 (ì´ˆ):" +msgstr "시작 (ì´ˆ):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End (s):" -msgstr "페ì´ë“œ ì¸ (ì´ˆ):" +msgstr "종료 (ì´ˆ):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Clip:" -msgstr "ì• ë‹ˆë©”ì´ì…˜:" +msgstr "ì• ë‹ˆë©”ì´ì…˜ í´ë¦½:" #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -1575,9 +1579,8 @@ msgid "Add Method Track Key" msgstr "메서드 트랙 키 추가" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "오브ì íŠ¸ì— ë©”ì„œë“œê°€ ì—†ìŒ: " +msgstr "오브ì íŠ¸ì— ë©”ì„œë“œê°€ ì—†ìŒ:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2185,8 +2188,8 @@ msgid "Open" msgstr "열기" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ì†Œìœ ìž:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2485,7 +2488,7 @@ msgid "Bus Options" msgstr "버스 옵션" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ë³µì œ" @@ -2538,9 +2541,8 @@ msgid "There is no '%s' file." msgstr "'%s' 파ì¼ì´ 없습니다." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "ë ˆì´ì•„웃" +msgstr "ë ˆì´ì•„웃:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2742,6 +2744,25 @@ msgid "Choose" msgstr "ì„ íƒ" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "íŒŒì¼ ê²½ë¡œ 완성" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "패키지를 성공ì 으로 설치했습니다!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "실패함:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "ì €ìž¥í•˜ë ¤ëŠ” 파ì¼:" @@ -2754,6 +2775,31 @@ msgid "Packing" msgstr "패킹 중" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "다른 ì´ë¦„으로 ì €ìž¥" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "í´ë”를 만들 수 없습니다." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "프로ì 트 파ì¼ì„ 내보낼 수 없었습니다" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "파ì¼ì„ 쓰기 모드로 ì—´ 수 ì—†ìŒ:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "다른 ì´ë¦„으로 ì €ìž¥" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2870,11 +2916,33 @@ msgstr "커스텀 디버그 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다." msgid "Custom release template not found." msgstr "커스텀 릴리스 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "템플릿 관리" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "주어진 내보내기 경로가 ì—†ìŒ:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "템플릿 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "패딩" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "32비트 환경ì—서는 4 GiB보다 í° ë‚´ìž¥ PCK를 내보낼 수 없습니다." @@ -3045,9 +3113,9 @@ msgid "Import" msgstr "ê°€ì ¸ì˜¤ê¸°" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "내보내기" @@ -4185,14 +4253,6 @@ msgid "" msgstr "" "íŒŒì¼ '%s'ì— ì“¸ 수 없습니다. 파ì¼ì´ 사용 중ì´ê±°ë‚˜ ìž ê²¨ 있거나 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "씬" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "씬 ì´ë¦„ ì§€ì •" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4307,6 +4367,10 @@ msgid "Default Color Picker Mode" msgstr "기본 색 ê³ ë¥´ê¸° 모드" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ë²„ì „ 컨트롤" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "ì‚¬ìš©ìž ì´ë¦„" @@ -4334,6 +4398,10 @@ msgstr "집중 모드를 í† ê¸€í•©ë‹ˆë‹¤." msgid "Add a new scene." msgstr "새 ì”¬ì„ ì¶”ê°€í•©ë‹ˆë‹¤." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "씬" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "ì´ì „ì— ì—´ì—ˆë˜ ì”¬ìœ¼ë¡œ ì´ë™í•©ë‹ˆë‹¤." @@ -5018,9 +5086,8 @@ msgid "Size:" msgstr "í¬ê¸°:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "페ì´ì§€: " +msgstr "페ì´ì§€:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5114,6 +5181,11 @@ msgstr "" "내보내기 메뉴ì—서 ì‹¤í–‰í• ìˆ˜ 있는 í”„ë¦¬ì…‹ì„ ì¶”ê°€í•˜ê±°ë‚˜ 기존 í”„ë¦¬ì…‹ì„ ì‹¤í–‰í• ìˆ˜ " "있ë„ë¡ ì •ì˜í•´ì£¼ì„¸ìš”." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "프로ì 트" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "_run() ë©”ì„œë“œì— ë‹¹ì‹ ì˜ ë…¼ë¦¬ë¥¼ 작성하세요." @@ -5367,7 +5439,9 @@ msgid "Draw Spaces" msgstr "공백 사용" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "네비게ì´ì…˜" @@ -5535,7 +5609,7 @@ msgstr "타입 힌트 추가" #: editor/editor_settings.cpp msgid "Use Single Quotes" -msgstr "ë‹¨ì¼ ì¸ìš© 사용" +msgstr "홑따옴표 사용" #: editor/editor_settings.cpp msgid "Show Help Index" @@ -5694,9 +5768,8 @@ msgid "Warped Mouse Panning" msgstr "" #: editor/editor_settings.cpp -#, fuzzy msgid "Navigation Feel" -msgstr "내비게ì´ì…˜ 모드" +msgstr "내비게ì´ì…˜ ê°ë„" #: editor/editor_settings.cpp msgid "Orbit Sensitivity" @@ -5752,42 +5825,36 @@ msgid "Freelook Speed Zoom Link" msgstr "ìžìœ 시ì ì†ë„ ìˆ˜ì •ìž" #: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Grid Color" -msgstr "ìƒ‰ìƒ ì„ íƒ" +msgstr "ê²©ìž ìƒ‰ìƒ" #: editor/editor_settings.cpp -#, fuzzy msgid "Guides Color" -msgstr "ìƒ‰ìƒ ì„ íƒ" +msgstr "ê°€ì´ë“œ 색ìƒ" #: editor/editor_settings.cpp -#, fuzzy msgid "Smart Snapping Line Color" -msgstr "스마트 스냅" +msgstr "스마트 스냅 ë¼ì¸ 색ìƒ" #: editor/editor_settings.cpp msgid "Bone Width" -msgstr "" +msgstr "본 너비" #: editor/editor_settings.cpp -#, fuzzy msgid "Bone Color 1" -msgstr "ìƒ‰ìƒ í•목 ì´ë¦„ 바꾸기" +msgstr "본 ìƒ‰ìƒ 1" #: editor/editor_settings.cpp -#, fuzzy msgid "Bone Color 2" -msgstr "ìƒ‰ìƒ í•목 ì´ë¦„ 바꾸기" +msgstr "본 ìƒ‰ìƒ 2" #: editor/editor_settings.cpp -#, fuzzy msgid "Bone Selected Color" -msgstr "ì„ íƒëœ 프로필 구성:" +msgstr "ì„ íƒëœ 본 색ìƒ" #: editor/editor_settings.cpp msgid "Bone IK Color" -msgstr "" +msgstr "본 IK 색ìƒ" #: editor/editor_settings.cpp msgid "Bone Outline Color" @@ -5889,14 +5956,12 @@ msgid "Auto Save" msgstr "ìžë™ ì €ìž¥" #: editor/editor_settings.cpp -#, fuzzy msgid "Save Before Running" -msgstr "ì”¬ì„ ì‹¤í–‰í•˜ê¸° ì „ì— ì €ìž¥..." +msgstr "실행하기 ì „ì— ì €ìž¥" #: editor/editor_settings.cpp -#, fuzzy msgid "Font Size" -msgstr "ì •ë©´ ë·°" +msgstr "í°íЏ í¬ê¸°" #: editor/editor_settings.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp @@ -6826,7 +6891,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "í•„í„°:" @@ -7123,6 +7188,18 @@ msgid "Saving..." msgstr "ì €ìž¥ 중..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10098,6 +10175,7 @@ msgid "Points" msgstr "ì " #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "í´ë¦¬ê³¤" @@ -11479,7 +11557,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "ìž˜ëª»ëœ ì§€ì˜¤ë©”íŠ¸ë¦¬. 메시로 ëŒ€ì²´í• ìˆ˜ 없습니다." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Mesh2D로 변환" #: editor/plugins/sprite_editor_plugin.cpp @@ -12474,8 +12553,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "ì´ì „ 모양, 하위 타ì¼, í˜¹ì€ íƒ€ì¼ì„ ì„ íƒí•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "ì˜ì—" @@ -13997,35 +14075,10 @@ msgid "Delete preset '%s'?" msgstr "'%s' í”„ë¦¬ì…‹ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없습니다.\n" -"내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë˜ê±°ë‚˜ ìž˜ëª»ëœ ê²ƒ 같습니다." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없습니다.\n" -"내보내기 프리셋ì´ë‚˜ 내보내기 ì„¤ì •ì˜ ë¬¸ì œì¸ ê²ƒ 같습니다." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "주어진 내보내기 경로가 ì—†ìŒ:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "ì´ í”Œëž«í¼ì˜ 내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë¨/ì†ìƒë¨:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "경로 내보내기" @@ -14170,6 +14223,11 @@ msgid "Export templates for this platform are missing:" msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë¨:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "프로ì 트 창립ìž" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "내보내기 템플릿 관리" @@ -16574,7 +16632,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "í´ë¦¬ê³¤" @@ -17197,7 +17255,6 @@ msgid "Use In Baked Light" msgstr "ë¼ì´íŠ¸ë§µ 굽기" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17227,6 +17284,19 @@ msgstr "중앙" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "네비게ì´ì…˜" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "내비게ì´ì…˜ ê°ë„" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "ë‹¤ìŒ í‰ë©´" @@ -18785,10 +18855,6 @@ msgid "Could not execute on device." msgstr "기기ì—서 ì‹¤í–‰í• ìˆ˜ 없었습니다." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "'apksigner' íˆ´ì„ ì°¾ì„ ìˆ˜ 없습니다." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18904,12 +18970,17 @@ msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ í™œì„±í™”ëœ ê²½ìš°ì—ë§Œ ìœ í msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "시그ë„" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "'apksigner'를 ì°¾ì„ ìˆ˜ 없었습니다.\n" "ëª…ë ¹ì´ Android SDK build-tools ë””ë ‰í† ë¦¬ì—서 사용 가능한지 확ì¸í•´ì£¼ì„¸ìš”.\n" @@ -18928,6 +18999,11 @@ msgid "Could not find keystore, unable to export." msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "하위 프로세스를 ì‹œìž‘í• ìˆ˜ 없습니다!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner'ê°€ 오류 #%d로 반환ë˜ì—ˆìŠµë‹ˆë‹¤" @@ -18956,7 +19032,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "ìž˜ëª»ëœ íŒŒì¼ì´ë¦„입니다! Android APK는 *.apk 확장ìžê°€ 필요합니다." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "ì§€ì›ë˜ì§€ 않는 내보내기 형ì‹ìž…니다!\n" #: platform/android/export/export_plugin.cpp @@ -18968,10 +19045,9 @@ msgstr "" "(Project)' 메뉴ì—서 다시 설치해주세요." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Android 빌드 ë²„ì „ì´ ë§žì§€ 않ìŒ:\n" @@ -18980,13 +19056,15 @@ msgstr "" "'프로ì 트' 메뉴ì—서 Android 빌드 í…œí”Œë¦¿ì„ ë‹¤ì‹œ 설치해주세요." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "res://android/build/res/*.xml 파ì¼ì„ 프로ì 트 ì´ë¦„으로 ë®ì–´ì“¸ 수 없습니다" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "프로ì 트 파ì¼ì„ gradle 프로ì 트로 내보낼 수 없었습니다\n" #: platform/android/export/export_plugin.cpp @@ -18998,8 +19076,9 @@ msgid "Building Android Project (gradle)" msgstr "Android 프로ì 트 빌드 중 (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Android 프로ì íŠ¸ì˜ ë¹Œë“œì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤, ì¶œë ¥ëœ ì˜¤ë¥˜ë¥¼ 확ì¸í•˜ì„¸ìš”.\n" @@ -19018,7 +19097,8 @@ msgstr "" "트 ë””ë ‰í† ë¦¬ë¥¼ 확ì¸í•˜ì„¸ìš”." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "패키지를 ì°¾ì„ ìˆ˜ ì—†ìŒ: %s" #: platform/android/export/export_plugin.cpp @@ -19026,17 +19106,16 @@ msgid "Creating APK..." msgstr "APK를 만드는 중..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "내보낼 템플릿 APK를 ì°¾ì„ ìˆ˜ ì—†ìŒ:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19050,7 +19129,8 @@ msgid "Adding files..." msgstr "파ì¼ì„ 추가하는 중..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "프로ì 트 파ì¼ì„ 내보낼 수 없었습니다" #: platform/android/export/export_plugin.cpp @@ -19293,6 +19373,17 @@ msgstr "노드 잘ë¼ë‚´ê¸°" msgid "Custom BG Color" msgstr "노드 잘ë¼ë‚´ê¸°" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "템플릿 관리" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "커스텀 릴리스 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store 팀 ID를 ì§€ì •í•˜ì§€ 않았습니다 - 프로ì 트를 êµ¬ì„±í• ìˆ˜ 없습니다." @@ -19314,22 +19405,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "내보낸 HTMLì„ ì‹œìŠ¤í…œì˜ ê¸°ë³¸ 브ë¼ìš°ì €ë¥¼ 사용하여 실행합니다." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "내보내기 í…œí”Œë¦¿ì„ ì—´ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "파ì¼ì— 쓸 수 ì—†ìŒ:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "여백 ì„¤ì •" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "파ì¼ì„ ì½ì„ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "간격:" @@ -19404,15 +19508,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "HTML shellì„ ì½ì„ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "HTTP 서버 ë””ë ‰í† ë¦¬ë¥¼ 만들 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "HTTP 서버를 시작하는 중 오류:" #: platform/javascript/export/export.cpp @@ -19712,9 +19819,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "프로ì 트 파ì¼ì„ 내보낼 수 없었습니다" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "하위 프로세스를 ì‹œìž‘í• ìˆ˜ 없습니다!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "현지화" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19730,23 +19856,78 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "ì•„ì´ì½˜ì„ ì°¾ì„ ìˆ˜ 없습니다." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "íŒŒì¼ ì €ìž¥ 중 오류: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ë°©í–¥" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "하위 프로세스를 ì‹œìž‘í• ìˆ˜ 없습니다!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "ì¸ë„¤ì¼ 만드는 중" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" "내보낼 템플릿 APK를 ì°¾ì„ ìˆ˜ ì—†ìŒ:\n" "%s" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19754,7 +19935,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19795,6 +19976,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "프로ì 트" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "프로ì 트 파ì¼ì„ gradle 프로ì 트로 내보낼 수 없었습니다\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "ìž˜ëª»ëœ bundle ì‹ë³„ìž:" @@ -20110,6 +20301,11 @@ msgid "Debug Algorithm" msgstr "디버거" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "임시 파ì¼ì„ ì œê±°í• ìˆ˜ ì—†ìŒ:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20157,6 +20353,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "무작위 íšŒì „:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "ìž˜ëª»ëœ ì‹ë³„ìž:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "올바르지 ì•Šì€ ì´ë¦„입니다." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "임시 파ì¼ì„ ì œê±°í• ìˆ˜ ì—†ìŒ:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20178,6 +20438,23 @@ msgid "Invalid product version:" msgstr "ìž˜ëª»ëœ ì œí’ˆ GUID." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "ìž˜ëª»ëœ í™•ìž¥ìž." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "새 ì°½" @@ -20194,6 +20471,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20318,7 +20599,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "거리 ì„ íƒ:" @@ -21182,17 +21464,19 @@ msgstr "" "ì†ì„±ì„ ì„¤ì •í•˜ê±°ë‚˜ í´ë¦¬ê³¤ì„ ê·¸ë ¤ì£¼ì„¸ìš”." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니" -"다. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•©ë‹ˆë‹¤." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "아래쪽 중앙" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "ì§„í–‰" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22424,14 +22708,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´" -"ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œ ì œê³µí•©ë‹ˆë‹¤." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -24914,9 +25190,8 @@ msgid "Draw 2D Outlines" msgstr "ìœ¤ê³½ì„ ë§Œë“¤ê¸°" #: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy msgid "Reflections" -msgstr "ë°©í–¥" +msgstr "반사" #: scene/main/scene_tree.cpp #, fuzzy @@ -25165,6 +25440,16 @@ msgid "3D Physics" msgstr " (물리)" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "네비게ì´ì…˜" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "네비게ì´ì…˜" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26591,7 +26876,7 @@ msgstr "ì „í™˜: " msgid "Refraction" msgstr "간격:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26676,7 +26961,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "í¬ê¸° ì¡°ì ˆ 중: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "변수 타입 ì„¤ì •" #: scene/resources/navigation_mesh.cpp @@ -26694,10 +26984,15 @@ msgid "Source Group Name" msgstr "소스" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "ë©”ì¸ ì”¬ ì¸ìˆ˜:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26707,11 +27002,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "ì˜ì—" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "씬ì—서 병합하기" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26725,6 +27025,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "ë””í´íЏ ë³´ì´ê¸°" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "거리 ì„ íƒ:" @@ -26742,7 +27047,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27159,6 +27464,11 @@ msgid "Scenario" msgstr "씬" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "네비게ì´ì…˜" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27176,6 +27486,26 @@ msgstr "왼쪽 ì„ í˜•" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "기본 ë¶€ë™ ì†Œìˆ˜ì 단계" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ë””í´íЏ 미리보기" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "테스트" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ì—°ê²° 변경:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index f611fab612..5f0e9b24ad 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -220,9 +220,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Importuoti iÅ¡ Nodo:" @@ -379,6 +380,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "TimeScale Nodas" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -572,7 +582,8 @@ msgstr "ApraÅ¡ymas:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -657,6 +668,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Kelias iki Scenos:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -664,20 +680,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "Versija:" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Priedai" +msgid "Version Control Plugin Name" +msgstr "Versija:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -788,7 +799,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtrai..." @@ -2229,7 +2241,7 @@ msgid "Open" msgstr "Atidaryti" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2523,7 +2535,7 @@ msgid "Bus Options" msgstr "ApraÅ¡ymas:" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikuoti" @@ -2780,6 +2792,22 @@ msgid "Choose" msgstr "Pasirinkite" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2792,6 +2820,28 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nepavyko paÅ¡alinti laikino failo:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Filtrai..." + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2895,8 +2945,27 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Pasirinkite Nodus, kuriuos norite importuoti" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "Animacijos Nodas" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3080,9 +3149,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4194,15 +4263,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Kelias iki Scenos:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4325,6 +4385,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "Versija:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "Naujas pavadinimas:" @@ -4352,6 +4417,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5105,6 +5174,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "ApraÅ¡ymas:" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5371,7 +5445,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Animacijos Nodas" @@ -6831,7 +6907,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtrai..." @@ -7117,6 +7193,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10102,6 +10190,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Priedai" @@ -11501,8 +11590,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Keisti Poligono SkalÄ™" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12517,8 +12607,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Animacijos Nodas" @@ -14016,31 +14105,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Importuoti iÅ¡ Nodo:" @@ -14180,6 +14248,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ApraÅ¡ymas:" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16495,7 +16568,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Priedai" @@ -17088,7 +17161,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17118,6 +17190,19 @@ msgstr "IÅ¡trinti EfektÄ…" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Animacijos Nodas" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Animacijos Nodas" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18631,10 +18716,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18739,12 +18820,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signalai" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18760,6 +18845,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18788,7 +18877,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18799,19 +18888,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18824,7 +18911,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18840,7 +18927,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animacijos Nodas" #: platform/android/export/export_plugin.cpp @@ -18848,15 +18935,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18867,8 +18951,9 @@ msgid "Adding files..." msgstr "Filtrai..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "" +#, fuzzy +msgid "Could not export project files." +msgstr "PradÄ—ti ProfiliavimÄ…" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -19108,6 +19193,15 @@ msgstr "Transition Nodas" msgid "Custom BG Color" msgstr "Transition Nodas" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19130,23 +19224,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Netinkamas Å¡rifto dydis." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "PradÄ—ti ProfiliavimÄ…" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Prijungti" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "PradÄ—ti ProfiliavimÄ…" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Versija:" @@ -19221,16 +19326,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." +msgstr "PradÄ—ti ProfiliavimÄ…" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "Ä®vyko klaida kraunant Å¡riftÄ…." #: platform/javascript/export/export.cpp msgid "Web" @@ -19522,9 +19629,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "PradÄ—ti ProfiliavimÄ…" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Animacijos Nodas" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19540,19 +19665,73 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Konstanta" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Ä®vyko klaida kraunant Å¡riftÄ…." + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ApraÅ¡ymas:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Netinkamas Å¡rifto dydis." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19560,7 +19739,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19602,6 +19781,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "ApraÅ¡ymas:" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Netinkamas Å¡rifto dydis." @@ -19913,6 +20101,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nepavyko paÅ¡alinti laikino failo:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19959,6 +20152,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstanta" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Netinkamas Å¡rifto dydis." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Netinkamas Å¡rifto dydis." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nepavyko paÅ¡alinti laikino failo:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19980,6 +20233,23 @@ msgid "Invalid product version:" msgstr "Netinkamas Å¡rifto dydis." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Netinkamas Å¡rifto dydis." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19995,6 +20265,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20113,7 +20387,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20910,13 +21185,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "IÅ¡trinti EfektÄ…" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22046,12 +22324,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24592,6 +24864,16 @@ msgid "3D Physics" msgstr "Fizikos Kadro %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Animacijos Nodas" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Animacijos Nodas" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25963,7 +26245,7 @@ msgstr "Transition Nodas" msgid "Refraction" msgstr "Versija:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26043,8 +26325,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "SkalÄ—:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Versija:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -26059,10 +26347,15 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Atidaryti Skriptų Editorių" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26071,11 +26364,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Animacijos Nodas" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26088,6 +26386,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Redaguoti Filtrus" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26104,7 +26407,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26499,6 +26802,11 @@ msgid "Scenario" msgstr "Kelias iki Scenos:" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Animacijos Nodas" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26516,6 +26824,26 @@ msgstr "Redaguoti Filtrus" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Atnaujinti" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Atnaujinti" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Redaguoti Filtrus" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Prijungti" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 8f5d1e471a..7397c083fa 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -222,9 +222,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -381,6 +382,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "MÄ“roga Režīms" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -575,7 +585,8 @@ msgstr "Apraksts" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Palaist" @@ -664,6 +675,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Ainas ceļš:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -671,19 +687,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versiju Kontrole" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Versiju Kontrole" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Spraudņi" +msgid "Version Control Plugin Name" +msgstr "Versiju Kontrole" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -798,7 +810,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtrs:" @@ -2227,8 +2240,8 @@ msgid "Open" msgstr "AtvÄ“rt" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ĪpaÅ¡nieki:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2531,7 +2544,7 @@ msgid "Bus Options" msgstr "Kopnes IestatÄ«jumi" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Izveidot dublikÄtu" @@ -2791,6 +2804,25 @@ msgid "Choose" msgstr "IzvÄ“laties" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "KopÄ“t mezgla ceļu" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakete instalÄ“ta sekmÄ«gi!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "NeizdevÄs:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Faila saglabÄÅ¡ana:" @@ -2803,6 +2835,31 @@ msgid "Packing" msgstr "Pako" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "SaglabÄt KÄ" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "NeizdevÄs izveidot mapi." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "FiltrÄ“t projektus" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nevar atvÄ“rt failu rakstīšanai:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "SaglabÄt KÄ" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2922,11 +2979,30 @@ msgstr "PielÄgots atkļūdoÅ¡anas Å¡ablons nav atrasts." msgid "Custom release template not found." msgstr "PielÄgots relÄ«zes Å¡ablons nav atrasts." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "PÄrvaldÄ«t Å¡ablonus" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Å ablona fails nav atrasts:" #: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Pie 32-bitu eksportēšanas, iepakotais PCK nevar bÅ«t lielÄks par 4GB." @@ -3098,9 +3174,9 @@ msgid "Import" msgstr "ImportÄ“t" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "EksportÄ“t" @@ -4252,15 +4328,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Aina" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Ainas ceļš:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4385,6 +4452,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versiju Kontrole" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "PÄrsaukt" @@ -4413,6 +4484,10 @@ msgstr "PÄrslÄ“gt traucÄ“jumu brÄ«vo režīmu." msgid "Add a new scene." msgstr "Pievienot jaunu ainu." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Aina" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Iet uz iepriekÅ¡ atvÄ“rto ainu." @@ -5166,6 +5241,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekts" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Raksti savu loÄ£iku _run() metodÄ“." @@ -5436,7 +5516,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "NavigÄcija" @@ -6882,7 +6964,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtrs:" @@ -7171,6 +7253,18 @@ msgid "Saving..." msgstr "SaglabÄ..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10068,6 +10162,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "DaudzstÅ«ri" @@ -11429,8 +11524,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "KonvertÄ“t uz CPUParticles2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12403,8 +12499,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "ReÄ£ions" @@ -13847,31 +13942,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14009,6 +14083,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projekta DibinÄtÄji" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "PÄrvaldÄ«t Eksporta Å ablonus" @@ -16300,7 +16379,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "DaudzstÅ«ri" @@ -16896,7 +16975,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16926,6 +17004,19 @@ msgstr "CentrÄ“t mezglu" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "NavigÄcija" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "NavigÄcijas režīms" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18432,10 +18523,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18539,12 +18626,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "SignÄls" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18560,6 +18651,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nevar palaist sub-procesu!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18588,7 +18684,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18599,19 +18695,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18624,7 +18718,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18639,7 +18733,8 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Paka nav atrasta: %s" #: platform/android/export/export_plugin.cpp @@ -18647,15 +18742,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18665,8 +18757,9 @@ msgid "Adding files..." msgstr "Failu pievienoÅ¡ana..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "" +#, fuzzy +msgid "Could not export project files." +msgstr "Nevar palaist sub-procesu!" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -18907,6 +19000,17 @@ msgstr "Izgriezt mezglu(s)" msgid "Custom BG Color" msgstr "Izgriezt mezglu(s)" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "PÄrvaldÄ«t Å¡ablonus" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "PielÄgots relÄ«zes Å¡ablons nav atrasts." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18928,19 +19032,32 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "NeizdevÄs izveidot mapi." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "NederÄ«gs paplaÅ¡inÄjums." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "NeizdevÄs izveidot mapi." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Saturs:" + +#: platform/javascript/export/export.cpp +#, fuzzy +msgid "Could not read file: \"%s\"." +msgstr "NeizdevÄs izveidot mapi." #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -19018,16 +19135,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" -msgstr "" +#, fuzzy +msgid "Could not create HTTP server directory: %s." +msgstr "NeizdevÄs izveidot mapi." #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "Kļūda saglabÄjot failu: %s" #: platform/javascript/export/export.cpp msgid "Web" @@ -19317,9 +19436,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nevar palaist sub-procesu!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "LokalizÄcija" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19335,19 +19472,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Kļūda saglabÄjot failu: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Virzieni" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nevar palaist sub-procesu!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Izveido sÄ«ktÄ“lu" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "NederÄ«gs bÄzes ceļš." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19355,7 +19547,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19396,6 +19588,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekts" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "NederÄ«gs bunduļa identifikators:" @@ -19706,6 +19907,11 @@ msgid "Debug Algorithm" msgstr "AtkļūdotÄjs" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nevar noņemt pagaidu failu:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19753,6 +19959,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstante" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "NederÄ«gs Identifikators:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "NederÄ«gs nosaukums." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nevar noņemt pagaidu failu:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19774,6 +20040,23 @@ msgid "Invalid product version:" msgstr "NederÄ«gs produkta GUID." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "NederÄ«gs paplaÅ¡inÄjums." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Jauns logs" @@ -19790,6 +20073,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19911,7 +20198,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Å ablons" @@ -20721,13 +21009,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "CentrÄ“t mezglu" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21868,12 +22159,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24458,6 +24743,16 @@ msgid "3D Physics" msgstr "Fizikas kadrs %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "NavigÄcija" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "NavigÄcija" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25841,7 +26136,7 @@ msgstr "Pievienot PÄreju" msgid "Refraction" msgstr "AtdalÄ«jums:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25921,7 +26216,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "MÄ“rogs: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "NomainÄ«t BÄzes Tipu:" #: scene/resources/navigation_mesh.cpp @@ -25938,10 +26238,15 @@ msgid "Source Group Name" msgstr "Avots" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Saturs:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25951,11 +26256,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "ReÄ£ions" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "SapludinÄt no ainas" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25968,6 +26278,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "RÄdÄ«t noklusÄ“jumu" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25984,7 +26299,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26385,6 +26700,11 @@ msgid "Scenario" msgstr "Aina" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "NavigÄcija" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26401,6 +26721,26 @@ msgstr "Pa Kreisi, LineÄrs" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "NoklusÄ“juma" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "NoklusÄ“juma motÄ«vs" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "TestÄ“" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "IzmainÄ«t Savienojumu:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/mk.po b/editor/translations/mk.po index c59b53c3e5..e37eadfeaf 100644 --- a/editor/translations/mk.po +++ b/editor/translations/mk.po @@ -203,9 +203,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -356,6 +357,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "СвојÑтва на анимацијата." + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -537,7 +547,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -620,24 +631,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -745,7 +755,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2135,7 +2146,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2426,7 +2437,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2682,6 +2693,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2694,6 +2721,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2794,8 +2841,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2966,9 +3030,9 @@ msgid "Import" msgstr "Импортирај" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4048,14 +4112,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4170,6 +4226,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4197,6 +4257,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4925,6 +4989,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5181,7 +5249,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6566,7 +6636,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6839,6 +6909,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9718,6 +9800,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11071,7 +11154,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12031,8 +12114,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13452,31 +13534,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13610,6 +13671,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15858,7 +15923,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16421,7 +16486,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16447,6 +16511,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Дуплирај избран(и) клуч(еви)" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ВредноÑÑ‚:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17880,10 +17957,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -17987,12 +18060,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Јазол" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18008,6 +18085,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18036,7 +18117,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18047,19 +18128,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18072,7 +18151,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18087,7 +18166,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18095,15 +18174,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18113,7 +18189,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18339,6 +18415,15 @@ msgstr "" msgid "Custom BG Color" msgstr "" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18360,19 +18445,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Ðевалиден Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ тип %s за оÑновен тип %s" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +msgid "Icon Creation" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18444,15 +18538,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18719,9 +18813,25 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization failed." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18737,15 +18847,66 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "DMG Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18756,7 +18917,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18797,6 +18958,14 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19093,6 +19262,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19133,6 +19306,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ðевалидни аргументи на конÑтрукт '%s'" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19151,6 +19381,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19166,6 +19412,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19275,7 +19525,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20029,13 +20280,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21096,12 +21349,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23458,6 +23705,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Дуплирај избран(и) клуч(еви)" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Дуплирај избран(и) клуч(еви)" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24686,7 +24943,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24760,10 +25017,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "СвојÑтва на анимацијата." + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24776,7 +25038,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24788,11 +25054,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24805,6 +25075,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24821,7 +25095,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25186,6 +25460,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "СвојÑтва на анимацијата." + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25201,6 +25480,25 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "ВредноÑÑ‚:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ВредноÑÑ‚:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ВредноÑÑ‚:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Edge Connection Margin" +msgstr "" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index f90d962f02..74ea6168e4 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -206,9 +206,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -359,6 +360,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "വിളി രീതി നോകàµà´•àµà´•" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -541,7 +551,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -624,24 +635,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -749,7 +759,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2143,7 +2154,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2435,7 +2446,7 @@ msgid "Bus Options" msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2691,6 +2702,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2703,6 +2730,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2805,8 +2852,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2976,9 +3040,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4061,14 +4125,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4184,6 +4240,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4211,6 +4271,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4938,6 +5002,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5195,7 +5263,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6582,7 +6652,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6851,6 +6921,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9737,6 +9819,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11090,7 +11173,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12049,8 +12132,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13472,31 +13554,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13631,6 +13692,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15881,7 +15946,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16443,7 +16508,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16469,6 +16533,19 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "വില:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17907,10 +17984,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18014,12 +18087,15 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18035,6 +18111,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18063,7 +18143,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18074,19 +18154,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18099,7 +18177,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18114,7 +18192,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18122,15 +18200,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18140,7 +18215,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18367,6 +18442,15 @@ msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" msgid "Custom BG Color" msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18388,19 +18472,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ തരം% sഇനൠഅസാധàµà´µà´¾à´¯ സൂചിക തരം" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18473,15 +18567,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18751,9 +18845,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18769,18 +18880,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "à´¤àµà´°à´¿à´®à´¾à´¨ പരിവർതàµà´¤à´¨à´‚ നോകàµà´•àµà´•" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -18788,7 +18952,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18829,6 +18993,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19125,6 +19298,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19165,6 +19342,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "'%s' നിർമികàµà´•àµà´µà´¾àµ» à´•à´¿à´Ÿàµà´Ÿà´¿à´¯ വിവരങàµà´™àµ¾ തെറàµà´±à´¾à´£àµ" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19183,6 +19417,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19198,6 +19448,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19308,7 +19562,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20066,13 +20321,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21144,12 +21401,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23533,6 +23784,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24794,7 +25055,7 @@ msgstr "" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24871,10 +25132,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24887,7 +25153,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24899,11 +25169,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24916,6 +25191,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24932,7 +25211,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25299,6 +25578,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25314,6 +25598,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "വില:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "വില:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "വില:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "ചലനം à´šàµà´±àµà´±àµ½" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/mr.po b/editor/translations/mr.po index 1ec7cdfc99..005f8a3177 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -204,9 +204,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -358,6 +359,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "पà¥à¤²à¥‡ मोड:" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -543,7 +553,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -626,24 +637,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -752,7 +762,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2144,7 +2155,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2435,7 +2446,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2691,6 +2702,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2703,6 +2730,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2803,8 +2850,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2974,9 +3038,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4054,14 +4118,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4178,6 +4234,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4205,6 +4265,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4932,6 +4996,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5185,7 +5253,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6575,7 +6645,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "नोड हलवा" @@ -6848,6 +6918,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9725,6 +9807,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11078,7 +11161,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12042,8 +12125,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13467,31 +13549,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13624,6 +13685,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15878,7 +15943,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16441,7 +16506,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16470,6 +16534,19 @@ msgstr "नोड हलवा" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "संकà¥à¤°à¤®à¤£: " + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "नोड हलवा" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17908,10 +17985,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18015,12 +18088,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "नोड जोडा" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18036,6 +18113,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18064,7 +18145,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18075,19 +18156,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18100,7 +18179,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18115,7 +18194,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18123,15 +18202,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18141,7 +18217,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18367,6 +18443,15 @@ msgstr "" msgid "Custom BG Color" msgstr "" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18388,19 +18473,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "बेस पà¥à¤°à¤•ार %s साठी %s पà¥à¤°à¤•ाराची अवैध अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•ा" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18473,15 +18568,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18750,9 +18845,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18768,15 +18880,67 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "संकà¥à¤°à¤®à¤£: " + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18787,7 +18951,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18828,6 +18992,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19126,6 +19299,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19166,6 +19343,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "बेस पà¥à¤°à¤•ार %s साठी %s पà¥à¤°à¤•ाराची अवैध अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•ा" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19184,6 +19418,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19199,6 +19449,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19310,7 +19564,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20080,15 +20335,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "नोड हलवा" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "पà¥à¤°à¤µà¤¾à¤¸" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -21160,12 +21419,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23558,6 +23811,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "नोड हलवा" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "नोड हलवा" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24820,7 +25083,7 @@ msgstr "संकà¥à¤°à¤®à¤£: " msgid "Refraction" msgstr "संकà¥à¤°à¤®à¤£: " -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24894,8 +25157,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "सà¥à¤•ेल:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "संकà¥à¤°à¤®à¤£: " #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -24910,7 +25179,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24922,11 +25195,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24939,6 +25216,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24955,7 +25236,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25325,6 +25606,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "नोड हलवा" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25340,6 +25626,26 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "मूलà¥à¤¯:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "बà¥à¤²à¥‡à¤‚ड टाइमà¥à¤¸:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "मूलà¥à¤¯:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index e7a893dcef..3ef25ef863 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -16,7 +16,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-31 22:33+0000\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" "Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n" "Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" "ms/>\n" @@ -28,7 +28,6 @@ msgstr "" "X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Tablet Driver" msgstr "Pemacu Tablet" @@ -91,34 +90,32 @@ msgstr "Tanpa sempadan" #: core/bind/core_bind.cpp msgid "Per Pixel Transparency Enabled" -msgstr "" +msgstr "Ketelusan Per Piksel Didayakan" #: core/bind/core_bind.cpp core/project_settings.cpp -#, fuzzy msgid "Fullscreen" -msgstr "Togol Skrin Penuh" +msgstr "Skrin penuh" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Dimaksimumkan" #: core/bind/core_bind.cpp msgid "Minimized" -msgstr "" +msgstr "Diminimumkan" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp msgid "Resizable" -msgstr "" +msgstr "Boleh diubah saiz" #: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp #: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp #: scene/gui/control.cpp scene/gui/line_edit.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Position" -msgstr "Kedudukan Dok" +msgstr "Kedudukan" #: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp #: main/main.cpp modules/gridmap/grid_map.cpp @@ -129,63 +126,56 @@ msgstr "Kedudukan Dok" #: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp #: scene/resources/style_box.cpp scene/resources/texture.cpp #: scene/resources/visual_shader.cpp servers/visual_server.cpp -#, fuzzy msgid "Size" -msgstr "Saiz:" +msgstr "Saiz" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Endian Swap" #: core/bind/core_bind.cpp -#, fuzzy msgid "Editor Hint" -msgstr "Editor" +msgstr "Petunjuk Editor" #: core/bind/core_bind.cpp msgid "Print Error Messages" -msgstr "" +msgstr "Cetak Mesej Ralat" #: core/bind/core_bind.cpp -#, fuzzy msgid "Iterations Per Second" -msgstr "Mod Interpolasi" +msgstr "Lelaran Sesaat" #: core/bind/core_bind.cpp msgid "Target FPS" -msgstr "" +msgstr "FPS Sasaran" #: core/bind/core_bind.cpp -#, fuzzy msgid "Time Scale" -msgstr "Nod TimeScale" +msgstr "Skala Masa" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Physics Jitter Fix" -msgstr "Bingkai Fizik %" +msgstr "Betulkan Fizik Jitter" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" -msgstr "" +msgstr "Ralat" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error String" -msgstr "Ralat semasa memindahkan:" +msgstr "Ralat String" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "Ralat semasa memindahkan:" +msgstr "Baris Ralat" #: core/bind/core_bind.cpp msgid "Result" -msgstr "" +msgstr "Hasil" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "" +msgstr "Memori" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -196,127 +186,119 @@ msgstr "" #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h #: servers/visual_server.cpp msgid "Limits" -msgstr "" +msgstr "Had-had" #: core/command_queue_mt.cpp msgid "Command Queue" -msgstr "" +msgstr "Barisan Perintah" #: core/command_queue_mt.cpp msgid "Multithreading Queue Size (KB)" -msgstr "" +msgstr "Saiz Baris Multithreading (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp #: modules/visual_script/visual_script_nodes.cpp #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Function" msgstr "Fungsi" #: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Data" -msgstr "" +msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" -msgstr "" +msgstr "Rangkaian" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "Keluarkan" +msgstr "FS Jauh" #: core/io/file_access_network.cpp -#, fuzzy msgid "Page Size" -msgstr "Halaman: " +msgstr "Saiz Halaman" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "Halaman Baca Di Hadapan" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "" +msgstr "Mod Penyekatan Didayakan" #: core/io/http_client.cpp -#, fuzzy msgid "Connection" -msgstr "Sambung" +msgstr "Sambungan" #: core/io/http_client.cpp msgid "Read Chunk Size" -msgstr "" +msgstr "Baca Saiz Chunk" #: core/io/marshalls.cpp msgid "Object ID" -msgstr "" +msgstr "ID Objek" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp -#, fuzzy msgid "Allow Object Decoding" -msgstr "Aktifkan Kulit Bawang" +msgstr "Benarkan Penyahkodan Objek" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Tolak Sambungan Rangkaian Baharu" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Network Peer" -msgstr "" +msgstr "Rakan Rangkaian" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp -#, fuzzy msgid "Root Node" -msgstr "Nod OneShot" +msgstr "Nod Akar" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "Sambung" +msgstr "Tolak Sambungan Baharu" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "Mod Pan" +msgstr "Mod Pemindahan" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" -msgstr "" +msgstr "Saiz Maks Encode Buffer" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" -msgstr "" +msgstr "Saiz Maks Input Buffer" #: core/io/packet_peer.cpp msgid "Output Buffer Max Size" -msgstr "" +msgstr "Saiz Maks Output Buffer" #: core/io/packet_peer.cpp msgid "Stream Peer" -msgstr "" +msgstr "Rakan Strim" #: core/io/stream_peer.cpp msgid "Big Endian" -msgstr "" +msgstr "Endian Besar" #: core/io/stream_peer.cpp msgid "Data Array" -msgstr "" +msgstr "Data Array" #: core/io/stream_peer_ssl.cpp msgid "Blocking Handshake" -msgstr "" +msgstr "Menyekat Handshake" #: core/io/udp_server.cpp -#, fuzzy msgid "Max Pending Connections" -msgstr "Edit Sambungan:" +msgstr "Sambungan Tertunda Maks" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -334,13 +316,12 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Bait tidak mencukupi untuk menyahkod bait, atau format tidak sah." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "Input %i tidak sah (tidak lulus) dalam ungkapan" +msgstr "Input %d tidak sah (tidak lulus) dalam ungkapan" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self tidak boleh digunakan kerana instance adalah null (tidak lulus)" +msgstr "self tidak boleh digunakan kerana contol adalah null (tidak lulus)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -365,130 +346,128 @@ msgstr "Atas panggilan ke '%s':" #: core/math/random_number_generator.cpp #: modules/opensimplex/open_simplex_noise.cpp msgid "Seed" -msgstr "" +msgstr "Benih" #: core/math/random_number_generator.cpp -#, fuzzy msgid "State" -msgstr "Status" +msgstr "Keadaan" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "Barisan Mesej" #: core/message_queue.cpp msgid "Max Size (KB)" -msgstr "" +msgstr "Saiz Maksimum (KB)" + +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mod Alih" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Padam Input" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" -msgstr "" +msgstr "Peranti" #: core/os/input_event.cpp -#, fuzzy msgid "Alt" -msgstr "Semua" +msgstr "Alt" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: core/os/input_event.cpp -#, fuzzy msgid "Control" -msgstr "Kawalan Versi" +msgstr "Kawalan" #: core/os/input_event.cpp msgid "Meta" -msgstr "" +msgstr "Meta" #: core/os/input_event.cpp -#, fuzzy msgid "Command" -msgstr "Komuniti" +msgstr "Perintah" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Pressed" -msgstr "Pratetap" +msgstr "Ditekan" #: core/os/input_event.cpp -#, fuzzy msgid "Scancode" -msgstr "Sumber Imbas" +msgstr "Kod imbasan" #: core/os/input_event.cpp msgid "Physical Scancode" -msgstr "" +msgstr "Kod Imbasan Fizikal" #: core/os/input_event.cpp msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp msgid "Echo" -msgstr "" +msgstr "Gema" #: core/os/input_event.cpp scene/gui/base_button.cpp -#, fuzzy msgid "Button Mask" -msgstr "Butang X 1" +msgstr "Mask Butang" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp -#, fuzzy msgid "Global Position" -msgstr "Pemalar" +msgstr "Kedudukan Global" #: core/os/input_event.cpp msgid "Factor" -msgstr "" +msgstr "Faktor" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "Butang X 1" +msgstr "Indeks Butang" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "Klik dua kali" #: core/os/input_event.cpp msgid "Tilt" -msgstr "" +msgstr "Tilt" #: core/os/input_event.cpp -#, fuzzy msgid "Pressure" -msgstr "Pratetap" +msgstr "Tekanan" #: core/os/input_event.cpp -#, fuzzy msgid "Relative" -msgstr "Snap Relatif" +msgstr "Relatif" #: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp msgid "Speed" -msgstr "" +msgstr "Kelajuan" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp msgid "Axis" -msgstr "" +msgstr "Paksi" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "Nilai pin" +msgstr "Nilai Paksi" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp msgid "Index" -msgstr "" +msgstr "Indeks" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -499,61 +478,55 @@ msgstr "Aksi" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "Kekuatan" #: core/os/input_event.cpp msgid "Delta" -msgstr "" +msgstr "Delta" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "Ubah" +msgstr "Saluran" #: core/os/input_event.cpp main/main.cpp -#, fuzzy msgid "Message" -msgstr "Komuniti" +msgstr "Mesej" #: core/os/input_event.cpp msgid "Pitch" -msgstr "" +msgstr "Pitch" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp msgid "Velocity" -msgstr "" +msgstr "Kelajuan" #: core/os/input_event.cpp msgid "Instrument" -msgstr "" +msgstr "Instrumen" #: core/os/input_event.cpp -#, fuzzy msgid "Controller Number" -msgstr "Nombor Baris:" +msgstr "Nombor Pengawal" #: core/os/input_event.cpp msgid "Controller Value" -msgstr "" +msgstr "Nilai Pengawal" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "Aksi" +msgstr "Aplikasi" #: core/project_settings.cpp main/main.cpp -#, fuzzy msgid "Config" -msgstr "Konfigurasikan Snap" +msgstr "Konfigurasi" #: core/project_settings.cpp -#, fuzzy msgid "Project Settings Override" -msgstr "Tetapan Projek..." +msgstr "Penggantian Tetapan Projek" #: core/project_settings.cpp core/resource.cpp #: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp @@ -576,49 +549,47 @@ msgstr "Keterangan" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" -msgstr "" +msgstr "Jalankan" #: core/project_settings.cpp editor/editor_node.cpp #: editor/run_settings_dialog.cpp main/main.cpp msgid "Main Scene" -msgstr "" +msgstr "Adegan Utama" #: core/project_settings.cpp -#, fuzzy msgid "Disable stdout" -msgstr "Tidak Aktif" +msgstr "Lumpuhkan stdout" #: core/project_settings.cpp -#, fuzzy msgid "Disable stderr" -msgstr "Tidak Aktif" +msgstr "Lumpuhkan stderr" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "Gunakan Direktori Data Projek Tersembunyi" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "Guna Dir Pengguna Tersuai" #: core/project_settings.cpp msgid "Custom User Dir Name" -msgstr "" +msgstr "Nama Dir Pengguna Tersuai" #: core/project_settings.cpp main/main.cpp #: platform/javascript/export/export.cpp platform/osx/export/export.cpp #: platform/uwp/os_uwp.cpp -#, fuzzy msgid "Display" -msgstr "Paparkan Semua" +msgstr "Paparan" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp #: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp msgid "Width" -msgstr "" +msgstr "Lebar" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp @@ -627,21 +598,19 @@ msgstr "" #: scene/resources/font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp msgid "Height" -msgstr "" +msgstr "Tinggi" #: core/project_settings.cpp msgid "Always On Top" -msgstr "" +msgstr "Sentiasa Di Atas" #: core/project_settings.cpp -#, fuzzy msgid "Test Width" -msgstr "Kiri Lebar" +msgstr "Uji Lebar" #: core/project_settings.cpp -#, fuzzy msgid "Test Height" -msgstr "Menguji" +msgstr "Uji Tinggi" #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp @@ -649,9 +618,8 @@ msgid "Audio" msgstr "Audio" #: core/project_settings.cpp -#, fuzzy msgid "Default Bus Layout" -msgstr "Muatkan Susun Atur Bas lalai." +msgstr "Susun Atur Bas Lalai" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp @@ -662,96 +630,87 @@ msgstr "Editor" #: core/project_settings.cpp msgid "Main Run Args" -msgstr "" +msgstr "Jalan Utama Args" + +#: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Laluan Adegan:" #: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "Cari Dalam Sambungan Fail" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" - -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Kawalan Versi" +msgstr "Laluan Carian Templat Skrip" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Muatkan Automatik Semasa Permulaan" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Nama Plugin:" +msgid "Version Control Plugin Name" +msgstr "Kawalan Versi" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "Tambah Input" +msgstr "Input" #: core/project_settings.cpp msgid "UI Accept" -msgstr "" +msgstr "UI Terima" #: core/project_settings.cpp -#, fuzzy msgid "UI Select" -msgstr "Pilih" +msgstr "UI Pilih" #: core/project_settings.cpp -#, fuzzy msgid "UI Cancel" -msgstr "Batal" +msgstr "UI Batal" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Next" -msgstr "Laluan Fokus" +msgstr "Fokus UI Seterusnya" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Prev" -msgstr "Laluan Fokus" +msgstr "Fokus UI Sebelumnya" #: core/project_settings.cpp -#, fuzzy msgid "UI Left" -msgstr "Atas Kiri" +msgstr "UI Kiri" #: core/project_settings.cpp -#, fuzzy msgid "UI Right" -msgstr "Atas Kanan" +msgstr "UI Kanan" #: core/project_settings.cpp msgid "UI Up" -msgstr "" +msgstr "UI Atas" #: core/project_settings.cpp -#, fuzzy msgid "UI Down" -msgstr "Bawah" +msgstr "UI Bawah" #: core/project_settings.cpp -#, fuzzy msgid "UI Page Up" -msgstr "Halaman: " +msgstr "UI Halaman Atas" #: core/project_settings.cpp msgid "UI Page Down" -msgstr "" +msgstr "UI Halaman Bawah" #: core/project_settings.cpp msgid "UI Home" -msgstr "" +msgstr "UI Laman Utama" #: core/project_settings.cpp -#, fuzzy msgid "UI End" -msgstr "Pada Akhir" +msgstr "UI Akhir" #: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp #: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp @@ -761,9 +720,8 @@ msgstr "Pada Akhir" #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp -#, fuzzy msgid "Physics" -msgstr "Bingkai Fizik %" +msgstr "Fizik" #: core/project_settings.cpp editor/editor_settings.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -773,11 +731,11 @@ msgstr "Bingkai Fizik %" #: scene/3d/physics_body.cpp scene/resources/world.cpp #: servers/physics/space_sw.cpp servers/physics_server.cpp msgid "3D" -msgstr "" +msgstr "3D" #: core/project_settings.cpp msgid "Smooth Trimesh Collision" -msgstr "" +msgstr "Perlanggaran Trimesh Lancar" #: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -789,7 +747,7 @@ msgstr "" #: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Rendering" -msgstr "" +msgstr "Render" #: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp @@ -799,17 +757,17 @@ msgstr "" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "Kualiti" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" -msgstr "Penapis:" +msgstr "Penapis" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" -msgstr "" +msgstr "Tajamkan Intensiti" #: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp @@ -825,85 +783,81 @@ msgstr "Nyahpepijat" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp -#, fuzzy msgid "Settings" -msgstr "Menguji" +msgstr "Tetapan" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp msgid "Profiler" -msgstr "" +msgstr "Profiler" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "Buat Fungsi" +msgstr "Fungsi Maks" #: core/project_settings.cpp scene/3d/vehicle_body.cpp msgid "Compression" -msgstr "" +msgstr "Mampatan" #: core/project_settings.cpp msgid "Formats" -msgstr "" +msgstr "Format" #: core/project_settings.cpp msgid "Zstd" -msgstr "" +msgstr "Zstd" #: core/project_settings.cpp msgid "Long Distance Matching" -msgstr "" +msgstr "Padanan Jarak Jauh" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "Tahap Mampatan" #: core/project_settings.cpp msgid "Window Log Size" -msgstr "" +msgstr "Saiz Tetingkap Log" #: core/project_settings.cpp msgid "Zlib" -msgstr "" +msgstr "Zlib" #: core/project_settings.cpp msgid "Gzip" -msgstr "" +msgstr "Gzip" #: core/project_settings.cpp platform/android/export/export.cpp msgid "Android" -msgstr "" +msgstr "Android" #: core/project_settings.cpp msgid "Modules" -msgstr "" +msgstr "Modul" #: core/register_core_types.cpp msgid "TCP" -msgstr "" +msgstr "TCP" #: core/register_core_types.cpp -#, fuzzy msgid "Connect Timeout Seconds" -msgstr "Sambung ke Nod:" +msgstr "Sambungkan Masa Tamat Saat" #: core/register_core_types.cpp msgid "Packet Peer Stream" -msgstr "" +msgstr "Aliran Rakan Sebaya Paket" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" -msgstr "" +msgstr "Buffer Maksimum (Kuasa 2)" #: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp msgid "SSL" -msgstr "" +msgstr "SSL" #: core/register_core_types.cpp main/main.cpp -#, fuzzy msgid "Certificates" -msgstr "Bucu:" +msgstr "Sijil" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp @@ -912,9 +866,8 @@ msgid "Resource" msgstr "Sumber" #: core/resource.cpp -#, fuzzy msgid "Local To Scene" -msgstr "Tutup Adegan" +msgstr "Tempatan Ke Adegan" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp @@ -925,20 +878,19 @@ msgstr "Laluan" #: core/script_language.cpp msgid "Source Code" -msgstr "" +msgstr "Kod Sumber" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "Tempatan" #: core/translation.cpp -#, fuzzy msgid "Test" -msgstr "Menguji" +msgstr "Ujian" #: core/translation.cpp scene/resources/font.cpp msgid "Fallback" -msgstr "" +msgstr "Fallback" #: core/ustring.cpp scene/resources/segment_shape_2d.cpp msgid "B" @@ -974,17 +926,17 @@ msgstr "EiB" #: drivers/gles3/rasterizer_scene_gles3.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp msgid "Buffers" -msgstr "" +msgstr "Penampan" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Buffer Size (KB)" -msgstr "" +msgstr "Saiz Penampan Poligon Kanvas (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp msgid "Canvas Polygon Index Buffer Size (KB)" -msgstr "" +msgstr "Saiz Penampan Indeks Poligon Kanvas (KB)" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp @@ -996,56 +948,52 @@ msgstr "" #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/visual_server.cpp msgid "2D" -msgstr "" +msgstr "2D" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp -#, fuzzy msgid "Snapping" -msgstr "Snap Pintar" +msgstr "Snapping" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp -#, fuzzy msgid "Use GPU Pixel Snap" -msgstr "Gunakan Pixel Snap" +msgstr "Gunakan Snap Piksel GPU" #: drivers/gles2/rasterizer_scene_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Immediate Buffer Size (KB)" -msgstr "" +msgstr "Saiz Penampan Segera (KB)" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp -#, fuzzy msgid "Lightmapping" -msgstr "Bake Lightmap" +msgstr "Pemetaan cahaya" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Use Bicubic Sampling" -msgstr "" +msgstr "Gunakan Persampelan Bicubic" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Elements" -msgstr "" +msgstr "Elemen Boleh Render Maks" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Lights" -msgstr "" +msgstr "Lampu Boleh Render Maks" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Max Renderable Reflections" -msgstr "Pemilihan Pusat" +msgstr "Refleksi Maks Boleh Render" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "Lampu Maks Setiap Objek" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" -msgstr "" +msgstr "Scattering Subpermukaan" #: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp #: editor/import/resource_importer_texture.cpp @@ -1058,27 +1006,27 @@ msgstr "" #: scene/main/canvas_layer.cpp scene/resources/environment.cpp #: scene/resources/material.cpp scene/resources/particles_material.cpp msgid "Scale" -msgstr "" +msgstr "Skala" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Follow Surface" -msgstr "" +msgstr "Ikut Permukaan" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Weight Samples" -msgstr "" +msgstr "Sampel Berat" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Voxel Cone Tracing" -msgstr "" +msgstr "Pengesanan Kon Voxel" #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" -msgstr "" +msgstr "Kualiti Tinggi" #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Blend Shape Max Buffer Size (KB)" -msgstr "" +msgstr "Saiz Penampan Maks Bentuk Campuran (KB)" #. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror). #: editor/animation_bezier_editor.cpp @@ -1152,9 +1100,8 @@ msgstr "Anim Ubah Panggilan" #: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp #: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Frame" -msgstr "Bingkai %" +msgstr "Bingkai" #: editor/animation_track_editor.cpp editor/editor_profiler.cpp #: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp @@ -1165,65 +1112,58 @@ msgstr "Masa" #: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp #: platform/osx/export/export.cpp -#, fuzzy msgid "Location" -msgstr "Langkah Putaran:" +msgstr "Lokasi" #: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp #: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp -#, fuzzy msgid "Rotation" -msgstr "Langkah Putaran:" +msgstr "Putaran" #: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp msgid "Value" -msgstr "" +msgstr "Nilai" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Arg Count" -msgstr "Jumlah:" +msgstr "Kiraan Arg" #: editor/animation_track_editor.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp msgid "Args" -msgstr "" +msgstr "Args" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp #: modules/gltf/gltf_light.cpp modules/visual_script/visual_script_nodes.cpp #: scene/3d/physics_body.cpp scene/resources/visual_shader_nodes.cpp msgid "Type" -msgstr "" +msgstr "Jenis" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In Handle" -msgstr "Tetapkan Pemegang" +msgstr "Dalam Pemegang" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out Handle" -msgstr "Tetapkan Pemegang" +msgstr "Keluar Pemegang" #: editor/animation_track_editor.cpp #: editor/import/resource_importer_texture.cpp #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp msgid "Stream" -msgstr "" +msgstr "Aliran" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start Offset" -msgstr "Grid Offset:" +msgstr "Mulakan Offset" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End Offset" -msgstr "Grid Offset:" +msgstr "Tamat Offset" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/import/resource_importer_scene.cpp @@ -1237,7 +1177,7 @@ msgstr "Animasi" #: editor/animation_track_editor.cpp msgid "Easing" -msgstr "" +msgstr "Pelonggaran" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Time" @@ -1346,19 +1286,16 @@ msgid "Remove this track." msgstr "Keluarkan trek ini." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Masa (s): " +msgstr "Masa (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "Kedudukan Dok" +msgstr "Kedudukan:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "Langkah Putaran:" +msgstr "Putaran:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1372,45 +1309,39 @@ msgstr "Skala:" #: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Type:" -msgstr "" +msgstr "Jenis:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "Nama kumpulan tidak sah." +msgstr "(Tidak sah, jenis dijangka: %s)" #: editor/animation_track_editor.cpp msgid "Easing:" -msgstr "" +msgstr "Pelonggaran:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In-Handle:" -msgstr "Tetapkan Pemegang" +msgstr "Dalam-Pemegang:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out-Handle:" -msgstr "Tetapkan Pemegang" +msgstr "Keluar-Pemegang:" #: editor/animation_track_editor.cpp msgid "Stream:" -msgstr "" +msgstr "Aliran:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start (s):" -msgstr "Mula Semula (s):" +msgstr "Mula (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End (s):" -msgstr "Pudar Masuk (s):" +msgstr "Tamat (s):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Clip:" -msgstr "Set Peralihan ke:" +msgstr "Klip Animasi:" #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -1494,14 +1425,12 @@ msgstr "Keluarkan Trek Anim" #: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Editors" msgstr "Editor" #: editor/animation_track_editor.cpp editor/editor_settings.cpp -#, fuzzy msgid "Confirm Insert Track" -msgstr "Anim Masukkan Trek & Kunci" +msgstr "Sahkan Sisipkan Trek" #. TRANSLATORS: %s will be replaced by a phrase describing the target of track. #: editor/animation_track_editor.cpp @@ -1625,9 +1554,8 @@ msgid "Add Method Track Key" msgstr "Tambah Kunci Trek Kaedah" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "Kaedah tidak ditemui dalam objek: " +msgstr "Kaedah tidak ditemui dalam objek:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2240,8 +2168,8 @@ msgid "Open" msgstr "Buka" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Pemilik:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2544,7 +2472,7 @@ msgid "Bus Options" msgstr "Pilihan Bas" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Pendua" @@ -2803,6 +2731,24 @@ msgid "Choose" msgstr "Pilih" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakej berjaya dipasang!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Gagal:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Menyimpan Fail:" @@ -2815,6 +2761,31 @@ msgid "Packing" msgstr "Pembungkusan" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Simpan sebagai" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Tidak dapat mencipta folder." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Tidak dapat mengeksport fail projek" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Tidak dapat membuka fail untuk ditulis:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Simpan sebagai" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2935,11 +2906,31 @@ msgstr "Templat nyahpepijat tersuai tidak dijumpai." msgid "Custom release template not found." msgstr "Templat pelepasan tersuai tidak dijumpai." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Urus Templat-templat" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Fail templat tidak dijumpai:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Tidak dapat membuka fail templat eksport." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Pada eksport 32-bit PCK terbenam tidak boleh lebih besar daripada 4 GiB." @@ -3111,12 +3102,12 @@ msgstr "Buat Semasa" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp #: modules/fbx/editor_scene_importer_fbx.cpp msgid "Import" -msgstr "import" +msgstr "Import" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksport" @@ -4279,15 +4270,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Adegan" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Laluan Adegan:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4415,6 +4397,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kawalan Versi" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Namakan Semula" @@ -4443,6 +4429,10 @@ msgstr "Togol mod bebas gangguan." msgid "Add a new scene." msgstr "Tambah adegan baru." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Adegan" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Pergi ke adegan yang dibuka sebelum ini." @@ -5239,6 +5229,11 @@ msgstr "" "Sila tambah pratetap yang dapat dijalankan di menu Eksport atau tentukan " "pratetap yang ada sebagai yang dapat dijalankan." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projek" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Tulis logik anda dalam kaedah _run()." @@ -5514,7 +5509,9 @@ msgid "Draw Spaces" msgstr "Cabutan Panggilan:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6979,7 +6976,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Penapis:" @@ -7275,6 +7272,18 @@ msgid "Saving..." msgstr "Menyimpan..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10227,6 +10236,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11600,8 +11610,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Tukar ke %s" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12620,8 +12631,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14077,31 +14087,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14240,6 +14229,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Pengasas Projek" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16551,7 +16545,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Semua Pilihan" @@ -17158,7 +17152,6 @@ msgid "Use In Baked Light" msgstr "Bake Lightmap" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17188,6 +17181,19 @@ msgstr "Tengah" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigasi Yang Boleh Dilihat" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigasi Yang Boleh Dilihat" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18718,10 +18724,6 @@ msgid "Could not execute on device." msgstr "Tidak dapat mencipta folder." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18825,12 +18827,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Isyarat" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18846,6 +18852,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Tidak dapat memulakan subproses!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18874,7 +18885,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18885,20 +18896,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Tidak dapat mengeksport fail projek" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18910,7 +18920,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18925,7 +18935,8 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pakej tidak ditemui: %s" #: platform/android/export/export_plugin.cpp @@ -18934,15 +18945,13 @@ msgid "Creating APK..." msgstr "Menyambung..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Tidak dapat memasang ke peranti: %s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18953,7 +18962,8 @@ msgid "Adding files..." msgstr "Tapis Fail-fail..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Tidak dapat mengeksport fail projek" #: platform/android/export/export_plugin.cpp @@ -19194,6 +19204,17 @@ msgstr "Potong Nod" msgid "Custom BG Color" msgstr "Potong Nod" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Urus Templat-templat" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Templat pelepasan tersuai tidak dijumpai." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19215,22 +19236,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Tidak dapat mencipta folder." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "(Tidak sah, jenis dijangka: %s)" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Tidak dapat membaca fail:" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Kandungan:" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Tidak dapat membaca fail:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Versi:" @@ -19304,15 +19338,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Tidak dapat membaca shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Tidak dapat mencipta direktori server HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Ralat memulakan server HTTP:" #: platform/javascript/export/export.cpp @@ -19604,9 +19641,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Tidak dapat mengeksport fail projek" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Tidak dapat memulakan subproses!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Langkah Putaran:" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19622,18 +19678,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Tiada sub-sumber dijumpai." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Ralat semasa menyimpan fail: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Arah" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Tidak dapat memulakan subproses!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Mencipta Gambar Kecil" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Tidak dapat memasang ke peranti: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Nama tidak sah." #: platform/osx/export/export.cpp msgid "" @@ -19643,7 +19755,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19684,6 +19796,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projek" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19991,6 +20112,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Tidak dapat membuang fail sementara:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20037,6 +20163,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Tampal Animasi" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Argumen tidak sah untuk binaan '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nama tidak sah." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Tidak dapat membuang fail sementara:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20058,6 +20244,23 @@ msgid "Invalid product version:" msgstr "Nama kumpulan tidak sah." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Nama kumpulan tidak sah." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Tetingkap Baru" @@ -20074,6 +20277,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20194,7 +20401,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Contoh" @@ -21011,15 +21219,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Tengah Bawah" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Perjalanan" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22173,12 +22385,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24787,6 +24993,16 @@ msgid "3D Physics" msgstr "Bingkai Fizik %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigasi Yang Boleh Dilihat" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigasi Yang Boleh Dilihat" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26194,7 +26410,7 @@ msgstr "Peralihan: " msgid "Refraction" msgstr "Versi:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26275,8 +26491,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Skala:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Versi:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -26292,10 +26514,15 @@ msgid "Source Group Name" msgstr "Nama Skrip:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Kandungan:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26304,11 +26531,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Buka Terkini" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26321,6 +26553,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Muatkan Lalai" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26337,7 +26574,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26742,6 +26979,11 @@ msgid "Scenario" msgstr "Adegan" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigasi Yang Boleh Dilihat" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26759,6 +27001,26 @@ msgstr "Linear Kiri" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Lalai" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Lalai" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Menguji" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Edit Sambungan:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 2099d61e1c..e5b0dcc26f 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -222,9 +222,10 @@ msgid "Data" msgstr "Data" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Nettverk" @@ -376,6 +377,16 @@ msgstr "Melding Kø" msgid "Max Size (KB)" msgstr "Maks Størrelse (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Flytt Modus" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Slett Input" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -569,7 +580,8 @@ msgstr "Beskrivelse" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Kjør" @@ -658,6 +670,11 @@ msgid "Main Run Args" msgstr "Hovedkjøringsargumenter" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scene-Sti:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Søk I Filetternavn" @@ -665,18 +682,15 @@ msgstr "Søk I Filetternavn" msgid "Script Templates Search Path" msgstr "Skriptmaler Søkesti" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versjonskontroll" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Automatisk Lasting Ved Oppstart" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Navn PÃ¥ Programvareutvidelse" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Versjonskontroll" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -786,7 +800,8 @@ msgid "Quality" msgstr "Kvalitet" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filter" @@ -2259,8 +2274,8 @@ msgid "Open" msgstr "Ã…pne" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Eiere Av:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2578,7 +2593,7 @@ msgid "Bus Options" msgstr "Bus valg" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliser" @@ -2846,6 +2861,25 @@ msgid "Choose" msgstr "Velg" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Kopier Node-bane" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Vellykket Installering av Pakke!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Feilet:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Lagrer Fil:" @@ -2858,6 +2892,31 @@ msgid "Packing" msgstr "Pakking" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Lagre som" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Kunne ikke opprette mappe." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Kan ikke Ã¥pne fil for skriving:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Lagre som" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2982,11 +3041,33 @@ msgstr "Tilpasset feilsøkingsmal ble ikke funnet." msgid "Custom release template not found." msgstr "Fant ikke tilpasset utgivelsesmal." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "HÃ¥ndter Eksportmaler" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Fil eksisterer ikke." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Malfil ble ikke funnet:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "HÃ¥ndter Eksportmaler" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Fyll" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3168,9 +3249,9 @@ msgid "Import" msgstr "Importer" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksporter" @@ -4360,15 +4441,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scene" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scene-Sti:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4498,6 +4570,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versjonskontroll" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Gi nytt navn" @@ -4526,6 +4602,10 @@ msgstr "Vis/skjul distraksjonsfri modus." msgid "Add a new scene." msgstr "Legg til ny scene." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scene" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "GÃ¥ til forrige Ã¥pne scene." @@ -5327,6 +5407,11 @@ msgstr "" "Ingen kjørbar eksport-preset funnet for denne plattformen.\n" "Vennligst legg til en kjørbar preset i eksportmenyen." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Prosjekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Skriv logikken din i _run() metoden." @@ -5608,7 +5693,9 @@ msgid "Draw Spaces" msgstr "Ring" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigasjon" @@ -7137,7 +7224,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Lim inn Noder" @@ -7433,6 +7520,18 @@ msgid "Saving..." msgstr "Lagrer..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10547,6 +10646,7 @@ msgid "Points" msgstr "Poeng" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Rediger Poly" @@ -11987,7 +12087,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Konverter til store versaler" #: editor/plugins/sprite_editor_plugin.cpp @@ -13051,8 +13151,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Region" @@ -14585,32 +14684,11 @@ msgid "Delete preset '%s'?" msgstr "Slett forhÃ¥ndsinnstillingen «%s»?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "Eksporter" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Eksporter Prosjekt" @@ -14753,6 +14831,11 @@ msgstr "" #: editor/project_export.cpp #, fuzzy +msgid "Project Export" +msgstr "Prosjektgrunnleggere" + +#: editor/project_export.cpp +#, fuzzy msgid "Manage Export Templates" msgstr "HÃ¥ndter Eksportmaler" @@ -17170,7 +17253,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Rediger Poly" @@ -17793,7 +17876,6 @@ msgid "Use In Baked Light" msgstr "Lys" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17823,6 +17905,19 @@ msgstr "I midten" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigasjon" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigasjon Modus" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19419,10 +19514,6 @@ msgid "Could not execute on device." msgstr "Kunne ikke opprette mappe." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19527,12 +19618,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19552,6 +19647,11 @@ msgid "Could not find keystore, unable to export." msgstr "Kunne ikke opprette mappe." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Kunne ikke starta subprosess!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19582,7 +19682,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19593,19 +19693,18 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Klarte ikke eksportere prosjektfiler til gradle-prosjekt\n" #: platform/android/export/export_plugin.cpp @@ -19619,7 +19718,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19635,7 +19734,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animasjonsverktøy" #: platform/android/export/export_plugin.cpp @@ -19645,15 +19744,12 @@ msgstr "Lager konturer..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "Kunne ikke opprette mappe." #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19665,7 +19761,7 @@ msgstr "Legger til %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Kunne ikke opprette mappe." #: platform/android/export/export_plugin.cpp @@ -19908,6 +20004,17 @@ msgstr "Klipp ut Noder" msgid "Custom BG Color" msgstr "Klipp ut Noder" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "HÃ¥ndter Eksportmaler" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Fant ikke tilpasset utgivelsesmal." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19931,25 +20038,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "Kunne ikke opprette mappe." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "HÃ¥ndter Eksportmaler" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "Kunne ikke opprette mappe." +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Sett Handle" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Kunne ikke opprette mappe." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Nummereringer:" @@ -20025,17 +20141,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Kunne ikke opprette mappe." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Kunne ikke opprette mappe." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Feil ved lagring av TextFile:" #: platform/javascript/export/export.cpp @@ -20334,9 +20450,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Kunne ikke starta subprosess!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalisering" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20352,21 +20487,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ikke funnet!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Feil ved lagring av filen: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Retninger" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Kunne ikke starta subprosess!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Lager Thumbnail" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Kunne ikke opprette mappe." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "HÃ¥ndter Eksportmaler" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20374,7 +20564,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20416,6 +20606,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Prosjekt" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Klarte ikke eksportere prosjektfiler til gradle-prosjekt\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Navn er ikke en gyldig identifikator:" @@ -20732,6 +20932,11 @@ msgid "Debug Algorithm" msgstr "Feilsøkingsprogram" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Kan ikke fjerne:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20779,6 +20984,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Tilfeldig Rotasjon:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Kunne ikke opprette mappe." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Navn er ikke en gyldig identifikator:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ugyldig navn." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Kan ikke fjerne:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20800,6 +21069,23 @@ msgid "Invalid product version:" msgstr "Prosjektnavn:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "MÃ¥ ha en gyldig filutvidelse." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nytt vindu" @@ -20816,6 +21102,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20941,7 +21231,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instans" @@ -21778,15 +22069,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Plasser Utvalg I Midten" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Reise" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22971,12 +23266,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25632,6 +25921,16 @@ msgid "3D Physics" msgstr "Fysikk" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigasjon" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigasjon" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27050,7 +27349,7 @@ msgstr "Overgang: " msgid "Refraction" msgstr "Nummereringer:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27132,7 +27431,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skalerer: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Rediger Variabel:" #: scene/resources/navigation_mesh.cpp @@ -27149,10 +27453,15 @@ msgid "Source Group Name" msgstr "Kilde" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Innhold:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27161,11 +27470,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Region" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27178,6 +27492,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Last Standard" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -27194,7 +27513,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27606,6 +27925,11 @@ msgid "Scenario" msgstr "Scene" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigasjon" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27623,6 +27947,26 @@ msgstr "Venstrelineær" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Standard" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "ForhÃ¥ndsvis" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Tester" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Tilkoblingsfeil" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 4daa1292b9..6d43002a17 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -280,9 +280,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Netwerk Profiler" @@ -445,6 +446,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Verplaatsingsmodus" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Invoer verwijderen" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -646,7 +657,8 @@ msgstr "Beschrijving" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Uitvoeren" @@ -737,6 +749,11 @@ msgid "Main Run Args" msgstr "Startscène argumenten:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scènepad:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -744,19 +761,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versiebeheer" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Versiebeheersysteem" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Pluginnaam:" +msgid "Version Control Plugin Name" +msgstr "Versiebeheer" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -876,7 +889,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filters:" @@ -2323,8 +2337,8 @@ msgid "Open" msgstr "Openen" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Eigenaren van:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2630,7 +2644,7 @@ msgid "Bus Options" msgstr "Audiobusopties" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dupliceren" @@ -2887,6 +2901,25 @@ msgid "Choose" msgstr "Kies" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Knooppad kopiëren" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakket succesvol geïnstalleerd!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Mislukt:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Bestand Opslaan:" @@ -2899,6 +2932,31 @@ msgid "Packing" msgstr "Inpakken" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Opslaan Als" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Map kon niet gemaakt worden." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Kon bestand niet schrijven:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Kan bestand niet openen om te schrijven:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Opslaan Als" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -3018,11 +3076,33 @@ msgstr "Aangepast debug pakket niet gevonden." msgid "Custom release template not found." msgstr "Aangepast release pakket niet gevonden." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Sjablonen beheren" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Het gegeven exportpad bestaat niet:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Template bestand niet gevonden:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ongeldige export template:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Vulling" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Bij 32-bit export mag de ingebouwde PCK niet groter zijn dan 4 GiB." @@ -3200,9 +3280,9 @@ msgid "Import" msgstr "Importeren" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exporteren" @@ -4368,15 +4448,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scène" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scènepad:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4505,6 +4576,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versiebeheer" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Naam wijzigen" @@ -4533,6 +4608,10 @@ msgstr "Afleidingsvrijemodus omschakelen." msgid "Add a new scene." msgstr "Nieuwe scène toevoegen." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scène" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ga naar de eerder geopende scène." @@ -5319,6 +5398,11 @@ msgstr "" "Geen uitvoerbare exporteer preset gevonden voor dit platform.\n" "Voeg een uitvoerbare preset toe in het exportmenu." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Project" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Schrijf je logica in de _run() methode." @@ -5602,7 +5686,9 @@ msgid "Draw Spaces" msgstr "Teken Aanroepingen" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navigatie" @@ -7122,7 +7208,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filters:" @@ -7420,6 +7506,18 @@ msgid "Saving..." msgstr "Opslaan..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10427,6 +10525,7 @@ msgid "Points" msgstr "Punten" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Polygonen" @@ -11847,7 +11946,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Ongeldige geometrie, kan niet worden vervangen door Mesh." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Converteren naar Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12899,8 +12999,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Selecteer de vorige shape, subtegel of Tegel." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Gebied" @@ -14453,36 +14552,10 @@ msgid "Delete preset '%s'?" msgstr "Verwijder voorinstelling '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Exporteren van project voor platform '%s' is mislukt.\n" -"Exportsjablonen zijn mogelijk niet aanwezig of ongeldig." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Exporteren van project voor platform '%s' is mislukt.\n" -"Dit probleem wordt mogelijk veroorzaakt door een foutieve instelling in de " -"vooraf ingestelde exportinstellingen of uw eigen exportinstellingen." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exporteer alles" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Het gegeven exportpad bestaat niet:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Exportsjablonen voor dit platform zijn niet aanwezig of corrupt:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Export Pad" @@ -14630,6 +14703,11 @@ msgid "Export templates for this platform are missing:" msgstr "Vermiste Exportsjablonen voor dit platform:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projectoprichters" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Beheer Export Templates" @@ -17052,7 +17130,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Polygonen" @@ -17678,7 +17756,6 @@ msgid "Use In Baked Light" msgstr "Bak Lichtmappen" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17708,6 +17785,19 @@ msgstr "Center" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navigatie" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Navigatiemodus" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Volgend Blad" @@ -19283,10 +19373,6 @@ msgid "Could not execute on device." msgstr "Map kon niet gemaakt worden." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Het hulpmiddel 'apksigner' kon niet gevonden worden." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19401,12 +19487,16 @@ msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat." msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signaal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19426,6 +19516,11 @@ msgid "Could not find keystore, unable to export." msgstr "Kon template niet openen voor export:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Kon het subproces niet opstarten!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19457,7 +19552,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Bestandsnaam niet toegestaan! Android APK vereist een *.apk extensie." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19469,10 +19564,9 @@ msgstr "" "Installeer alstublieft opnieuw vanuit het 'Project' menu." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Android buildversie onverenigbaar:\n" @@ -19482,12 +19576,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "Kan project.godot niet bewerken in projectpad." #: platform/android/export/export_plugin.cpp @@ -19500,8 +19594,9 @@ msgid "Building Android Project (gradle)" msgstr "Bouwen van Android Project (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Bouwen van Androidproject mislukt, bekijk de foutmelding in de uitvoer.\n" @@ -19521,7 +19616,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animatie niet gevonden: '%s'" #: platform/android/export/export_plugin.cpp @@ -19531,15 +19626,12 @@ msgstr "Contouren aan het creëeren..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "Kon template niet openen voor export:" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19551,7 +19643,7 @@ msgstr "%s aan het toevoegen..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Kon bestand niet schrijven:" #: platform/android/export/export_plugin.cpp @@ -19793,6 +19885,17 @@ msgstr "Knopen knippen" msgid "Custom BG Color" msgstr "Knopen knippen" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Sjablonen beheren" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Aangepast release pakket niet gevonden." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19816,23 +19919,35 @@ msgstr "" "Voer de geëxporteerde HTML uit in de standaard browser van het systeem." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Kon template niet openen voor export:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Ongeldige export template:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Kon bestand niet schrijven:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Stel Marge In" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Kon bestand niet schrijven:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Afzondering:" @@ -19908,17 +20023,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Kon de custom HTML shell niet lezen:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Map kon niet gemaakt worden." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Fout bij het opslaan van de scène." #: platform/javascript/export/export.cpp @@ -20219,9 +20334,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Kon bestand niet schrijven:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Kon het subproces niet opstarten!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalisatie" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20237,21 +20371,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Niet gevonden!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Fout bij het opslaan van bestand: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Richtingen" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Kon het subproces niet opstarten!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Thumbnail Aan Het Maken" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Kon template niet openen voor export:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ongeldige export template:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20259,7 +20448,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20301,6 +20490,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Project" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Kan project.godot niet bewerken in projectpad." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ongeldige identifier:" @@ -20620,6 +20819,11 @@ msgid "Debug Algorithm" msgstr "Debugger" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Kan het tijdelijke bestand niet verwijderen:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20667,6 +20871,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Willekeurige Rotatie:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Kon template niet openen voor export:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Kon template niet openen voor export:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Kon template niet openen voor export:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Kon template niet openen voor export:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ongeldige identifier:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ongeldige naam." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Kan het tijdelijke bestand niet verwijderen:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20688,6 +20956,23 @@ msgid "Invalid product version:" msgstr "Ongeldig product GUID." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Ongeldige extentie." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nieuw Venster" @@ -20704,6 +20989,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20831,7 +21120,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Selecteerafstand:" @@ -21703,17 +21993,19 @@ msgstr "" "bron in de geschikte eigenschap in of teken een polygoon." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance moet een (klein)kind zijn van een Navigation2D-" -"knoop om navigatiegegevens door te geven." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Center onder" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Verplaats" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22947,14 +23239,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "De NavigationAgent2D kan alleen worden gebruikt als een Node2D Node." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance moet een (klein)kind zijn van een Navigation-knoop om " -"navigatiegevens door te geven." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25676,6 +25960,16 @@ msgid "3D Physics" msgstr "Physics Frame %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navigatie" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navigatie" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -27103,7 +27397,7 @@ msgstr "Overgang: " msgid "Refraction" msgstr "Afzondering:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -27188,7 +27482,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Schaling: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Zet variabele type" #: scene/resources/navigation_mesh.cpp @@ -27206,10 +27505,15 @@ msgid "Source Group Name" msgstr "Bron" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Startscène argumenten:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27219,11 +27523,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Gebied" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Vanuit scène samenvoegen" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27237,6 +27546,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Laad standaard" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Selecteerafstand:" @@ -27254,7 +27568,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27669,6 +27983,11 @@ msgid "Scenario" msgstr "Scène" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navigatie" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27686,6 +28005,26 @@ msgstr "Links Lineair" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Standaard" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Voorbeeld bijwerken" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testen" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Verbinding bewerken:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 67f94391e2..5960c6933e 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -260,9 +260,10 @@ msgid "Data" msgstr "Dane" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Sieć" @@ -412,6 +413,16 @@ msgstr "Kolejka komunikatów" msgid "Max Size (KB)" msgstr "Maks. rozmiar (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Tryb przesuwania" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "UsuÅ„ WejÅ›cie" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -591,7 +602,8 @@ msgstr "Opis" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Uruchom" @@ -678,6 +690,11 @@ msgid "Main Run Args" msgstr "Główne argumenty włączania" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Åšcieżka sceny:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Wyszukiwanie w rozszerzeniach plików" @@ -685,18 +702,15 @@ msgstr "Wyszukiwanie w rozszerzeniach plików" msgid "Script Templates Search Path" msgstr "Åšcieżka wyszukiwania szablonów skryptów" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Kontrola wersji" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Automatyczne Å‚adowanie podczas uruchamiania" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nazwa wtyczki" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Kontrola wersji" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -804,7 +818,8 @@ msgid "Quality" msgstr "Jakość" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtry" @@ -2229,8 +2244,8 @@ msgid "Open" msgstr "Otwórz" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "WÅ‚aÅ›ciciele:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2532,7 +2547,7 @@ msgid "Bus Options" msgstr "Opcje magistrali" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplikuj" @@ -2789,6 +2804,25 @@ msgid "Choose" msgstr "Wybierz" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Skopiuj Å›cieżkÄ™ wÄ™zÅ‚a" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pakiet zainstalowano poprawnie!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Nie powiodÅ‚o siÄ™:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Zapisywanie pliku:" @@ -2801,6 +2835,31 @@ msgid "Packing" msgstr "Pakowanie" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Zapisz jako" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nie można utworzyć katalogu." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Nie udaÅ‚o siÄ™ eksportować plików projektu" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nie można otworzyć pliku do zapisu:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Zapisz jako" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2923,11 +2982,33 @@ msgstr "Nie znaleziono wÅ‚asnego szablonu debugowania." msgid "Custom release template not found." msgstr "Nie znaleziono wÅ‚asnego szablonu wydania." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "ZarzÄ…dzaj szablonami" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Podana Å›cieżka eksportu nie istnieje:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Nie znaleziono pliku szablonu:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Szablon eksportu nieprawidÅ‚owy:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Wyrównanie" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "W eksportach 32-bitowych dołączony PCK nie może być wiÄ™kszy niż 4 GiB." @@ -3098,9 +3179,9 @@ msgid "Import" msgstr "Zaimportuj" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksportuj" @@ -4261,15 +4342,6 @@ msgstr "" "Nie można zapisać do pliku '%s', plik jest w użyciu, zablokowany lub nie ma " "wystarczajÄ…cych uprawnieÅ„." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scena" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Åšcieżka sceny:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4401,6 +4473,10 @@ msgid "Default Color Picker Mode" msgstr "DomyÅ›lny tryb pipety" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kontrola wersji" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Użytkownik" @@ -4428,6 +4504,10 @@ msgstr "Tryb bez rozproszeÅ„." msgid "Add a new scene." msgstr "Dodaj nowÄ… scenÄ™." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Wróć do poprzednio otwartej sceny." @@ -5219,6 +5299,11 @@ msgstr "" "Dodaj uruchamialny profil w menu eksportu lub zdefiniuj istniejÄ…cy profil " "jako uruchamialny." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Wpisz swojÄ… logikÄ™ w metodzie _run()." @@ -5503,7 +5588,9 @@ msgid "Draw Spaces" msgstr "WywoÅ‚ania rysowania:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Nawigacja" @@ -7007,7 +7094,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtry:" @@ -7306,6 +7393,18 @@ msgid "Saving..." msgstr "Zapisywanie..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10298,6 +10397,7 @@ msgid "Points" msgstr "Punkty" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "WielokÄ…t" @@ -11681,7 +11781,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "NieprawidÅ‚owa geometria, nie można zastÄ…pić przez siatkÄ™." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "ZamieÅ„ na Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12679,8 +12780,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Wybierz poprzedni ksztaÅ‚t, podkafelek lub Kafelek." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Obszar" @@ -14203,36 +14303,10 @@ msgid "Delete preset '%s'?" msgstr "Usunąć profil \"%s\"?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Nie udaÅ‚o siÄ™ wyeksportować projektu dla platformy \"%s\".\n" -"Brak szablonów eksportu lub sÄ… nieprawidÅ‚owe." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Nie udaÅ‚o siÄ™ wyeksportować projektu dla platformy \"%s\".\n" -"Może to być przez problem z konfiguracjÄ… w profilu eksportu lub twoich " -"ustawieniach eksportu." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Eksportowanie wszystkiego" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Podana Å›cieżka eksportu nie istnieje:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Brakuje szablonów eksportu dla tej platformy lub sÄ… uszkodzone:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Åšcieżka eksportu" @@ -14378,6 +14452,11 @@ msgid "Export templates for this platform are missing:" msgstr "Brakuje eksportu szablonów dla tej platformy:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ZaÅ‚ożyciele projektu" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "ZarzÄ…dzaj szablonami eksportu" @@ -16803,7 +16882,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "WielokÄ…t" @@ -17428,7 +17507,6 @@ msgid "Use In Baked Light" msgstr "Stwórz Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17458,6 +17536,19 @@ msgstr "WyÅ›rodkowane" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Nawigacja" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Tryb nawigacji" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "NastÄ™pna pÅ‚aszczyzna" @@ -18990,10 +19081,6 @@ msgid "Could not execute on device." msgstr "Nie udaÅ‚o siÄ™ uruchomić na urzÄ…dzeniu." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Nie udaÅ‚o siÄ™ znaleźć narzÄ™dzia \"apksigner\"." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19114,12 +19201,17 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "Wersja \"Target Sdk\" musi być wiÄ™ksza lub równa wersji \"Min Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "DMG podpisywania kodu" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "\"apksigner\" nie zostaÅ‚ znaleziony.\n" "Sprawdź, czy komenda jest dostÄ™pna w folderze narzÄ™dzi SDK Androida.\n" @@ -19138,6 +19230,11 @@ msgid "Could not find keystore, unable to export." msgstr "Nie udaÅ‚o siÄ™ znaleźć keystore, nie można eksportować." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nie można byÅ‚o uruchomić podprocesu!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "\"apksigner\" zwróciÅ‚ błąd #%d" @@ -19167,7 +19264,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "NieprawidÅ‚owa nazwa pliku! APK Androida wymaga rozszerzenia *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "NieobsÅ‚ugiwany format eksportu!\n" #: platform/android/export/export_plugin.cpp @@ -19179,10 +19277,9 @@ msgstr "" "informacja o wersji. Zainstaluj ponownie z menu \"Projekt\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Niezgodna wersja buildu Androida:\n" @@ -19191,14 +19288,16 @@ msgstr "" "Zainstaluj ponownie szablon z menu \"Projekt\"." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Nie udaÅ‚o siÄ™ nadpisać plików \"res://android/build/res/*.xml\" nazwÄ… " "projektu" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Nie udaÅ‚o siÄ™ eksportować plików projektu do projektu gradle\n" #: platform/android/export/export_plugin.cpp @@ -19210,8 +19309,9 @@ msgid "Building Android Project (gradle)" msgstr "Budowanie projektu Androida (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Budowanie projektu Androida siÄ™ nie powiodÅ‚o, sprawdź wyjÅ›cie błędu.\n" @@ -19231,7 +19331,8 @@ msgstr "" "projektu gradle po informacje." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pakiet nie znaleziony: %s" #: platform/android/export/export_plugin.cpp @@ -19239,17 +19340,16 @@ msgid "Creating APK..." msgstr "Tworzenie APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Nie udaÅ‚o siÄ™ znaleźć szablonu APK do eksportu:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19262,7 +19362,8 @@ msgid "Adding files..." msgstr "Dodawanie plików..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Nie udaÅ‚o siÄ™ eksportować plików projektu" #: platform/android/export/export_plugin.cpp @@ -19505,6 +19606,17 @@ msgstr "NiestandardowyWÄ™zeÅ‚" msgid "Custom BG Color" msgstr "NiestandardowyWÄ™zeÅ‚" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "ZarzÄ…dzaj szablonami" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Nie znaleziono wÅ‚asnego szablonu wydania." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID nie podany - nie można skonfigurować projektu." @@ -19526,22 +19638,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Uruchom wyeksportowany dokument HTML w domyÅ›lnej przeglÄ…darce." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Nie można otworzyć szablonu dla eksportu:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Szablon eksportu nieprawidÅ‚owy:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Nie można zapisać pliku:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Ustaw margines" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Nie udaÅ‚o siÄ™ odczytać pliku:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Separacja:" @@ -19616,15 +19741,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Nie udaÅ‚o siÄ™ odczytać powÅ‚oki HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Nie udaÅ‚o siÄ™ utworzyć folderu serwera HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Błąd uruchamiania serwera HTTP:" #: platform/javascript/export/export.cpp @@ -19917,9 +20045,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ eksportować plików projektu" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nie można byÅ‚o uruchomić podprocesu!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalizacja" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Uwaga: Proces poÅ›wiadczania trwa zazwyczaj mniej niż godzinÄ™. Gdy proces " "zostanie zakoÅ„czony, otrzymasz wiadomość e-mail." @@ -19941,18 +20089,82 @@ msgstr "" "eksportowanej aplikacji (opcjonalnie):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Timestamping nie jest kompatybilny z podpisem ad-hoc i bÄ™dzie wyłączony!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Hardened Runtime nie jest kompatybilny z podpisem ad-hoc i zostanie " +"wyłączony!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Nie znaleziono tożsamoÅ›ci." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Błąd zapisywania pliku: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"Relatywne linki symboliczne nie sÄ… obsÅ‚ugiwane na tym systemie operacyjnym, " +"wyeksportowany projekt może być uszkodzony!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Kierunki" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nie można byÅ‚o uruchomić podprocesu!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Tworzenie pakietu aplikacji" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Nie udaÅ‚o siÄ™ znaleźć szablonu aplikacji do eksportu:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Szablon eksportu nieprawidÅ‚owy:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19961,8 +20173,9 @@ msgstr "" "wyeksportowany projekt może być uszkodzony!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Nie znaleziono żądanego szablonu pliku binarnego '%s'. Być może brakuje go w " @@ -20009,6 +20222,16 @@ msgid "Sending archive for notarization" msgstr "PrzesyÅ‚anie archiwum w celu poÅ›wiadczenia" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ eksportować plików projektu do projektu gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "NieprawidÅ‚owy identyfikator paczki:" @@ -20357,6 +20580,11 @@ msgid "Debug Algorithm" msgstr "Debugger" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nie można usunąć pliku tymczasowego:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20404,6 +20632,76 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Obrót losowy:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ znaleźć keystore, nie można eksportować." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ znaleźć keystore, nie można eksportować." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"NarzÄ™dzie rcedit musi być skonfigurowane w Ustawieniach edytora (Eksport > " +"Windows > Rcedit), aby zmienić ikonÄ™ lub dane informacji o aplikacji." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ znaleźć keystore, nie można eksportować." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Nie udaÅ‚o siÄ™ znaleźć keystore, nie można eksportować." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Niepoprawny identyfikator:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "NiewÅ‚aÅ›ciwa nazwa." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"NarzÄ™dzie rcedit musi być skonfigurowane w Ustawieniach edytora (Eksport > " +"Windows > Rcedit), aby zmienić ikonÄ™ lub dane informacji o aplikacji." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nie można usunąć pliku tymczasowego:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20424,6 +20722,23 @@ msgid "Invalid product version:" msgstr "NieprawidÅ‚owa wersja produktu:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Niepoprawny plik wykonywalny." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nowe okno" @@ -20440,6 +20755,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20567,7 +20886,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Wybierz odlegÅ‚ość:" @@ -21448,17 +21768,19 @@ msgstr "" "zadziaÅ‚aÅ‚." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance musi być dzieckiem lub wnukiem wÄ™zÅ‚a Navigation2D. " -"UdostÄ™pnia on potrzebne dane nawigacyjne." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "WyÅ›rodkowane na dole" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Przejdź" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22705,14 +23027,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent może być stosowane wyłącznie pod wÄ™zÅ‚em przestrzennym." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance musi być dzieckiem lub wnukiem wÄ™zÅ‚a typu Navigation. " -"UdostÄ™pnia on tylko dane nawigacyjne." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25464,6 +25778,16 @@ msgid "3D Physics" msgstr "Fizyka" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Nawigacja" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Nawigacja" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26894,7 +27218,7 @@ msgstr "PrzejÅ›cie: " msgid "Refraction" msgstr "Separacja:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26979,7 +27303,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skalowanie: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Ustaw typ zmiennej" #: scene/resources/navigation_mesh.cpp @@ -26997,10 +27326,15 @@ msgid "Source Group Name" msgstr "ŹródÅ‚o" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumenty głównej sceny:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27010,11 +27344,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Obszar" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Połącz ze sceny" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27028,6 +27367,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Pokaż domyÅ›lne" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Wybierz odlegÅ‚ość:" @@ -27045,7 +27389,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27463,6 +27807,11 @@ msgid "Scenario" msgstr "Scena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Nawigacja" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27480,6 +27829,26 @@ msgstr "Lewe liniowe" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "DomyÅ›lny" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "DomyÅ›lny podglÄ…d" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testowanie" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Edytuj połączenie:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index b9eef8716d..139d252495 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -217,9 +217,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Slit th' Node" @@ -378,6 +379,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Slit th' Node" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -566,7 +576,8 @@ msgstr "Yar, Blow th' Selected Down!" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -654,24 +665,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -780,7 +790,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Paste yer Node" @@ -2217,7 +2228,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2513,7 +2524,7 @@ msgid "Bus Options" msgstr "Yar, Blow th' Selected Down!" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2773,6 +2784,23 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Forge yer Node!" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2788,6 +2816,27 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Paste yer Node" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2894,8 +2943,27 @@ msgstr "Yer fancy debug package be nowhere." msgid "Custom release template not found." msgstr "Yer fancy release package be nowhere." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Discharge ye' Variable" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Yer index property name be thrown overboard!" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3077,9 +3145,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4188,14 +4256,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4315,6 +4375,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Rename Function" @@ -4343,6 +4407,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5094,6 +5162,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Yer functions:" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5358,7 +5431,9 @@ msgid "Draw Spaces" msgstr "Call" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Ye be fixin' Signal:" @@ -6820,7 +6895,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Paste yer Node" @@ -7104,6 +7179,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10084,6 +10171,7 @@ msgid "Points" msgstr "Discharge ye' Signal" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Ye be fixin' Signal:" @@ -11492,8 +11580,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Discharge ye' Function" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12517,8 +12606,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14019,31 +14107,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14180,6 +14247,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Yer functions:" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16513,7 +16585,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Ye be fixin' Signal:" @@ -17107,7 +17179,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17137,6 +17208,19 @@ msgstr "Slit th' Node" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Ye be fixin' Signal:" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Ye be fixin' Signal:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18688,10 +18772,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18796,12 +18876,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Yer signals:" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18817,6 +18901,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18845,7 +18933,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18856,19 +18944,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18881,7 +18967,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18896,7 +18982,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18904,15 +18990,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18923,8 +19006,9 @@ msgid "Adding files..." msgstr "Find ye Node Type" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "" +#, fuzzy +msgid "Could not export project files." +msgstr "Slit th' Node" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -19162,6 +19246,17 @@ msgstr "Slit th' Node" msgid "Custom BG Color" msgstr "Slit th' Node" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Discharge ye' Variable" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Yer fancy release package be nowhere." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19184,24 +19279,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "Yer index property name be thrown overboard!" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Slit th' Node" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Rename Variable" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Slit th' Node" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Yer functions:" @@ -19276,16 +19381,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." +msgstr "Slit th' Node" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "Error loading yer Calligraphy Pen." #: platform/javascript/export/export.cpp msgid "Web" @@ -19572,9 +19679,27 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Slit th' Node" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Ye be fixin' Signal:" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19590,18 +19715,72 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Error loading yer Calligraphy Pen." + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Yer functions:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Yer index property name be thrown overboard!" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19609,7 +19788,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19651,6 +19830,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Yer functions:" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Yer name's got no valid identifier:" @@ -19962,6 +20150,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20008,6 +20200,65 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Slit th' Node" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Yer name's got no valid identifier:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Yer Calligraphy be wrongly sized." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20029,6 +20280,23 @@ msgid "Invalid product version:" msgstr "Yer product GUID be evil." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Yer Calligraphy be wrongly sized." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20044,6 +20312,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20158,7 +20430,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20953,13 +21226,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Slit th' Node" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22079,12 +22355,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24601,6 +24871,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Ye be fixin' Signal:" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Ye be fixin' Signal:" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25969,7 +26249,7 @@ msgstr "Add Function" msgid "Refraction" msgstr "Yer functions:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26047,7 +26327,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Slit th' Node" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Edit yer Variable:" #: scene/resources/navigation_mesh.cpp @@ -26063,7 +26348,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26075,11 +26364,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Yer functions:" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26092,6 +26386,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Change" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26108,7 +26407,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26504,6 +26803,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Ye be fixin' Signal:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26520,6 +26824,26 @@ msgstr "Yar, Blow th' Selected Down!" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "th' Base Type:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "th' Base Type:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "th' Base Type:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Slit th' Node" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/pt.po b/editor/translations/pt.po index 8e8ce76454..c0af7140fc 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -22,13 +22,14 @@ # Danilo Conceição Rosa <danilorosa@protonmail.com>, 2022. # Kaycke <kaycke@ymail.com>, 2022. # Renu <ifpilucas@gmail.com>, 2022. +# El_ExpertPlayer <xpertnathan37@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-04-25 15:02+0000\n" -"Last-Translator: Kaycke <kaycke@ymail.com>\n" +"PO-Revision-Date: 2022-06-13 03:39+0000\n" +"Last-Translator: El_ExpertPlayer <xpertnathan37@gmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot/pt/>\n" "Language: pt\n" @@ -36,7 +37,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.12.1-dev\n" +"X-Generator: Weblate 4.13-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -71,9 +72,8 @@ msgid "Low Processor Usage Mode" msgstr "Modo de Baixa Utilização do Processador" #: core/bind/core_bind.cpp -#, fuzzy msgid "Low Processor Usage Mode Sleep (µsec)" -msgstr "Modo adormecer com Baixa Utilização do Processador (µsec)" +msgstr "Suspensão do Modo de Baixa Utilização do Processador (µsec)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp msgid "Keep Screen On" @@ -142,9 +142,8 @@ msgid "Size" msgstr "Tamanho" #: core/bind/core_bind.cpp -#, fuzzy msgid "Endian Swap" -msgstr "Troca endiana" +msgstr "Troca Endiana" #: core/bind/core_bind.cpp msgid "Editor Hint" @@ -167,9 +166,8 @@ msgid "Time Scale" msgstr "Escala de Tempo" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Physics Jitter Fix" -msgstr "Frame de FÃsica %" +msgstr "Arranjar Tremores nas Fisicas" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" @@ -180,9 +178,8 @@ msgid "Error String" msgstr "Erro String" #: core/bind/core_bind.cpp -#, fuzzy msgid "Error Line" -msgstr "Erro Ao Gravar" +msgstr "Erro na linha" #: core/bind/core_bind.cpp msgid "Result" @@ -204,14 +201,12 @@ msgid "Limits" msgstr "Limites" #: core/command_queue_mt.cpp -#, fuzzy msgid "Command Queue" -msgstr "Comando: Rodar" +msgstr "Fila de Comando" #: core/command_queue_mt.cpp -#, fuzzy msgid "Multithreading Queue Size (KB)" -msgstr "Tamanho da Fila Multilinha (KB)" +msgstr "Tamanho da Fila Multithreading (KB)" #: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp #: modules/visual_script/visual_script_func_nodes.cpp @@ -222,17 +217,16 @@ msgstr "Função" #: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp -#, fuzzy msgid "Data" -msgstr "Com Dados" +msgstr "Dados" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h -#, fuzzy +#: scene/gui/file_dialog.cpp msgid "Network" -msgstr "Analisador de Rede" +msgstr "Rede" #: core/io/file_access_network.cpp msgid "Remote FS" @@ -287,18 +281,16 @@ msgid "Transfer Mode" msgstr "Modo de Transferência" #: core/io/packet_peer.cpp -#, fuzzy msgid "Encode Buffer Max Size" -msgstr "Tamanho máximo do tampão de codificação" +msgstr "Tamanho Máximo do Amortecedor de Codificação" #: core/io/packet_peer.cpp msgid "Input Buffer Max Size" msgstr "Tamanho máximo do Buffer de entrada" #: core/io/packet_peer.cpp -#, fuzzy msgid "Output Buffer Max Size" -msgstr "Tamanho máximo do buffer de saÃda" +msgstr "Tamanho Máximo do Amortecedor de OutPut" #: core/io/packet_peer.cpp msgid "Stream Peer" @@ -382,6 +374,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "Tamanho Máximo (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Modo Mover" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Apagar entrada" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -571,7 +573,8 @@ msgstr "Descrição" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Executar" @@ -660,6 +663,10 @@ msgid "Main Run Args" msgstr "Argumentos da Execução Principal" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Nomear a Cena" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -667,18 +674,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Controle de Versões" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Sistema de Controlo de Versões" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nome do Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Controle de Versões" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -795,7 +799,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtros" @@ -2234,8 +2239,8 @@ msgid "Open" msgstr "Abrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Proprietários de:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2541,7 +2546,7 @@ msgid "Bus Options" msgstr "Opções de Barramento" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -2800,6 +2805,25 @@ msgid "Choose" msgstr "Escolha" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Copiar Caminho do Nó" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pacote Instalado com sucesso!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Falhou:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Armazenar o Ficheiro:" @@ -2812,6 +2836,31 @@ msgid "Packing" msgstr "Empacotamento" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Guardar Como" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Não consegui criar pasta." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Incapaz de exportar ficheiros do projeto" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Incapaz de abrir o ficheiro para escrita:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Guardar Como" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2931,11 +2980,33 @@ msgstr "Modelo de depuração personalizado não encontrado." msgid "Custom release template not found." msgstr "Modelo de lançamento personalizado não encontrado." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Gerir Modelos" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "O caminho de exportação não existe:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Ficheiro Modelo não encontrado:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Modelo de exportação inválido:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Preenchimento" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Em exportações de 32 bits o PCK incorporado não pode ser maior do que 4 GiB." @@ -3107,9 +3178,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportar" @@ -4266,14 +4337,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Cena" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Nomear a Cena" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4400,6 +4463,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controle de Versões" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nome de Utilizador" @@ -4427,6 +4494,10 @@ msgstr "Alternar modo livre de distrações." msgid "Add a new scene." msgstr "Adicionar nova cena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Cena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ir para cena aberta anteriormente." @@ -5220,6 +5291,11 @@ msgstr "" "Adicione um executável pré-definido no menu de exportação ou defina um pré-" "definido existente como executável." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projeto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escreva a sua lógica no Método _run()." @@ -5498,7 +5574,9 @@ msgid "Draw Spaces" msgstr "Desenhar Espaços" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navegação" @@ -6983,7 +7061,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filtro" @@ -7270,6 +7348,18 @@ msgid "Saving..." msgstr "A guardar..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10246,6 +10336,7 @@ msgid "Points" msgstr "Pontos" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgonos" @@ -11626,7 +11717,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Geometria inválida, não substituÃvel por malha." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Converter para Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12622,8 +12714,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Selecione a forma, subtile ou Tile anterior." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Região" @@ -14139,37 +14230,10 @@ msgid "Delete preset '%s'?" msgstr "Apagar predefinição '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Falhou a exportação do projeto para a plataforma '%s'.\n" -"O Modelo de exportação está ausente ou é inválido." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Falhou a exportação do projeto para a plataforma '%s'.\n" -"Pode ser provocado por um problema na predefinição ou configuração da " -"exportação." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "A Exportar Tudo" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "O caminho de exportação não existe:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Modelos de exportação para esta plataforma estão ausentes/corrompidos :" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Exportar Caminho" @@ -14315,6 +14379,11 @@ msgid "Export templates for this platform are missing:" msgstr "Não existem Modelos de exportação para esta plataforma:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadores do Projeto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gerir Modelos de Exportação" @@ -16741,7 +16810,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgonos" @@ -17364,7 +17433,6 @@ msgid "Use In Baked Light" msgstr "Consolidar Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17394,6 +17462,19 @@ msgstr "Centro" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navegação" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Modo Navegação" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Plano Seguinte" @@ -18924,10 +19005,6 @@ msgid "Could not execute on device." msgstr "Incapaz de executar no dispositivo." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Incapaz de localizar a ferramenta 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19048,12 +19125,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" "Versão de \"Target Sdk\" tem de ser maior ou igual à versão de \"Min Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinal" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "'apksigner' não foi encontrado.\n" "Verifique se o comando está disponÃvel na diretoria Android SDK build-" @@ -19073,6 +19155,11 @@ msgid "Could not find keystore, unable to export." msgstr "Incapaz de encontrar keystore e exportar." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Não consegui iniciar o subprocesso!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' devolvido com erro #%d" @@ -19102,7 +19189,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Formato de exportação não suportado!\n" #: platform/android/export/export_plugin.cpp @@ -19114,10 +19202,9 @@ msgstr "" "versão. Reinstale no menu 'Projeto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Incompatibilidade da versão Android:\n" @@ -19126,14 +19213,16 @@ msgstr "" "Reinstale o modelo de compilação Android no menu 'Projeto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Incapaz de sobrescrever ficheiros res://android/build/res/*.xml com o nome " "do projeto" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle\n" #: platform/android/export/export_plugin.cpp @@ -19145,8 +19234,9 @@ msgid "Building Android Project (gradle)" msgstr "A compilar Projeto Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Falhou a compilação do projeto Android, verifique o erro na saÃda.\n" @@ -19166,7 +19256,8 @@ msgstr "" "projeto gradle por resultados." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pacote não encontrado: '%s'" #: platform/android/export/export_plugin.cpp @@ -19174,17 +19265,16 @@ msgid "Creating APK..." msgstr "A criar APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Incapaz de encontrar modelo APK para exportar:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19198,7 +19288,8 @@ msgid "Adding files..." msgstr "A adicionar ficheiros..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Incapaz de exportar ficheiros do projeto" #: platform/android/export/export_plugin.cpp @@ -19440,6 +19531,17 @@ msgstr "CustomNode" msgid "Custom BG Color" msgstr "CustomNode" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Gerir Modelos" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Modelo de lançamento personalizado não encontrado." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19462,22 +19564,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Executar HTML exportado no navegador predefinido do sistema." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Incapaz de abrir modelo para exportação:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Modelo de exportação inválido:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Incapaz de escrever ficheiro:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Definir Margem" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Incapaz de ler ficheiro:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Separação:" @@ -19552,15 +19667,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Incapaz de ler shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Incapaz de criar diretoria do servidor HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Erro ao iniciar servidor HTTP:" #: platform/javascript/export/export.cpp @@ -19861,9 +19979,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Incapaz de exportar ficheiros do projeto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Não consegui iniciar o subprocesso!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localização" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19879,20 +20016,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ãcones não encontrados." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Erro ao guardar ficheiro: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direções" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Não consegui iniciar o subprocesso!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "A criar miniatura" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Incapaz de encontrar modelo app para exportar:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Modelo de exportação inválido:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19900,7 +20093,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19941,6 +20134,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projeto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificador de pacote inválido:" @@ -20261,6 +20464,11 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Incapaz de remover ficheiro temporário:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20307,6 +20515,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rotação aleatória:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Incapaz de encontrar keystore e exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Incapaz de encontrar keystore e exportar." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Incapaz de encontrar keystore e exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Incapaz de encontrar keystore e exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identificador Inválido:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nome inválido." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Incapaz de remover ficheiro temporário:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20325,6 +20597,23 @@ msgid "Invalid product version:" msgstr "Versão de produto inválida:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Extensão inválida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nova Janela" @@ -20341,6 +20630,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20468,7 +20761,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Distância de escolha:" @@ -21342,17 +21636,19 @@ msgstr "" "funcionar. Defina a propriedade ou desenhe o polÃgono." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance tem de ser filho ou neto de um nó Navigation2D. " -"Apenas fornece dados de navegação." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centro Fundo" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viagem" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22587,14 +22883,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "O NavigationAgent pode ser apenas usado dentro de um nó espacial." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance tem de ser filho ou neto de um nó Navigation. Apenas " -"fornece dados de navegação." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25341,6 +25629,16 @@ msgid "3D Physics" msgstr "FÃsica" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navegação" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navegação" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26766,7 +27064,7 @@ msgstr "Transmissão" msgid "Refraction" msgstr "Separação:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26851,7 +27149,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "A escalar: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Definir tipo de variável" #: scene/resources/navigation_mesh.cpp @@ -26869,10 +27172,15 @@ msgid "Source Group Name" msgstr "Fonte" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumentos da Cena Principal:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26882,11 +27190,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Região" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Mesclar a partir da Cena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26900,6 +27213,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Mostrar Predefinição" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Distância de escolha:" @@ -26917,7 +27235,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27333,6 +27651,11 @@ msgid "Scenario" msgstr "Cena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navegação" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27350,6 +27673,26 @@ msgstr "Linear Esquerda" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Predefinição" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Pré-visualização Predefinida" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Em teste" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Editar Conexão:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 74e61e14bc..df7e56059b 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -129,7 +129,7 @@ # Henrique Darko <henridark00@gmail.com>, 2021. # Cearaj <pmoraisleal@gmail.com>, 2021. # Alefy San <alefyferreiradeoliveira@outlook.com>, 2021. -# Joel Gomes da Silva <joelgomes1994@hotmail.com>, 2021. +# Joel Gomes da Silva <joelgomes1994@hotmail.com>, 2021, 2022. # Orangotango De tanga <luizinho0045@gmail.com>, 2021. # Felipe SiFa <felipe@logus.digital>, 2022. # Gabriel Gian <gabrielgian@live.com>, 2022. @@ -139,13 +139,14 @@ # Daniel Abrante <danielabrante@protonmail.com>, 2022. # blue wemes <bluewemes@gmail.com>, 2022. # José Miranda Neto <dodimi95@gmail.com>, 2022. +# lucas rossy brasil coelho <lucasrossy270@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2022-06-08 06:48+0000\n" -"Last-Translator: Douglas Leão <djlsplays@gmail.com>\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" +"Last-Translator: lucas rossy brasil coelho <lucasrossy270@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -153,7 +154,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -337,9 +338,10 @@ msgid "Data" msgstr "Dados" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Rede" @@ -443,9 +445,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Não há bytes suficientes para decodificar, ou o formato é inválido." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "Entrada inválida %i (não passada) na expressão" +msgstr "Entrada inválida %d (não passada) na expressão" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -488,6 +489,16 @@ msgstr "Fila de Mensagens" msgid "Max Size (KB)" msgstr "Tamanho Máximo (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Modo de Movimentação" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Deletar Entrada" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -667,7 +678,8 @@ msgstr "Descrição" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Rodar" @@ -707,7 +719,7 @@ msgstr "Exibir Tudo" #: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp #: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp msgid "Width" -msgstr "" +msgstr "Largura" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp @@ -721,7 +733,7 @@ msgstr "Luz" #: core/project_settings.cpp msgid "Always On Top" -msgstr "" +msgstr "Sempre no topo" #: core/project_settings.cpp #, fuzzy @@ -754,6 +766,10 @@ msgid "Main Run Args" msgstr "Argumentos de Execução Principais" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Nomeação de Cena" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Pesquisar em Extensões de Arquivo" @@ -761,18 +777,15 @@ msgstr "Pesquisar em Extensões de Arquivo" msgid "Script Templates Search Path" msgstr "Caminho de Pesquisa de Modelos de Script" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Controle de Versão" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Carregamento Automático na Inicialização" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Nome do Plugin" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Controle de Versão" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -879,7 +892,8 @@ msgid "Quality" msgstr "Qualidade" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Filtros" @@ -1008,7 +1022,7 @@ msgstr "Teste" #: core/translation.cpp scene/resources/font.cpp msgid "Fallback" -msgstr "" +msgstr "Fallback" #: core/ustring.cpp scene/resources/segment_shape_2d.cpp msgid "B" @@ -1083,7 +1097,7 @@ msgstr "Usar Encaixe de Pixel" #: drivers/gles2/rasterizer_scene_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Immediate Buffer Size (KB)" -msgstr "" +msgstr "Tamanho imediato do Buffer (KB)" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp @@ -1093,15 +1107,15 @@ msgstr "Mapeamento de luz" #: drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Use Bicubic Sampling" -msgstr "" +msgstr "Usar amostragem bicúbica" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Elements" -msgstr "" +msgstr "Máximo de elementos renderizáveis" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Lights" -msgstr "" +msgstr "Máximo de luzes renderizáveis" #: drivers/gles3/rasterizer_scene_gles3.cpp #, fuzzy @@ -1110,7 +1124,7 @@ msgstr "Seleção Central" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "Máximo de luzes por objeto" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" @@ -1415,9 +1429,8 @@ msgid "Remove this track." msgstr "Remover esta faixa." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Tempo (s): " +msgstr "Tempo (s):" #: editor/animation_track_editor.cpp #, fuzzy @@ -1697,9 +1710,8 @@ msgid "Add Method Track Key" msgstr "Adicionar Chave de Trilha de Método" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "Método não encontrado no objeto: " +msgstr "Método não encontrado no objeto:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2308,8 +2320,8 @@ msgid "Open" msgstr "Abrir" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Donos De:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2613,7 +2625,7 @@ msgid "Bus Options" msgstr "Opções do canal" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicar" @@ -2871,6 +2883,25 @@ msgid "Choose" msgstr "Escolher" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Copiar Caminho do Nó" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pacote instalado com sucesso!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Falhou:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Armazenando Arquivo:" @@ -2883,6 +2914,31 @@ msgid "Packing" msgstr "Empacotando" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Salvar Como" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Não foi possÃvel criar a pasta." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Não foi possÃvel exportar os arquivos do projeto" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Não é possÃvel abrir arquivo para escrita:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Salvar Como" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -3002,11 +3058,33 @@ msgstr "Modelo customizado de depuração não encontrado." msgid "Custom release template not found." msgstr "Template customizado de release não encontrado." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Gerenciar Templates" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "O caminho de exportação informado não existe:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Arquivo de modelo não encontrado:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Template de exportação inválido:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Preenchimento" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Em exportações de 32 bits, o PCK embutido não pode ser maior que 4GB." @@ -3178,9 +3256,9 @@ msgid "Import" msgstr "Importar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportação" @@ -3451,7 +3529,7 @@ msgstr "Classe:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp #: editor/script_create_dialog.cpp msgid "Inherits:" -msgstr "Herda de:" +msgstr "Herda:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -4335,14 +4413,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Cena" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Nomeação de Cena" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4466,6 +4536,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controle de Versão" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Nome do usuário" @@ -4493,6 +4567,10 @@ msgstr "Alternar modo sem-distrações." msgid "Add a new scene." msgstr "Adicionar nova cena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Cena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Ir para cena aberta anteriormente." @@ -5186,9 +5264,8 @@ msgid "Size:" msgstr "Tamanho:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Página: " +msgstr "Página:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5288,6 +5365,11 @@ msgstr "" "Adicione uma predefinição executável no menu Exportar ou defina uma " "predefinição existente como executável." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projeto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Escreva sua lógica no método _run()." @@ -5566,7 +5648,9 @@ msgid "Draw Spaces" msgstr "Desenhar Espaços" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Navegação" @@ -7058,7 +7142,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Filtro" @@ -7316,9 +7400,8 @@ msgid "Generating Lightmaps" msgstr "Generando Lightmaps" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "Generando para a Malha: " +msgstr "Gerando para malha:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7345,6 +7428,18 @@ msgid "Saving..." msgstr "Salvando..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -8327,9 +8422,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "Definir a animação final. Isso é útil para sub-transições." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "Transição: " +msgstr "Transição:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9780,7 +9874,7 @@ msgstr "Criar Contorno" #: scene/resources/multimesh.cpp scene/resources/primitive_meshes.cpp #: scene/resources/texture.cpp msgid "Mesh" -msgstr "Malha" +msgstr "Mesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -10102,9 +10196,8 @@ msgid "Volume" msgstr "Volume" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "Origem da Emissão: " +msgstr "Fonte de emissão:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10337,6 +10430,7 @@ msgid "Points" msgstr "Pontos" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "PolÃgonos" @@ -11200,15 +11294,13 @@ msgstr "Translação" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "Escalonando: " +msgstr "Escala:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "Transladando: " +msgstr "Traduzir:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11718,7 +11810,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Geometria inválida, não é possÃvel substituir por malha." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Converter para Malha2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11750,19 +11843,16 @@ msgid "Sprite" msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "Simplificação: " +msgstr "Simplificação:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "Diminuir (Pixels): " +msgstr "Encolher (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "Produzir (Pixels): " +msgstr "Crescer (Pixels):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12714,8 +12804,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Selecione a forma, subtile ou tile anterior." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Região" @@ -14233,38 +14322,10 @@ msgid "Delete preset '%s'?" msgstr "Excluir definição '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Falha ao exportar o projeto para a plataforma '%s'.\n" -"Os modelos de exportação parecem estar ausentes ou inválidos." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Falha ao exportar o projeto para a plataforma '%s'.\n" -"Isto pode ser devido a um problema de configuração nas pré-configurações de " -"exportação ou nas configurações de exportação." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Exportando tudo" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "O caminho de exportação informado não existe:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Modelos de exportação para esta plataforma não foram encontrados/estão " -"corrompidos:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Caminho de Exportação" @@ -14374,28 +14435,26 @@ msgid "More Info..." msgstr "Mover Para..." #: editor/project_export.cpp -#, fuzzy msgid "Export PCK/Zip..." -msgstr "Exportar PCK/Zip" +msgstr "Exportar PCK/Zip..." #: editor/project_export.cpp #, fuzzy msgid "Export Project..." -msgstr "Exportar Projeto" +msgstr "Exportar Projeto…" #: editor/project_export.cpp msgid "Export All" msgstr "Exportar tudo" #: editor/project_export.cpp -#, fuzzy msgid "Choose an export mode:" -msgstr "Por favor, escolha uma pasta vazia." +msgstr "Escolha um modo de exportação:" #: editor/project_export.cpp #, fuzzy msgid "Export All..." -msgstr "Exportar tudo" +msgstr "Exportar tudo…" #: editor/project_export.cpp editor/project_manager.cpp msgid "ZIP File" @@ -14411,6 +14470,11 @@ msgid "Export templates for this platform are missing:" msgstr "Modelos de exportação para esta plataforma não foram encontrados:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fundadores do Projeto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Gerenciar Modelos de Exportação" @@ -15957,7 +16021,7 @@ msgstr "Adicionar Script ao Nó" #: editor/script_editor_debugger.cpp #, fuzzy msgid "Remote %s:" -msgstr "Remoto " +msgstr "Remoto %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16833,7 +16897,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "PolÃgonos" @@ -17006,9 +17070,8 @@ msgid "Disabled GDNative Singleton" msgstr "GDNative Singleton desativado" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries:" -msgstr "Bibliotecas: " +msgstr "Bibliotecas:" #: modules/gdnative/nativescript/nativescript.cpp msgid "Class Name" @@ -17439,7 +17502,6 @@ msgid "Use In Baked Light" msgstr "Faça mapas de luz" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17469,6 +17531,19 @@ msgstr "Centro" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Navegação" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Modo Navegação" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Próximo Plano" @@ -17882,18 +17957,16 @@ msgstr "" "corrente do nó! Conserte seu nó, por favor." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "O nó retornou uma saÃda de sequência inválida: " +msgstr "O nó retornou uma saÃda de sequência inválida:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "Sequência encontrada mas o nó não está na pilha, reporte um bug!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Stack overflow with stack depth:" -msgstr "Sobrecarga da pilha com profundidade: " +msgstr "Sobrecarga da pilha com profundidade:" #: modules/visual_script/visual_script.cpp #, fuzzy @@ -18263,18 +18336,16 @@ msgid "for (elem) in (input):" msgstr "" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Input type not iterable:" -msgstr "Tipo de entrada não iterável: " +msgstr "Tipo de entrada não iterável:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" msgstr "Iterador tornou-se inválido" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Iterator became invalid:" -msgstr "Iterador tornou-se inválido: " +msgstr "Iterador tornou-se inválido:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -18444,14 +18515,12 @@ msgid "Operator" msgstr "Iterador" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid argument of type:" -msgstr ": Argumento inválido do tipo: " +msgstr "Argumento inválido do tipo:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid arguments:" -msgstr ": Argumentos inválidos: " +msgstr "Argumentos inválidos:" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -18463,14 +18532,12 @@ msgid "Var Name" msgstr "Nome" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script:" -msgstr "VariableGet não encontrada no script: " +msgstr "VariableGet não encontrado no script:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script:" -msgstr "VariableSet não encontrada no script: " +msgstr "VariableSet não encontrado no script:" #: modules/visual_script/visual_script_nodes.cpp #, fuzzy @@ -19022,10 +19089,6 @@ msgid "Could not execute on device." msgstr "Não foi possÃvel executar no dispositivo." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Não foi possÃvel encontrar a ferramenta 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19156,17 +19219,20 @@ msgstr "" "Versão do \"Target Sdk\" precisa ser igual ou maior que a versão do \"Min " "Sdk\"." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" -"'apksigner' não foi encontrado.\n" -"Verifique se o comando está disponÃvel no diretório do Android SDK build-" -"tools.\n" -"O %s resultante está sem assinatura." +"'apksigner' não foi encontrado. Verifique se o comando está disponÃvel no " +"diretório de ferramentas de compilação do Android SDK. O %s resultante não é " +"assinado." #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." @@ -19181,6 +19247,11 @@ msgid "Could not find keystore, unable to export." msgstr "O keystore não foi encontrado, não foi possÃvel exportar." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Não se pôde iniciar sub-processo!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' retornou com o erro #%d" @@ -19209,8 +19280,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" -msgstr "Formato de Exportação Não Suportado\n" +msgid "Unsupported export format!" +msgstr "Formato de exportação não suportado!" #: platform/android/export/export_plugin.cpp msgid "" @@ -19222,10 +19293,9 @@ msgstr "" "'Projeto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Diferença na versão da build do Android:\n" @@ -19234,14 +19304,16 @@ msgstr "" "Por favor reinstale o modelo de compilação do Android pelo menu 'Projeto'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Incapaz de sobrescrever os arquivos res://android/build/res/*.xml com o nome " "do projeto" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "" "Não foi possÃvel exportar os arquivos do projeto ao projeto do gradle\n" @@ -19254,8 +19326,9 @@ msgid "Building Android Project (gradle)" msgstr "Construindo Projeto Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "A construção do projeto Android falhou, verifique a saÃda para detalhes.\n" @@ -19275,7 +19348,8 @@ msgstr "" "diretório do projeto gradle por saÃdas." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Pacote não encontrado: '%s'" #: platform/android/export/export_plugin.cpp @@ -19283,17 +19357,16 @@ msgid "Creating APK..." msgstr "Criando APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Não foi possÃvel encontrar o modelo de APK para exportar:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19307,7 +19380,8 @@ msgid "Adding files..." msgstr "Adicionando arquivos..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Não foi possÃvel exportar os arquivos do projeto" #: platform/android/export/export_plugin.cpp @@ -19546,6 +19620,17 @@ msgstr "Recortar Nós" msgid "Custom BG Color" msgstr "Recortar Nós" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Gerenciar Templates" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Template customizado de release não encontrado." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19568,22 +19653,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Rodar HTML exportado no navegador padrão do sistema." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Não foi possÃvel abrir o modelo para exportar:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Template de exportação inválido:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Não foi possÃvel escrever o arquivo:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Definir Margem" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Não foi possÃvel ler o arquivo:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Variant" msgstr "Variante" @@ -19657,15 +19755,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Não foi possÃvel ler o shell HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Não foi possÃvel criar o diretório do servidor HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Erro ao iniciar servidor HTTP:" #: platform/javascript/export/export.cpp @@ -19965,9 +20066,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Não foi possÃvel exportar os arquivos do projeto" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Não se pôde iniciar sub-processo!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Localização" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19983,20 +20103,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ãcones não encontrados." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Erro ao salvar o arquivo: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Direções" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Não se pôde iniciar sub-processo!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Criando Miniatura" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Não foi possÃvel encontrar o aplicativo de modelo para exportar:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Template de exportação inválido:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20004,7 +20180,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20045,6 +20221,17 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projeção" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "" +"Não foi possÃvel exportar os arquivos do projeto ao projeto do gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Identificador de pacote inválido:" @@ -20192,9 +20379,8 @@ msgid "Publisher Display Name" msgstr "Nome de Exibição da Publicadora" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Product GUID" -msgstr "GUID de produto inválido." +msgstr "GUID do produto" #: platform/uwp/export/export.cpp #, fuzzy @@ -20366,6 +20552,11 @@ msgid "Debug Algorithm" msgstr "Depurador" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Não é possÃvel remover o arquivo temporário:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20410,6 +20601,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Notificações Push" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "O keystore não foi encontrado, não foi possÃvel exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "O keystore não foi encontrado, não foi possÃvel exportar." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "O keystore não foi encontrado, não foi possÃvel exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "O keystore não foi encontrado, não foi possÃvel exportar." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "O nome não é um identificador válido:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nome Inválido." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Não é possÃvel remover o arquivo temporário:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20428,6 +20683,23 @@ msgid "Invalid product version:" msgstr "Versão de produto inválida:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Extensão inválida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nova Janela" @@ -20444,6 +20716,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20571,7 +20847,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "Distância Máxima" @@ -21421,17 +21698,19 @@ msgstr "" "este nó funcione. Por favor defina a propriedade ou desenhe um polÃgono." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance deve ser filho ou neto de um nó Navigation2D. Ele " -"apenas fornece dados de navegação." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centro Inferior" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Viagem" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -22627,14 +22906,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele " -"apenas fornece dados de navegação." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25356,6 +25627,16 @@ msgid "3D Physics" msgstr "FÃsica" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Navegação" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Navegação" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26037,9 +26318,8 @@ msgid "Label Width" msgstr "Largura Esquerda" #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Screen Picker" -msgstr "Operador de tela." +msgstr "Seletor de tela" #: scene/resources/default_theme/default_theme.cpp #, fuzzy @@ -26775,7 +27055,7 @@ msgstr "Transmissão" msgid "Refraction" msgstr "Refração" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "Detalhe" @@ -26858,7 +27138,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Escala:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Definir o Tipo da Variável" #: scene/resources/navigation_mesh.cpp @@ -26875,10 +27160,15 @@ msgid "Source Group Name" msgstr "Origem" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Argumentos da Cena Principal:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26888,11 +27178,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Região" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Fundir a partir de Cena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26906,6 +27201,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Detalhe" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Escolha uma Distância:" @@ -26923,7 +27223,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27338,6 +27638,11 @@ msgid "Scenario" msgstr "Cena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Navegação" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27355,6 +27660,26 @@ msgstr "Linear Esquerda" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Padrão" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Prévia Padrão" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testando" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Margem de Ligação da Borda" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 032dacd5c6..b6b92325e4 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -223,9 +223,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Analizator Network" @@ -381,6 +382,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Mod Mutare" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Șterge Intrare(Input)" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -572,7 +583,8 @@ msgstr "Descriere" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Execută" @@ -661,6 +673,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Calea Scenei:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -668,19 +685,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Control versiune" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Control versiune" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Nume plugin:" +msgid "Version Control Plugin Name" +msgstr "Control versiune" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -796,7 +809,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtre:" @@ -2239,8 +2253,8 @@ msgid "Open" msgstr "Deschide" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Stăpâni La:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2546,7 +2560,7 @@ msgid "Bus Options" msgstr "OpÈ›iuni Pistă Audio" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicat" @@ -2808,6 +2822,24 @@ msgid "Choose" msgstr "AlegeÈ›i" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Pachet instalat cu succes!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "A EÈ™uat:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "FiÅŸierul se Stochează:" @@ -2820,6 +2852,31 @@ msgid "Packing" msgstr "Ambalare" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "SalvaÈ›i Ca" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Directorul nu a putut fi creat." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Nu s-a putut porni subprocesul!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nu pot deschide fiÅŸierul pentru scris:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "SalvaÈ›i Ca" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2942,11 +2999,32 @@ msgstr "FiÈ™ierul È™ablon de depanare personalizat nu a fost găsit." msgid "Custom release template not found." msgstr "Șablonul personalizat de lansare nu a fost găsit." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "GestionaÈ›i È™abloanele" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "FiÈ™ierul nu există." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "FiÈ™ierul È™ablon nu a fost găsit:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Nu se pot deschide È™abloanele de export zip." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "La exporturile pe 32 de biÈ›i PCK-ul încorporat nu poate fi mai mare de 4 GiB." @@ -3120,9 +3198,9 @@ msgid "Import" msgstr "Importare" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportare" @@ -4283,15 +4361,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scenă" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Calea Scenei:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4420,6 +4489,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control versiune" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "RedenumeÈ™te" @@ -4448,6 +4521,10 @@ msgstr "Comutează modul fără distrageri." msgid "Add a new scene." msgstr "Adaugă o nouă scenă." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scenă" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Mergi la o scenă deschisă anterior." @@ -5232,6 +5309,11 @@ msgstr "" "platformă.\n" "Te rog adaugă o presetare de rulare în meniul pentru export." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proiect" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Scrie logica programului în metoda _run()." @@ -5508,7 +5590,9 @@ msgid "Draw Spaces" msgstr "Apeluri" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Creează un Mesh de Navigare" @@ -6994,7 +7078,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtre:" @@ -7289,6 +7373,18 @@ msgid "Saving..." msgstr "Se Salvează..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10363,6 +10459,7 @@ msgid "Points" msgstr "Deplasare punct" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Poligon->UV" @@ -11800,7 +11897,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Conversie în Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12861,8 +12959,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Regiunea" @@ -14373,32 +14470,11 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "Exportare" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Exportă Proiectul" @@ -14541,6 +14617,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Fondatorii Proiectului" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Administrează Șabloanele de Export" @@ -16923,7 +17004,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Poligon->UV" @@ -17535,7 +17616,6 @@ msgid "Use In Baked Light" msgstr "Procesează Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17565,6 +17645,19 @@ msgstr "Centrează SelecÈ›ia" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Creează un Mesh de Navigare" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Creează un Mesh de Navigare" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Planul următor" @@ -19123,10 +19216,6 @@ msgid "Could not execute on device." msgstr "Directorul nu a putut fi creat." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19230,12 +19319,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Semnal" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19254,6 +19347,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nu s-a putut porni subprocesul!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19284,7 +19382,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19295,20 +19393,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Nu s-a putut porni subprocesul!" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19320,7 +19417,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19336,7 +19433,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Unelte AnimaÈ›ie" #: platform/android/export/export_plugin.cpp @@ -19345,15 +19442,13 @@ msgid "Creating APK..." msgstr "Crearea conturilor..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Nu s-a putut porni subprocesul!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19365,7 +19460,7 @@ msgstr "Se adaugă %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Nu s-a putut porni subprocesul!" #: platform/android/export/export_plugin.cpp @@ -19607,6 +19702,17 @@ msgstr "Creează Nod" msgid "Custom BG Color" msgstr "Creează Nod" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "GestionaÈ›i È™abloanele" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Șablonul personalizat de lansare nu a fost găsit." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19628,23 +19734,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Execută HTML-ul exportat în browserul prestabilit al sistemului." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Directorul nu a putut fi creat." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Trebuie să utilizaÅ£i o extensie valida." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Nu s-a putut încărca fiÈ™ierul la:" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Setează Mâner" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Nu s-a putut încărca fiÈ™ierul la:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Enumerări:" @@ -19720,17 +19838,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Nu s-a putut încărca fiÈ™ierul la:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Directorul nu a putut fi creat." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Eroare la scrierea TextFile:" #: platform/javascript/export/export.cpp @@ -20028,9 +20146,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Nu s-a putut porni subprocesul!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nu s-a putut porni subprocesul!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Creează un Mesh de Navigare" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20046,18 +20183,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Nu s-a găsit nici o sub-resursă." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Eroare la salvarea filei: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "DirecÈ›ii" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nu s-a putut porni subprocesul!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Creând Thumbnail" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Nu s-a putut porni subprocesul!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Cale nevalidă." #: platform/osx/export/export.cpp msgid "" @@ -20067,7 +20260,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20109,6 +20302,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Proiect" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Identificator nevalid:" @@ -20423,6 +20625,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nu pot sterge fiÈ™ierul temporar:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20469,6 +20676,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "RotaÈ›ie aleatorie:" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Identificator nevalid:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Nume nevalid." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nu pot sterge fiÈ™ierul temporar:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20490,6 +20757,23 @@ msgid "Invalid product version:" msgstr "Nume de Proiect Nevalid." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Trebuie să utilizaÅ£i o extensie valida." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Fereastră Nouă" @@ -20506,6 +20790,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20628,7 +20916,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instanță" @@ -21451,13 +21740,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centrează SelecÈ›ia" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22630,12 +22922,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25267,6 +25553,16 @@ msgid "3D Physics" msgstr "Cadru Fizic %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Creează un Mesh de Navigare" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Creează un Mesh de Navigare" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26675,7 +26971,7 @@ msgstr "Transmisie" msgid "Refraction" msgstr "Enumerări:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26757,7 +27053,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Dimensiune:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Modificare tip bază:" #: scene/resources/navigation_mesh.cpp @@ -26775,10 +27076,15 @@ msgid "Source Group Name" msgstr "Resursă" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "ConÈ›inut:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26787,11 +27093,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Regiunea" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26804,6 +27115,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "ÃŽncărcaÈ›i Implicit" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26820,7 +27136,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27228,6 +27544,11 @@ msgid "Scenario" msgstr "Scenă" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Creează un Mesh de Navigare" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27245,6 +27566,26 @@ msgstr "Stânga liniară" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Implicit" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Previzualizare" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Se Testează" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Modifică Conexiunea:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 512d3f8caa..b920136351 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -120,7 +120,7 @@ msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-08 06:48+0000\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" "Last-Translator: FuzzMix <fmwolfiechad@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -314,9 +314,10 @@ msgid "Data" msgstr "Данные" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Сеть" @@ -422,9 +423,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ÐедоÑтаточно байтов Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð² или неверный формат." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "Ðекорректный ввод %i (не подходит) в выражении" +msgstr "Ðекорректный ввод %d (не подходит) в выражении" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -468,6 +468,16 @@ msgstr "Очередь Ñообщений" msgid "Max Size (KB)" msgstr "МакÑимальный размер (КБ)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Режим перемещениÑ" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Удалить вход" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -647,7 +657,8 @@ msgstr "ОпиÑание" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "ЗапуÑтить" @@ -730,6 +741,10 @@ msgid "Main Run Args" msgstr "ОÑновные аргументы запуÑка" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Именование Ñцен" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "ИÑкать в раÑширениÑÑ… файлов" @@ -737,18 +752,15 @@ msgstr "ИÑкать в раÑширениÑÑ… файлов" msgid "Script Templates Search Path" msgstr "Путь поиÑка шаблонов Ñкриптов" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Контроль верÑий" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Ðвтозагрузка при запуÑке" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Ðазвание плагина" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Контроль верÑий" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -855,7 +867,8 @@ msgid "Quality" msgstr "КачеÑтво" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Фильтры" @@ -1255,14 +1268,12 @@ msgid "Stream" msgstr "Поток" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start Offset" -msgstr "Смещение поворота" +msgstr "Ðачальное Ñмещение" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End Offset" -msgstr "Г Ñмещение" +msgstr "Конечное Ñмещение" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/import/resource_importer_scene.cpp @@ -1386,19 +1397,16 @@ msgid "Remove this track." msgstr "Удалить Ñту дорожку." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Ð’Ñ€ÐµÐ¼Ñ (Ñек.): " +msgstr "Ð’Ñ€ÐµÐ¼Ñ (Ñек.):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "ПозициÑ" +msgstr "ПозициÑ:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "Поворот" +msgstr "Поворот:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1415,9 +1423,8 @@ msgid "Type:" msgstr "Тип:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "Ðеверный шаблон ÑкÑпорта:" +msgstr "(Ðеверный, ожидаемый тип: %s)" #: editor/animation_track_editor.cpp #, fuzzy @@ -1440,19 +1447,16 @@ msgid "Stream:" msgstr "Поток" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start (s):" -msgstr "ПерезапуÑк (Ñек.):" +msgstr "Ðачало (Ñек.):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End (s):" -msgstr "ПроÑвление (Ñек.):" +msgstr "Конец (Ñек.):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Clip:" -msgstr "Ðнимации:" +msgstr "Клип Ðнимации:" #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -1666,9 +1670,8 @@ msgid "Add Method Track Key" msgstr "Добавить ключ дорожки Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð°" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "Ð’ объекте нет такого метода: " +msgstr "Ð’ объекте нет такого метода:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2278,8 +2281,8 @@ msgid "Open" msgstr "Открыть" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Владельцы:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2580,7 +2583,7 @@ msgid "Bus Options" msgstr "Параметры шины" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дублировать" @@ -2633,9 +2636,8 @@ msgid "There is no '%s' file." msgstr "Файла «%s» не ÑущеÑтвует." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "Макет" +msgstr "Макет:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2837,6 +2839,25 @@ msgid "Choose" msgstr "Выбрать" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Завершать пути файлов" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Пакет уÑпешно уÑтановлен!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Ðе удалоÑÑŒ:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Сохранение файла:" @@ -2849,6 +2870,31 @@ msgid "Packing" msgstr "Упаковывание" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Сохранить как" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Ðевозможно Ñоздать папку." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Сохранить как" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2964,11 +3010,33 @@ msgstr "ПользовательÑкий отладочный шаблон не msgid "Custom release template not found." msgstr "ПользовательÑкий релизный шаблон не найден." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Управление шаблонами" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Данный путь ÑкÑпорта не ÑущеÑтвует:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Файл шаблона не найден:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ðеверный шаблон ÑкÑпорта:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "ОтÑтуп" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "Ðа 32-Ñ… битных ÑиÑтемах вÑтроенный PCK файл не может быть больше 4 Гбит." @@ -3144,9 +3212,9 @@ msgid "Import" msgstr "Импорт" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "ÐкÑпорт" @@ -4297,14 +4365,6 @@ msgstr "" "Ðевозможно запиÑать в файл «%s», файл иÑпользуетÑÑ, заблокирован или " "отÑутÑтвуют разрешениÑ." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Сцена" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Именование Ñцен" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4419,6 +4479,10 @@ msgid "Default Color Picker Mode" msgstr "Режим выбора цвета по умолчанию" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Контроль верÑий" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" @@ -4446,6 +4510,10 @@ msgstr "Переключить режим без отвлечениÑ." msgid "Add a new scene." msgstr "Добавить новую Ñцену." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Сцена" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Перейти к предыдущей открытой Ñцене." @@ -5137,9 +5205,8 @@ msgid "Size:" msgstr "Размер:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Страница: " +msgstr "Страница:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5235,6 +5302,11 @@ msgstr "" "ПожалуйÑта, добавьте активный преÑет в меню ÑкÑпорта или пометьте " "ÑущеÑтвующий преÑет как активный." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Проект" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Пишите ваш код в методе _run()." @@ -5489,7 +5561,9 @@ msgid "Draw Spaces" msgstr "РиÑовать пробелы" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "ÐавигациÑ" @@ -6901,7 +6975,7 @@ msgstr "Повторить" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Фильтр" @@ -7135,9 +7209,8 @@ msgid "Generating Lightmaps" msgstr "Создание карт оÑвещениÑ" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "Создание Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ñетки: " +msgstr "Создание Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ñетки:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7164,6 +7237,18 @@ msgid "Saving..." msgstr "Сохранение..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "2D, Обнаружение 3D" @@ -8125,9 +8210,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "УÑтановите конец анимации. Полезно Ð´Ð»Ñ Ð²Ñпомогательных переходов." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "Переход: " +msgstr "Переход:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9881,9 +9965,8 @@ msgid "Volume" msgstr "Объём" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "ИÑточник излучениÑ: " +msgstr "ИÑточник излучениÑ:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10116,6 +10199,7 @@ msgid "Points" msgstr "Точки" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Полигоны" @@ -10976,15 +11060,13 @@ msgstr "Сдвинуть" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "МаÑштаб: " +msgstr "МаÑштаб:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "Перемещение: " +msgstr "Перемещение:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11495,7 +11577,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, не может быть заменена полиÑеткой." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Преобразовать в Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11528,19 +11611,16 @@ msgid "Sprite" msgstr "Спрайт" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "Упрощение: " +msgstr "Упрощение:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "Сжатие (пикÑели): " +msgstr "Сжатие (пикÑели):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "РоÑÑ‚ (пикÑели): " +msgstr "РоÑÑ‚ (пикÑели):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12482,8 +12562,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Выберите предыдущую форму, Ñлемент тайла или тайл." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Регион" @@ -12773,7 +12852,6 @@ msgid "This property can't be changed." msgstr "Ðто ÑвойÑтво не может быть изменено." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Snap Options" msgstr "Параметры привÑзки" @@ -12802,9 +12880,8 @@ msgid "Separation" msgstr "Разделение" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Selected Tile" -msgstr "Выделение" +msgstr "Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/light_2d.cpp scene/2d/line_2d.cpp scene/2d/mesh_instance_2d.cpp @@ -12833,9 +12910,8 @@ msgid "Modulate" msgstr "МодулÑциÑ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Mode" -msgstr "Режим отображениÑ" +msgstr "Режим плитки" #: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy @@ -13987,47 +14063,23 @@ msgstr "Ðктивный" #: editor/project_export.cpp msgid "Export the project for all the presets defined." -msgstr "" +msgstr "ÐкÑпортируйте проект Ð´Ð»Ñ Ð²Ñех заданных предуÑтановок." #: editor/project_export.cpp msgid "All presets must have an export path defined for Export All to work." msgstr "" +"Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ функции \"ÐкÑпортировать вÑе\" у вÑех предуÑтановок должен быть " +"определен путь ÑкÑпорта." #: editor/project_export.cpp msgid "Delete preset '%s'?" msgstr "Удалить преÑет «%s»?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Ðе удалоÑÑŒ ÑкÑпортировать проект Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ «%s».\n" -"Шаблоны ÑкÑпорта отÑутÑтвуют или недейÑтвительны." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Ðе удалоÑÑŒ ÑкÑпортировать проект Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ «%s».\n" -"Ðто может быть ÑвÑзано Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹ конфигурации в предуÑтановке ÑкÑпорта или " -"наÑтройках ÑкÑпорта." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ÐкÑпорт вÑех" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Данный путь ÑкÑпорта не ÑущеÑтвует:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют/повреждены:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Путь ÑкÑпорта" @@ -14175,6 +14227,11 @@ msgid "Export templates for this platform are missing:" msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ОÑнователи проекта" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Управление шаблонами ÑкÑпорта" @@ -16539,7 +16596,7 @@ msgstr "Стороны кольца" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "Полигон" @@ -17105,7 +17162,6 @@ msgid "Use In Baked Light" msgstr "ИÑпользовать в запечённом Ñвете" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "Ячейка" @@ -17134,6 +17190,19 @@ msgstr "По центру" msgid "Mask" msgstr "МаÑка" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "ÐавигациÑ" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "ЧувÑтвительноÑть навигации" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð¿Ð¾ÑкоÑть" @@ -18641,10 +18710,6 @@ msgid "Could not execute on device." msgstr "Ðе удалоÑÑŒ выполнить на уÑтройÑтве." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Ðе удалоÑÑŒ найти инÑтрумент «apksigner»." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18773,12 +18838,17 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "ВерÑÐ¸Ñ Â«Target Sdk» должна быть больше или равна верÑии «Min Sdk»." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "ПодпиÑÑŒ кода DMG" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "Ðе удалоÑÑŒ найти команду «apksigner».\n" "ПожалуйÑта, проверьте наличие программы в каталоге Android SDK build-tools.\n" @@ -18797,6 +18867,11 @@ msgid "Could not find keystore, unable to export." msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "«apksigner» завершилÑÑ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ #%d" @@ -18825,7 +18900,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°! Android APK требует раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Ðеподдерживаемый формат ÑкÑпорта!\n" #: platform/android/export/export_plugin.cpp @@ -18837,10 +18913,9 @@ msgstr "" "не ÑущеÑтвует. ПожалуйÑта, переуÑтановите из меню «Проект»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "ÐеÑоответÑтвие верÑии Ñборки Android:\n" @@ -18849,13 +18924,15 @@ msgstr "" "ПожалуйÑта, переуÑтановите шаблон Ñборки Android из меню «Проект»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Ðевозможно перезапиÑать файлы res://android/build/res/*.xml Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ проекта" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n" #: platform/android/export/export_plugin.cpp @@ -18867,8 +18944,9 @@ msgid "Building Android Project (gradle)" msgstr "Сборка проекта Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Сборка проекта Android не удалаÑÑŒ, проверьте вывод на ошибки.\n" @@ -18888,7 +18966,8 @@ msgstr "" "проекта gradle на наличие выходных данных." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Пакет не найден: %s" #: platform/android/export/export_plugin.cpp @@ -18896,17 +18975,16 @@ msgid "Creating APK..." msgstr "Создание APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Ðе удалоÑÑŒ найти шаблон APK Ð´Ð»Ñ ÑкÑпорта:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18919,7 +18997,8 @@ msgid "Adding files..." msgstr "Добавление файлов..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта" #: platform/android/export/export_plugin.cpp @@ -19158,6 +19237,17 @@ msgstr "ПользовательÑкий цвет" msgid "Custom BG Color" msgstr "ПользовательÑкий цвет" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Управление шаблонами" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "ПользовательÑкий релизный шаблон не найден." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID не указан - невозможно наÑтроить проект." @@ -19179,22 +19269,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "ЗапуÑтить HTML в ÑиÑтемном браузере по умолчанию." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Ðе удалоÑÑŒ открыть шаблон Ð´Ð»Ñ ÑкÑпорта:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Ðеверный шаблон ÑкÑпорта:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Ðе удалоÑÑŒ запиÑать файл:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Задать отÑтуп" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Ðе удалоÑÑŒ прочитать файл:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ‚ÐµÐ½ÐºÐ°" @@ -19269,15 +19372,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Ðе удалоÑÑŒ прочитать HTML-оболочку:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Ðе удалоÑÑŒ Ñоздать каталог HTTP-Ñервера:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Ошибка запуÑка HTTP-Ñервера:" #: platform/javascript/export/export.cpp @@ -19569,9 +19675,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ЛокализациÑ" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "Примечание: ПроцеÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ занимает менее чаÑа. Когда процеÑÑ " "завершитÑÑ, вы получите Ñлектронное пиÑьмо." @@ -19593,18 +19719,80 @@ msgstr "" "ÑкÑпортированному приложению (необÑзательно):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "Временные метки не ÑовмеÑтимы Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñью ad-hoc и будут отключены!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Ð—Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð°Ñ Ñреда Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑовмеÑтима Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñью ad-hoc и будет отключена!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Identity не найдена." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Ошибка при Ñохранении файла: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"ОтноÑительные ÑимволичеÑкие ÑÑылки не поддерживаютÑÑ Ð² Ñтой ОС, " +"ÑкÑпортируемый проект может быть повреждён!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Ðаправление" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Создание пакета приложениÑ" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Ðе удалоÑÑŒ найти шаблон Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑкÑпорта:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ðеверный шаблон ÑкÑпорта:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19613,8 +19801,9 @@ msgstr "" "ÑкÑпортируемый проект может быть повреждён!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Запрошенный двоичный файл шаблона «%s» не найден. Он может отÑутÑтвовать в " @@ -19661,6 +19850,16 @@ msgid "Sending archive for notarization" msgstr "Отправка архива Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "ПроекциÑ" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Ðеверный идентификатор пакета:" @@ -19998,6 +20197,11 @@ msgid "Debug Algorithm" msgstr "Отладчик" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Ðевозможно удалить временный файл:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20043,6 +20247,76 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Ð’Ñплывающее уведомление" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"ИнÑтрумент rcedit должен быть наÑтроен в ÐаÑтройках редактора (Export > " +"Windows > Rcedit) Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° или информационных данных приложениÑ." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ðеверный идентификатор:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "ÐедопуÑтимое имÑ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"ИнÑтрумент rcedit должен быть наÑтроен в ÐаÑтройках редактора (Export > " +"Windows > Rcedit) Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° или информационных данных приложениÑ." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Ðевозможно удалить временный файл:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20063,6 +20337,23 @@ msgid "Invalid product version:" msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð°:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "ÐедопуÑтимый иÑполнÑемый файл." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Windows" @@ -20078,6 +20369,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -20201,7 +20496,8 @@ msgstr "Поток приоÑтановлен" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "МакÑимальное раÑÑтоÑние" @@ -21047,17 +21343,19 @@ msgstr "" "ПожалуйÑта, уÑтановите ÑвойÑтво или нариÑуйте многоугольник." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance должен быть ребёнком или внуком узла Navigation2D. " -"Он предоÑтавлÑет только навигационные данные." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Внизу поÑередине" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "ПеремеÑтитÑÑ" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -21805,9 +22103,8 @@ msgid "Custom Sky" msgstr "ПользовательÑкое небо" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Custom Sky Rotation Degrees" -msgstr "ПользовательÑкие градуÑÑ‹ Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð½ÐµÐ±Ð°" +msgstr "ПользовательÑкие ГрадуÑÑ‹ Ð’Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðеба" #: scene/3d/baked_lightmap.cpp scene/3d/ray_cast.cpp msgid "Custom Color" @@ -21818,9 +22115,8 @@ msgid "Custom Energy" msgstr "ПользовательÑÐºÐ°Ñ ÑнергиÑ" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Min Light" -msgstr "ОтÑтуп вправо" +msgstr "Минимальный Свет" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp #, fuzzy @@ -21837,9 +22133,8 @@ msgid "Light Data" msgstr "С данными" #: scene/3d/bone_attachment.cpp scene/3d/physics_body.cpp -#, fuzzy msgid "Bone Name" -msgstr "Ð˜Ð¼Ñ ÐºÐ¾Ñти" +msgstr "Ð˜Ð¼Ñ ÐšÐ¾Ñти" #: scene/3d/camera.cpp msgid "Keep Aspect" @@ -21855,9 +22150,8 @@ msgid "Doppler Tracking" msgstr "Трек параметра" #: scene/3d/camera.cpp -#, fuzzy msgid "Projection" -msgstr "Проект" +msgstr "ПроекциÑ" #: scene/3d/camera.cpp msgid "FOV" @@ -21869,13 +22163,12 @@ msgid "Frustum Offset" msgstr "Смещение уÑеченного конуÑа" #: scene/3d/camera.cpp -#, fuzzy msgid "Near" -msgstr "Ближайшие" +msgstr "Близко" #: scene/3d/camera.cpp msgid "Far" -msgstr "" +msgstr "Далеко" #: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp #: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp @@ -21886,18 +22179,16 @@ msgid "Margin" msgstr "ОтÑтуп" #: scene/3d/camera.cpp -#, fuzzy msgid "Clip To" -msgstr "Обрезать Ñверху" +msgstr "Обрезать До" #: scene/3d/collision_object.cpp scene/3d/soft_body.cpp msgid "Ray Pickable" msgstr "" #: scene/3d/collision_object.cpp -#, fuzzy msgid "Capture On Drag" -msgstr "Захват" +msgstr "Захват При ПеретаÑкивании" #: scene/3d/collision_object.cpp msgid "" @@ -21973,24 +22264,20 @@ msgid "Box Extents" msgstr "Гизмо" #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Ring Radius" -msgstr "МаÑка излучениÑ" +msgstr "Ð Ð°Ð´Ð¸ÑƒÑ ÐšÐ¾Ð»ÑŒÑ†Ð°" #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Ring Inner Radius" -msgstr "Изменение внутреннего радиуÑа полукруга" +msgstr "Внутренний Ð Ð°Ð´Ð¸ÑƒÑ ÐšÐ¾Ð»ÑŒÑ†Ð°" #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Ring Height" -msgstr "Повернуть вправо" +msgstr "Ð’Ñ‹Ñота Кольца" #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Ring Axis" -msgstr "ПредупреждениÑ" +msgstr "ОÑÑŒ Кольца" #: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp #, fuzzy @@ -22265,14 +22552,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent можно иÑпользовать только под узлом Spatial." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance должен быть дочерним или под-дочерним узлом " -"Navigation. Он предоÑтавлÑет только навигационные данные." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -24979,6 +25258,16 @@ msgid "3D Physics" msgstr "Физика" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ÐавигациÑ" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ÐавигациÑ" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26381,7 +26670,7 @@ msgstr "ПропуÑкание Ñвета" msgid "Refraction" msgstr "Преломление" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "Деталь" @@ -26466,7 +26755,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "МаÑштаб:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Задать базовый тип вариации" #: scene/resources/navigation_mesh.cpp @@ -26483,8 +26777,14 @@ msgid "Source Group Name" msgstr "Ðазвание группы-иÑточника" #: scene/resources/navigation_mesh.cpp -msgid "Agent" -msgstr "" +#, fuzzy +msgid "Cells" +msgstr "Ячейка" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Сегменты" #: scene/resources/navigation_mesh.cpp msgid "Max Climb" @@ -26496,11 +26796,17 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Регион" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "СлиÑние из Сцены" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +#, fuzzy +msgid "Edges" msgstr "Край" #: scene/resources/navigation_mesh.cpp @@ -26514,6 +26820,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Деталь" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "РаÑÑтоÑние образца" @@ -26531,7 +26842,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26581,24 +26892,20 @@ msgid "Point Texture" msgstr "ТекÑтура точки" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Normal Texture" -msgstr "ÐžÐ±Ñ‹Ñ‡Ð½Ð°Ñ Ñ‚ÐµÐºÑтура" +msgstr "Ðормаль ТекÑтура" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Color Texture" -msgstr "Тема редактора" +msgstr "ТекÑтура Цвета" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Point Count" -msgstr "Добавить входной порт" +msgstr "КоличеÑтво Точек" #: scene/resources/particles_material.cpp -#, fuzzy msgid "Scale Random" -msgstr "Случайный маÑштаб" +msgstr "Случайный МаÑштаб" #: scene/resources/particles_material.cpp #, fuzzy @@ -26931,6 +27238,11 @@ msgid "Scenario" msgstr "Сцена" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ÐавигациÑ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26947,6 +27259,26 @@ msgstr "Левый линейный" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Шаг по умолчанию плавающих чиÑел" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Размер Ñчейки" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ТеÑтируемые" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Пограничное Ñоединение" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "ХолÑÑ‚" diff --git a/editor/translations/si.po b/editor/translations/si.po index 7e8a0475ec..d28d0a4f81 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -207,9 +207,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -363,6 +364,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -545,7 +555,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -629,24 +640,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -755,7 +765,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2173,7 +2184,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2465,7 +2476,7 @@ msgid "Bus Options" msgstr "à·à·Šâ€à¶»à·’à¶:" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2721,6 +2732,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2733,6 +2760,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2836,8 +2883,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3009,9 +3073,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4095,14 +4159,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4221,6 +4277,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4248,6 +4308,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4977,6 +5041,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5236,7 +5305,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" @@ -6639,7 +6710,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" @@ -6918,6 +6989,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9832,6 +9915,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11189,7 +11273,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12163,8 +12247,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" @@ -13614,31 +13697,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13773,6 +13835,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16045,7 +16111,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16619,7 +16685,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16648,6 +16713,19 @@ msgstr "යà¶à·”රු මක෠දමන්න" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18112,10 +18190,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18219,12 +18293,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18240,6 +18318,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18268,7 +18350,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18279,19 +18361,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18304,7 +18384,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18319,7 +18399,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18327,15 +18407,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18345,7 +18422,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18575,6 +18652,15 @@ msgstr "යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" msgid "Custom BG Color" msgstr "යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18596,19 +18682,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "%s වර්ගය %s මූල වර්ගය සදහ෠වà·à¶»à¶¯à·’ සුචියක්" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "à·à·Šâ€à¶»à·’à¶:" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18684,15 +18780,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18964,9 +19060,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18982,18 +19095,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Anim පරිවර්à¶à¶±à¶º වෙනස් කරන්න" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19001,7 +19167,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19042,6 +19208,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19341,6 +19516,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19381,6 +19560,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "'%s' ගොඩනà·à¶œà·“මට à·€à·à¶»à¶¯à·’ à¶à¶»à·Šà¶š" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19399,6 +19635,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19414,6 +19666,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19525,7 +19781,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20301,13 +20558,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21399,12 +21659,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23863,6 +24117,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25181,7 +25445,7 @@ msgstr "Anim සංක්රමණය වෙනස් කරන්න" msgid "Refraction" msgstr "" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25260,10 +25524,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -25276,7 +25545,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25288,11 +25561,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25305,6 +25583,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25321,7 +25603,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25701,6 +25983,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25717,6 +26004,26 @@ msgstr "රේඛීය" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "වටිනà·à¶šà¶¸:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "වටිනà·à¶šà¶¸:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "වටිනà·à¶šà¶¸:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "à·à·Šâ€à¶»à·’à¶:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index f1c71845f8..6615ae93a0 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -230,9 +230,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "VytvoriÅ¥ adresár" @@ -392,6 +393,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Move Mode" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "ZmazaÅ¥ Vstup" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -592,7 +603,8 @@ msgstr "Popis" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -681,6 +693,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Cesta Scény:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -688,19 +705,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Kontrola Verzie" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Kontrola Verzie" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Meno Pluginu:" +msgid "Version Control Plugin Name" +msgstr "Kontrola Verzie" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -818,7 +831,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtre:" @@ -2257,8 +2271,8 @@ msgid "Open" msgstr "OtvoriÅ¥" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Majitelia:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2567,7 +2581,7 @@ msgid "Bus Options" msgstr "Možnosti pre Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "DuplikovaÅ¥" @@ -2826,6 +2840,24 @@ msgid "Choose" msgstr "Vyberte" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "BalÃk bol úspeÅ¡ne nainÅ¡talovaný!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Zlihalo:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Ukladanie súboru:" @@ -2838,6 +2870,31 @@ msgid "Packing" msgstr "Zabalovanie" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "UložiÅ¥ Ako" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Popis:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nie je možné otvoriÅ¥ súbor pre pÃsanie:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "UložiÅ¥ Ako" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2959,11 +3016,31 @@ msgstr "Vlastná debug Å¡ablóna sa nenaÅ¡la." msgid "Custom release template not found." msgstr "Vlastná release Å¡ablóna sa nenaÅ¡la." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "SpravovaÅ¥ Å ablóny" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Súbor Å ablóny sa nenaÅ¡iel:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Nedá sa otvoriÅ¥ export templates zip." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Pri 32-bitovom exporte nemôže byÅ¥ vložená PCK väÄÅ¡ia ako 4 GiB." @@ -3139,9 +3216,9 @@ msgid "Import" msgstr "Import" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Export" @@ -4300,15 +4377,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scéna" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Cesta Scény:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4436,6 +4504,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kontrola Verzie" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "PremenovaÅ¥" @@ -4464,6 +4536,10 @@ msgstr "Prepnúť režim bez rozptyľovania." msgid "Add a new scene." msgstr "PridaÅ¥ novú scénu." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scéna" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "ÃsÅ¥ do naposledy otvorenej scény." @@ -5258,6 +5334,11 @@ msgstr "" "ProsÃm pridajte spustiteľný \"preset\" v export menu alebo definujte " "existujúci \"preset\" ako spustiteľný." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "NapÃÅ¡te svoju logiku v metóde _run()." @@ -5534,7 +5615,9 @@ msgid "Draw Spaces" msgstr "Volania" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Signály:" @@ -7028,7 +7111,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtre:" @@ -7324,6 +7407,18 @@ msgid "Saving..." msgstr "Ukladám..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10323,6 +10418,7 @@ msgid "Points" msgstr "VÅ¡etky vybrané" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Signály:" @@ -11740,8 +11836,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "VÅ¡etky vybrané" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12796,8 +12893,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Režim Interpolácie" @@ -14321,31 +14417,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14486,6 +14561,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Zakladatelia Projektu" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16847,7 +16927,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Signály:" @@ -17459,7 +17539,6 @@ msgid "Use In Baked Light" msgstr "Bake Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17489,6 +17568,19 @@ msgstr "V Strede" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Signály:" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Signály:" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -19047,10 +19139,6 @@ msgid "Could not execute on device." msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19155,12 +19243,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signál" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19179,6 +19271,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Subprocess sa nedá spustiÅ¥!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19208,7 +19305,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19219,20 +19316,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Popis:" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19245,7 +19341,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19261,7 +19357,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "BalÃÄek Obsahu:" #: platform/android/export/export_plugin.cpp @@ -19270,15 +19366,13 @@ msgid "Creating APK..." msgstr "Pripájanie..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Subprocess sa nedá spustiÅ¥!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19290,7 +19384,7 @@ msgstr "Pridávanie %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Popis:" #: platform/android/export/export_plugin.cpp @@ -19532,6 +19626,17 @@ msgstr "VložiÅ¥" msgid "Custom BG Color" msgstr "VložiÅ¥" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "SpravovaÅ¥ Å ablóny" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Vlastná release Å¡ablóna sa nenaÅ¡la." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19554,24 +19659,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Nesprávna veľkosÅ¥ pÃsma." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "Popis:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Obsah:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Popis:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Popis:" @@ -19647,17 +19763,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Popis:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Error pri ukladanà TileSet-u!" #: platform/javascript/export/export.cpp @@ -19954,9 +20070,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Popis:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Subprocess sa nedá spustiÅ¥!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Signály:" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19972,18 +20107,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "NenaÅ¡li sa žiadne \"sub-resources\"." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Chyba uloženia súbora: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Smery" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Subprocess sa nedá spustiÅ¥!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Vytváranie Náhľadu" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Subprocess sa nedá spustiÅ¥!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Neplatný Názov." #: platform/osx/export/export.cpp msgid "" @@ -19993,7 +20184,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20035,6 +20226,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Nesprávna veľkosÅ¥ pÃsma." @@ -20348,6 +20548,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nepodarilo sa vymazaÅ¥ doÄasné súbory:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20394,6 +20599,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "PrilepiÅ¥ Animáciu" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Nesprávna veľkosÅ¥ pÃsma." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Neplatný Názov." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nepodarilo sa vymazaÅ¥ doÄasné súbory:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20415,6 +20680,23 @@ msgid "Invalid product version:" msgstr "Nesprávna veľkosÅ¥ pÃsma." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Nesprávna veľkosÅ¥ pÃsma." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nové Okno" @@ -20431,6 +20713,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20553,7 +20839,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "InÅ¡tancie" @@ -21383,15 +21670,19 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Od Stredu Dole" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "CestovaÅ¥" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22562,12 +22853,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25193,6 +25478,16 @@ msgid "3D Physics" msgstr "Fyzická SnÃmka %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Signály:" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Signály:" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26601,7 +26896,7 @@ msgstr "Prechody: " msgid "Refraction" msgstr "Popis:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26683,7 +26978,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "VeľkosÅ¥:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "ZmeniÅ¥ %s Typ" #: scene/resources/navigation_mesh.cpp @@ -26700,10 +27000,15 @@ msgid "Source Group Name" msgstr "Prostriedok" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Obsah:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26712,11 +27017,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Režim Interpolácie" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26729,6 +27039,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "NaÄÃtaÅ¥ predvolené" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26745,7 +27060,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27151,6 +27466,11 @@ msgid "Scenario" msgstr "Scéna" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Signály:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27168,6 +27488,26 @@ msgstr "Lineárne Vľavo" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Predvolené" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "PredzobraziÅ¥ VylepÅ¡enie" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Testovanie" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "UpraviÅ¥ Pripojenie:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 35a8a11b06..acb24489bd 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -212,9 +212,10 @@ msgid "Data" msgstr "Podatki" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Omrežje" @@ -364,6 +365,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "NaÄin Premika" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "IzbriÅ¡i Vnos" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -566,7 +577,8 @@ msgstr "Opis:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Zaženi" @@ -655,6 +667,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Pot Prizora:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -662,20 +679,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "RazliÄica:" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "VtiÄniki" +msgid "Version Control Plugin Name" +msgstr "RazliÄica:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -791,7 +803,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtri..." @@ -2279,8 +2292,8 @@ msgid "Open" msgstr "Odpri" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Lastniki:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2592,7 +2605,7 @@ msgid "Bus Options" msgstr "Možnosti Vodila" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Podvoji" @@ -2860,6 +2873,24 @@ msgid "Choose" msgstr "Izberi" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paket je UspeÅ¡no NameÅ¡Äen!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Spodletelo:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Shranjevanje Datoteke:" @@ -2872,6 +2903,31 @@ msgid "Packing" msgstr "Pakiranje" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Shrani Kot" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Mape ni mogoÄe ustvariti." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Nemorem zaÄeti podprocesa!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Datoteke ni mogoÄe odpreti za pisanje:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Shrani Kot" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2976,11 +3032,32 @@ msgstr "Predloge ni mogoÄe najti:" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Upravljaj Izvozne Predloge" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Datoteka ne obstaja." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Predloge ni mogoÄe najti:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Neveljavna izvozna predloga:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3169,9 +3246,9 @@ msgid "Import" msgstr "Uvozi" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Izvozi" @@ -4369,15 +4446,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Prizor" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Pot Prizora:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4506,6 +4574,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "RazliÄica:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "Preimenuj" @@ -4533,6 +4606,10 @@ msgstr "Preklop naÄin pisanja brez motenj." msgid "Add a new scene." msgstr "Dodaj nov Prizor." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Prizor" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Pojdi na predhodno odprti prizor." @@ -5329,6 +5406,11 @@ msgstr "" "Za to platformo ni mogoÄe najti obstojeÄih izvoznih nastavitev.\n" "V izvoznem meniju dodajte svoje nastavitve." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "NapiÅ¡ite svojo logiko v metodi _run() ." @@ -5604,7 +5686,9 @@ msgid "Draw Spaces" msgstr "Klici" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Animacijski Gradnik" @@ -7117,7 +7201,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtri..." @@ -7410,6 +7494,18 @@ msgid "Saving..." msgstr "Shranjevanje..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10511,6 +10607,7 @@ msgid "Points" msgstr "Odstrani toÄko" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Uredi Poligon" @@ -11958,7 +12055,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Pretvori V..." #: editor/plugins/sprite_editor_plugin.cpp @@ -13018,8 +13115,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "NaÄin Vrtenja" @@ -14556,32 +14652,11 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "Izvozi" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Izvozi Projekt" @@ -14725,6 +14800,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Ustanovitelji Projekta" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Upravljaj Izvozne Predloge" @@ -17123,7 +17203,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Uredi Poligon" @@ -17733,7 +17813,6 @@ msgid "Use In Baked Light" msgstr "ZapeÄi Svetlobne karte" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17763,6 +17842,19 @@ msgstr "NaÄin Vrtenja" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Animacijski Gradnik" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Animacijski Gradnik" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -19340,10 +19432,6 @@ msgid "Could not execute on device." msgstr "Mape ni mogoÄe ustvariti." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19448,12 +19536,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signali" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19472,6 +19564,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nemorem zaÄeti podprocesa!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19502,7 +19599,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19513,20 +19610,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Nemorem zaÄeti podprocesa!" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19538,7 +19634,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19554,7 +19650,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animacijska Orodja" #: platform/android/export/export_plugin.cpp @@ -19563,15 +19659,13 @@ msgid "Creating APK..." msgstr "Povezovanje..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Nemorem zaÄeti podprocesa!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19583,7 +19677,7 @@ msgstr "Filtriraj datoteke..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Nemorem zaÄeti podprocesa!" #: platform/android/export/export_plugin.cpp @@ -19826,6 +19920,17 @@ msgstr "Gradnik Prehod" msgid "Custom BG Color" msgstr "Gradnik Prehod" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Upravljaj Izvozne Predloge" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Predloge ni mogoÄe najti:" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19848,23 +19953,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Mape ni mogoÄe ustvariti." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Neveljavna izvozna predloga:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Mape ni mogoÄe ustvariti." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Vsebina:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Mape ni mogoÄe ustvariti." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "OÅ¡tevilÄenja:" @@ -19940,17 +20057,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Mape ni mogoÄe ustvariti." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Mape ni mogoÄe ustvariti." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!" #: platform/javascript/export/export.cpp @@ -20248,9 +20365,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Nemorem zaÄeti podprocesa!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nemorem zaÄeti podprocesa!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Animacijski Gradnik" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20266,18 +20402,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ni Zadetka!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Smeri" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nemorem zaÄeti podprocesa!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Ustvarjanje SliÄic" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Nemorem zaÄeti podprocesa!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Neveljavna izvozna predloga:" #: platform/osx/export/export.cpp msgid "" @@ -20287,7 +20479,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20329,6 +20521,15 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ime ni pravilen identifikator:" @@ -20645,6 +20846,11 @@ msgid "Debug Algorithm" msgstr "RazhroÅ¡Äevalnik" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Ni mogoÄe odstraniti:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20692,6 +20898,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Prilepi animacijo" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ime ni pravilen identifikator:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Neveljavno ime." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Ni mogoÄe odstraniti:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20713,6 +20979,23 @@ msgid "Invalid product version:" msgstr "Neveljavno Ime Projekta." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Uporabiti moraÅ¡ valjavno razÅ¡iritev." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20728,6 +21011,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20852,7 +21139,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Primer" @@ -21677,13 +21965,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "NaÄin Vrtenja" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22854,12 +23145,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25485,6 +25770,16 @@ msgid "3D Physics" msgstr "Fizikalni Okvir %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Animacijski Gradnik" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Animacijski Gradnik" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26891,7 +27186,7 @@ msgstr "Prehod" msgid "Refraction" msgstr "OÅ¡tevilÄenja:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26973,7 +27268,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Prilagodi Velikost:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Nastavite Tip Spremenljivke" #: scene/resources/navigation_mesh.cpp @@ -26990,10 +27290,15 @@ msgid "Source Group Name" msgstr "Viri" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Vsebina:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27002,11 +27307,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "NaÄin Vrtenja" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27019,6 +27329,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Naložite Prevzeto" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -27035,7 +27350,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27443,6 +27758,11 @@ msgid "Scenario" msgstr "Prizor" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Animacijski Gradnik" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27460,6 +27780,26 @@ msgstr "Linearno" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Prevzeto" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Predogled" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "PreskuÅ¡anje" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Napaka Pri Povezavi" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index f2095dee89..c97aac239a 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -215,9 +215,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Eksporto Projektin" @@ -378,6 +379,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Luaj Skenën" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -572,7 +582,8 @@ msgstr "Përshkrimi:" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -658,6 +669,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Rruga Skenës:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -665,20 +681,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "Versioni:" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Emri i Shtojcës:" +msgid "Version Control Plugin Name" +msgstr "Versioni:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -792,7 +803,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtrat:" @@ -2219,8 +2231,8 @@ msgid "Open" msgstr "Hap" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Pronarët e:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2531,7 +2543,7 @@ msgid "Bus Options" msgstr "Përshkrimi i Klasës" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Dyfisho" @@ -2798,6 +2810,24 @@ msgid "Choose" msgstr "Zgjidh" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paketa u instalua me sukses!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Dështoi:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Duke Ruajtur Skedarin:" @@ -2810,6 +2840,31 @@ msgid "Packing" msgstr "Duke Paketuar" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Ruaje Si" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nuk mund të krijoj folderin." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Nuk mund të hapi skedarin për të shkruajtur:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Ruaje Si" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2932,11 +2987,32 @@ msgstr "Shablloni 'Custom debug' nuk u gjet." msgid "Custom release template not found." msgstr "Shablloni 'Custom release' nuk u gjet." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Menaxho Shabllonet e Eksportit" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Skedari nuk egziston." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Skedari shabllon nuk u gjet:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Nuk mund të hapi zip-in e shablloneve të eksportimit." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3123,9 +3199,9 @@ msgid "Import" msgstr "Importo" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Eksporto" @@ -4310,15 +4386,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Skenë" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Rruga Skenës:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4445,6 +4512,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "Versioni:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "Riemërto" @@ -4472,6 +4544,10 @@ msgstr "Ndrysho metodën pa shpërqëndrime." msgid "Add a new scene." msgstr "Shto një skenë të re." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Skenë" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Shko në skenën e hapur më parë." @@ -5269,6 +5345,11 @@ msgstr "" "Nuk u gjet eksport paraprak i saktë për këtë platformë.\n" "Ju lutem shtoni një eksport paraprak të saktë në menu." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekti" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Shkruaj logjikën në metodën _run()." @@ -5541,7 +5622,9 @@ msgid "Draw Spaces" msgstr "Thërritjet" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Metoda Pa Shpërqëndrime" @@ -7022,7 +7105,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtrat:" @@ -7313,6 +7396,18 @@ msgid "Saving..." msgstr "Duke Ruajtur..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10269,6 +10364,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11668,7 +11764,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Konverto në %s" #: editor/plugins/sprite_editor_plugin.cpp @@ -12694,8 +12790,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -14167,31 +14262,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14331,6 +14405,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Themeluesit e Projektit" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Menaxho Shabllonet e Eksportit" @@ -16669,7 +16748,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Krijo një Poligon" @@ -17265,7 +17344,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17295,6 +17373,19 @@ msgstr "Fshi Nyjen" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Metoda Pa Shpërqëndrime" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Metoda Pa Shpërqëndrime" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18831,10 +18922,6 @@ msgid "Could not execute on device." msgstr "Nuk mund të krijoj folderin." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18938,12 +19025,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinjalet" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18962,6 +19053,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18991,7 +19087,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19002,20 +19098,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Nuk mund të fillojë subprocess-in!" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19027,7 +19122,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19043,7 +19138,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Instaluesi Paketave" #: platform/android/export/export_plugin.cpp @@ -19052,15 +19147,13 @@ msgid "Creating APK..." msgstr "Duke u lidhur..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "Nuk mund të fillojë subprocess-in!" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19072,7 +19165,7 @@ msgstr "Filtro Skedarët..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Nuk mund të fillojë subprocess-in!" #: platform/android/export/export_plugin.cpp @@ -19312,6 +19405,17 @@ msgstr "Dyfisho Nyjet" msgid "Custom BG Color" msgstr "Dyfisho Nyjet" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Menaxho Shabllonet e Eksportit" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Shablloni 'Custom release' nuk u gjet." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19333,23 +19437,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "" +#, fuzzy +msgid "Could not open template for export: \"%s\"." +msgstr "Nuk mund të krijoj folderin." #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Duhet të perdorësh një shtesë të lejuar." #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Nuk mund të krijoj folderin." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Shfaqe në 'FileSystem'" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Nuk mund të krijoj folderin." #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Enumeracionet:" @@ -19425,17 +19541,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Nuk mund të krijoj folderin." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Nuk mund të krijoj folderin." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Gabim gjatë ruajtjes së TileSet-it!" #: platform/javascript/export/export.cpp @@ -19728,9 +19844,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Metoda Pa Shpërqëndrime" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19746,18 +19881,74 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Konstantet" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Gabim gjatë ruajtjes së TileSet-it!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Përshkrimi:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Duke Krijuar Kornizat" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "Nuk mund të fillojë subprocess-in!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Rruga e pasaktë." #: platform/osx/export/export.cpp msgid "" @@ -19767,7 +19958,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19808,6 +19999,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Projekti" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -20118,6 +20318,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nuk mund të heqësh:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20164,6 +20369,66 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Konstantet" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Argumente të gabuar për të ndërtuar '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Emër i palejuar." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Nuk mund të heqësh:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20185,6 +20450,23 @@ msgid "Invalid product version:" msgstr "Emri i grupit i pasakt." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Duhet të perdorësh një shtesë të lejuar." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20200,6 +20482,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20318,7 +20604,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instanco" @@ -21114,13 +21401,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Fshi Nyjen" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22245,12 +22535,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24802,6 +25086,16 @@ msgid "3D Physics" msgstr "Hapi i Fizikës %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Metoda Pa Shpërqëndrime" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Metoda Pa Shpërqëndrime" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26178,7 +26472,7 @@ msgstr "" msgid "Refraction" msgstr "Enumeracionet:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26258,8 +26552,12 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Sampling" +msgstr "" + +#: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Partition Type" msgstr "Ndrysho Tipin e %s" #: scene/resources/navigation_mesh.cpp @@ -26276,7 +26574,11 @@ msgid "Source Group Name" msgstr "Resursi" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26288,11 +26590,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Hap të Fundit" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26305,6 +26612,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Ngarko të Parazgjedhur" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26321,7 +26633,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26719,6 +27031,11 @@ msgid "Scenario" msgstr "Skenë" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Metoda Pa Shpërqëndrime" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26736,6 +27053,26 @@ msgstr "E Parazgjedhur" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "E Parazgjedhur" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "E Parazgjedhur" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "E Parazgjedhur" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Modifiko Lidhjen: " + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index e3df7d0c64..55387743e7 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -228,9 +228,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Мрежни ОÑматрач" @@ -391,6 +392,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Режим померања" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Обриши улаз" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp #, fuzzy @@ -595,7 +606,8 @@ msgstr "ОпиÑ" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Покрени" @@ -688,6 +700,11 @@ msgid "Main Run Args" msgstr "Ðргументи Главне Сцене" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Пут Ñцене:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -695,20 +712,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy -msgid "Version Control" -msgstr "Верзија:" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "VCS(СиÑтем Контроле Верзије)" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Име Прикључка :" +msgid "Version Control Plugin Name" +msgstr "Верзија:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -828,7 +840,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Филтери..." @@ -2389,8 +2402,8 @@ msgid "Open" msgstr "Отвори" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ВлаÑници:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2705,7 +2718,7 @@ msgid "Bus Options" msgstr "ПоÑтавке баÑа" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дуплирај" @@ -2975,6 +2988,25 @@ msgid "Choose" msgstr "Одабери" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Копирај Путању Чвора" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Пакет је инÑталиран уÑпешно!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "ÐеуÑпех:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Складиштење датотеке:" @@ -2989,6 +3021,31 @@ msgstr "Паковање" #: editor/editor_export.cpp #, fuzzy +msgid "Save PCK" +msgstr "Сачувај као" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ÐеуÑпех при прављењу директоријума." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "ÐеуÑпело упиÑивање фајла:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Ðе могу отворити датотеку за пиÑање:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Сачувај као" + +#: editor/editor_export.cpp +#, fuzzy msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -3116,13 +3173,34 @@ msgstr "ШаблонÑка датотека није пронађена:\n" msgid "Custom release template not found." msgstr "Прилагођени образци објаве ниÑу пронађени." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Управљај извозним шаблонима" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Путања не поÑтоји." + #: editor/editor_export.cpp platform/javascript/export/export.cpp #, fuzzy -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." msgstr "ШаблонÑка датотека није пронађена:\n" #: editor/editor_export.cpp #, fuzzy +msgid "Failed to copy export template." +msgstr "Ðеважећи извозни нацрт:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr " Пуњење" + +#: editor/editor_export.cpp +#, fuzzy msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Ðа 32-битним извозима уграђени PCK не може бити већи од 4 GiB." @@ -3316,9 +3394,9 @@ msgid "Import" msgstr "Увоз" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Извоз" @@ -4551,15 +4629,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Сцена" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Пут Ñцене:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4690,6 +4759,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "Верзија:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "Преименуј" @@ -4717,6 +4791,10 @@ msgstr "Укљ./ИÑкљ. режим без Ñметње." msgid "Add a new scene." msgstr "Додај нову Ñцену." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Сцена" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Отвори претходну Ñцену." @@ -5567,6 +5645,11 @@ msgstr "" "ÐиÑу пронађене поÑтавке извоза за ову платформу.\n" "Молим, додајте поÑтавке у менију за извоз." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Пројекат" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Пиши логику у _run() методи." @@ -5852,7 +5935,9 @@ msgid "Draw Spaces" msgstr "Позиви цртања" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Ðаправи навигациону мрежу" @@ -7425,7 +7510,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Филтери..." @@ -7723,6 +7808,18 @@ msgid "Saving..." msgstr "Чување..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10989,6 +11086,7 @@ msgid "Points" msgstr "Помери тачку" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Полигон->UV" @@ -12518,7 +12616,7 @@ msgstr "Ðеважећа геометрија, неуÑпеша замена ÑÐ #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Претвори у велика Ñлова" #: editor/plugins/sprite_editor_plugin.cpp @@ -13640,8 +13738,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Одабери претходни облик, под-плочицу, или плочицу." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Режим ротације" @@ -15427,40 +15524,11 @@ msgstr "Обриши поÑтавку „%s“?" #: editor/project_export.cpp #, fuzzy -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"ÐеуÑпешан извоз пројекта за плазформу '%s'.\n" -"Изгледа да недоÑтају извозни нацрти или ниÑу иÑправни." - -#: editor/project_export.cpp -#, fuzzy -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"ÐеуÑпешан извоз пројекта за платформу '%s'.\n" -"Ово може бити због проблема Ñа подешавањима у извозним поÑтавкама или твојим " -"извозним подешавањима." - -#: editor/project_export.cpp -#, fuzzy msgid "Exporting All" msgstr "Извоз" #: editor/project_export.cpp #, fuzzy -msgid "The given export path doesn't exist:" -msgstr "Путања не поÑтоји." - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Извозни шаблони за ову платформу или ниÑу пронађени или Ñу иÑкварене:" - -#: editor/project_export.cpp -#, fuzzy msgid "Export Path" msgstr "Извези пројекат" @@ -15615,6 +15683,11 @@ msgid "Export templates for this platform are missing:" msgstr "Извозни шаблони за ову платформу ниÑу пронађени:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ОÑнивачи пројекта" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Управљај извозним шаблонима" @@ -18367,7 +18440,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Полигон->UV" @@ -19016,7 +19089,6 @@ msgid "Use In Baked Light" msgstr "Изпеци МапеСенчења" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -19046,6 +19118,19 @@ msgstr "Средина" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Ðаправи навигациону мрежу" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Ðаправи навигациону мрежу" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -20698,10 +20783,6 @@ msgid "Could not execute on device." msgstr "ÐеуÑпех при прављењу директоријума." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -20822,12 +20903,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Сигнали" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -20847,6 +20932,11 @@ msgid "Could not find keystore, unable to export." msgstr "ÐеуÑпешно отварање нацрта за извоз:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Ðе могу покренути подпроцеÑ!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -20877,7 +20967,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -20892,9 +20982,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Верзија Android изградње Ñе не подудара:\n" @@ -20904,12 +20992,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "ÐеуÑпешна измена project.godot-а у путањи пројекта." #: platform/android/export/export_plugin.cpp @@ -20925,7 +21013,7 @@ msgstr "Изградња Android Пројекта (gradle)" #: platform/android/export/export_plugin.cpp #, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Изградња Android пројекта неуÑпешна, провери излаз за грешке.\n" @@ -20943,7 +21031,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Ðнимација није нађена: '%s'" #: platform/android/export/export_plugin.cpp @@ -20953,15 +21041,12 @@ msgstr "Прављење контура..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "ÐеуÑпешно отварање нацрта за извоз:" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -20973,7 +21058,7 @@ msgstr "Додавање %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "ÐеуÑпело упиÑивање фајла:" #: platform/android/export/export_plugin.cpp @@ -21217,6 +21302,17 @@ msgstr "Ðаправи чвор" msgid "Custom BG Color" msgstr "Ðаправи чвор" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Управљај извозним шаблонима" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Прилагођени образци објаве ниÑу пронађени." + #: platform/iphone/export/export.cpp #, fuzzy msgid "App Store Team ID not specified - cannot configure the project." @@ -21245,25 +21341,34 @@ msgstr "Покрени извезени HTML у уобичајеном Ð¿Ñ€ÐµÑ‚Ñ #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "ÐеуÑпешно отварање нацрта за извоз:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "Ðеважећи извозни нацрт:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "ÐеуÑпело упиÑивање фајла:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ПоÑтави дршку" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "ÐеуÑпело упиÑивање фајла:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "ОдвојеноÑÑ‚:" @@ -21339,17 +21444,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "ÐеуÑпешно читаље произвољне HTML шкољке:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "ÐеуÑпех при прављењу директоријума." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Грешка памћена Ñцена." #: platform/javascript/export/export.cpp @@ -21649,9 +21754,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "ÐеуÑпело упиÑивање фајла:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Ðе могу покренути подпроцеÑ!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Локализација" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -21667,21 +21791,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Ðије пронађено!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Грешка при чувању TileSet!" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Смерови" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Ðе могу покренути подпроцеÑ!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Прављење приказа" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "ÐеуÑпешно отварање нацрта за извоз:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ðеважећи извозни нацрт:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -21689,7 +21868,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -21731,6 +21910,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Пројекат" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "ÐеуÑпешна измена project.godot-а у путањи пројекта." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ðеважећи идентификатор:" @@ -22056,6 +22245,11 @@ msgid "Debug Algorithm" msgstr "Дебагер" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "ÐеуÑпех при чувању теме:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -22103,6 +22297,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "ÐаÑумична ротација:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "ÐеуÑпешно отварање нацрта за извоз:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "ÐеуÑпешно отварање нацрта за извоз:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "ÐеуÑпешно отварање нацрта за извоз:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "ÐеуÑпешно отварање нацрта за извоз:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ðеважећи идентификатор:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ðеважеће име." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "ÐеуÑпех при чувању теме:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -22124,6 +22382,23 @@ msgid "Invalid product version:" msgstr "Ðеважећи GUID продукт." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Мора Ñе кориÑтити важећа екÑтензија." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Ðов Прозор" @@ -22140,6 +22415,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -22268,7 +22547,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Одабери ОдÑтојање:" @@ -23143,18 +23423,19 @@ msgstr "" "радио. Молимо поÑтави оÑобину или нацртај многоугао." #: scene/2d/navigation_polygon.cpp -#, fuzzy -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"ИнÑтанцаÐавигационогМногоугла мора бити дете или прадете Ðавигација2Д чвору. " -"Само обезбеђује навигационе податке." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Средина Доле" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Путуј" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -24421,15 +24702,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -#, fuzzy -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"ÐавМрежнаИнÑтанца мора бити дете или прадете Ðавигационог чвора. Само " -"обезбећује навигационе податке." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -27178,6 +27450,16 @@ msgid "3D Physics" msgstr "Слика физике %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Ðаправи навигациону мрежу" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Ðаправи навигациону мрежу" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -28605,7 +28887,7 @@ msgstr "Прелаз:" msgid "Refraction" msgstr "ОдвојеноÑÑ‚:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -28690,7 +28972,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Скала: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "ПоÑтави Ð’Ñ€Ñту Променљиве" #: scene/resources/navigation_mesh.cpp @@ -28708,10 +28995,15 @@ msgid "Source Group Name" msgstr "Извор" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Ðргументи Главне Сцене" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -28721,11 +29013,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Режим ротације" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Споји од Ñцене" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -28739,6 +29036,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Учитај уобичајено" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Одабери ОдÑтојање:" @@ -28756,7 +29058,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -29174,6 +29476,11 @@ msgid "Scenario" msgstr "Сцена" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Ðаправи навигациону мрежу" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -29191,6 +29498,26 @@ msgstr "Леви линеарни" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Уобичајено" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Преглед" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ТеÑтирање" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Повезивање не уÑпешно" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 1ae8e98d5d..21d94999a2 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -213,9 +213,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -370,6 +371,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Napravi" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -559,7 +569,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -645,24 +656,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -771,7 +781,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filtriraj signale" @@ -2193,8 +2204,8 @@ msgid "Open" msgstr "Otvori" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Vlasnici Od:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2488,7 +2499,7 @@ msgid "Bus Options" msgstr "PodeÅ¡avanja Magistrale" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2744,6 +2755,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2756,6 +2783,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2859,8 +2906,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3030,9 +3094,9 @@ msgid "Import" msgstr "" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4109,14 +4173,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4236,6 +4292,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Animacija Preimenuj Kanal" @@ -4264,6 +4324,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4994,6 +5058,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Izmjeni Selekciju Krivulje" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5253,7 +5322,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Napravi" @@ -6669,7 +6740,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filtriraj signale" @@ -6952,6 +7023,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9839,6 +9922,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Poligoni" @@ -11194,8 +11278,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Konvertuj u CPUParticles2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12173,8 +12258,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13641,31 +13725,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13800,6 +13863,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Izmjeni Selekciju Krivulje" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16085,7 +16153,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Poligoni" @@ -16666,7 +16734,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16695,6 +16762,19 @@ msgstr "Centriraj ÄŒvor" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Napravi" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Napravi" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18180,10 +18260,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18287,12 +18363,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Animacija Uduplaj KljuÄeve" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18308,6 +18388,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18336,7 +18420,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18347,19 +18431,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18372,7 +18454,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18387,7 +18469,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18395,15 +18477,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18413,7 +18492,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18649,6 +18728,15 @@ msgstr "Animacija Uduplaj KljuÄeve" msgid "Custom BG Color" msgstr "Animacija Uduplaj KljuÄeve" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18670,19 +18758,29 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Nedozvoljen indeks tipa %s za bazu tipa %s" + +#: platform/javascript/export/export.cpp +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Izmeni Konekciju:" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18759,15 +18857,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -19044,9 +19142,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Napravi" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19062,18 +19177,71 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Identitet nije pronaÄ‘en." #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Sve sekcije" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Homogenost Boje." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19081,7 +19249,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19122,6 +19290,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Izmjeni Selekciju Krivulje" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19421,6 +19598,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19465,6 +19646,64 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Kontanta" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Neispravni argumenti za konstrukciju '%s'" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19483,6 +19722,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19498,6 +19753,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19612,7 +19871,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20402,13 +20662,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Centriraj ÄŒvor" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21523,12 +21786,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24028,6 +24285,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Napravi" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Napravi" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25379,7 +25646,7 @@ msgstr "Tranzicija: " msgid "Refraction" msgstr "Odvajanje:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25457,8 +25724,14 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "" +#, fuzzy +msgid "Sampling" +msgstr "Razmera" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "Odvajanje:" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25473,7 +25746,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25485,11 +25762,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Uduplaj Selekciju" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25502,6 +25784,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25518,7 +25804,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25903,6 +26189,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Napravi" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25919,6 +26210,26 @@ msgstr "Levi Linearni" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Vrednost:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Traži Zamenu za:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Traži Zamenu za:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Izmeni Konekciju:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index c7d5e874e1..54655bcecf 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -243,9 +243,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "Nätverksprofilerare" @@ -404,6 +405,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Växla Läge" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -603,7 +613,8 @@ msgstr "Beskrivning" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Kör" @@ -693,6 +704,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Scen Filsökväg:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -700,19 +716,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Versionshantering" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Versionshantering" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Plugin Namn:" +msgid "Version Control Plugin Name" +msgstr "Versionshantering" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -829,7 +841,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Filter:" @@ -2263,8 +2276,8 @@ msgid "Open" msgstr "Öppna" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Ägare av:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2570,7 +2583,7 @@ msgid "Bus Options" msgstr "Buss-alternativ" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Duplicera" @@ -2828,6 +2841,25 @@ msgid "Choose" msgstr "Välj" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Kopiera Nod-Sökväg" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paketet installerades!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Misslyckades:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Lagrar Fil:" @@ -2840,6 +2872,31 @@ msgid "Packing" msgstr "Packar" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Spara Som" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Kunde inte skapa mapp." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Kunde inte exportera projektfiler" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Kan inte öppna fil för skrivande:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Spara Som" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2957,11 +3014,32 @@ msgstr "Mallfil hittades inte." msgid "Custom release template not found." msgstr "Anpassad release mall hittades inte." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Hantera Mallar" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Den angivna export vägen finns inte:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Mallfil hittades inte:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Hantera exportmallar..." + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Den inbäddade PCK fÃ¥r inte vara större än 4 GiB pÃ¥ 32 bitars exporter." @@ -3141,9 +3219,9 @@ msgid "Import" msgstr "Importera" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Exportera" @@ -4347,15 +4425,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Scen" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Scen Filsökväg:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4482,6 +4551,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versionshantering" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Byt namn" @@ -4510,6 +4583,10 @@ msgstr "Växla distraktionsfritt läge." msgid "Add a new scene." msgstr "Lägg till en ny scen." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Scen" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "GÃ¥ till föregÃ¥ende öppna scen." @@ -5272,6 +5349,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Projekt" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Skriv din logik i _run() metoden." @@ -5549,7 +5631,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "Animations-Node" @@ -7064,7 +7148,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Filter:" @@ -7357,6 +7441,18 @@ msgid "Saving..." msgstr "Sparar..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10390,6 +10486,7 @@ msgid "Points" msgstr "Flytta Ner" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "Redigera Polygon" @@ -11827,7 +11924,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "Konvertera till %s" #: editor/plugins/sprite_editor_plugin.cpp @@ -12876,8 +12973,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "Raw-Läge" @@ -14382,32 +14478,11 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "Exportera" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Den angivna export vägen finns inte:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Export Path" msgstr "Exportera Projekt" @@ -14551,6 +14626,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projektgrundare" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16921,7 +17001,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Redigera Polygon" @@ -17535,7 +17615,6 @@ msgid "Use In Baked Light" msgstr "Höger" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17565,6 +17644,19 @@ msgstr "Skapa Node" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Animations-Node" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Animations-Node" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19116,10 +19208,6 @@ msgid "Could not execute on device." msgstr "Kunde inte skapa mapp." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19223,12 +19311,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Signaler" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19247,6 +19339,11 @@ msgid "Could not find keystore, unable to export." msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Kunde inte starta underprocess!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19277,7 +19374,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19288,20 +19385,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Kunde inte exportera projektfiler" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -19313,7 +19409,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19329,7 +19425,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Animeringsverktyg" #: platform/android/export/export_plugin.cpp @@ -19339,15 +19435,12 @@ msgstr "Skapar konturer..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "Kunde inte öppna mall för export:" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19358,7 +19451,8 @@ msgid "Adding files..." msgstr "Lägger till %s..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Kunde inte exportera projektfiler" #: platform/android/export/export_plugin.cpp @@ -19600,6 +19694,17 @@ msgstr "Klipp ut Noder" msgid "Custom BG Color" msgstr "Klipp ut Noder" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Hantera Mallar" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Anpassad release mall hittades inte." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19621,23 +19726,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Kör exporterad HTML i systemets standardwebbläsare." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Kunde inte öppna mall för export:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "MÃ¥ste använda en giltigt filändelse." #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Kunde inte skriva till filen:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "InnehÃ¥ll:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Kunde inte skriva till filen:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Sektioner:" @@ -19713,15 +19830,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Kunde inte skriva till filen:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Kunde inte skapa HTTP-serverkatalog:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Fel vid start av HTTP-server:" #: platform/javascript/export/export.cpp @@ -20019,9 +20138,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Kunde inte exportera projektfiler" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Kunde inte starta underprocess!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Lokalisering" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20037,21 +20175,76 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Hittades inte!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Fel vid sparande av fil: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Riktningar" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Kunde inte starta underprocess!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Skapar Miniatyr" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Kunde inte öppna mall för export:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ogiltig Sökväg." + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20059,7 +20252,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20101,6 +20294,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Projekt" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Kunde inte öppna mall för export:" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Ogiltig identifierare:" @@ -20413,6 +20616,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Kan inte spara tema till fil:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20459,6 +20667,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Slumpmässig Rotation:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Ogiltig identifierare:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ogiltigt namn." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Kan inte spara tema till fil:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20480,6 +20752,23 @@ msgid "Invalid product version:" msgstr "Ogiltig produkt GUID." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "MÃ¥ste använda en giltigt filändelse." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Nytt Fönster" @@ -20496,6 +20785,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20619,7 +20912,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instans" @@ -21445,15 +21739,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -"NavigationPolygonInstance mÃ¥ste vara ett barn eller barnbarn till en " -"Navigation2D-Node. Den ger bara navigationsdata." -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Botten" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22634,12 +22929,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25265,6 +25554,16 @@ msgid "3D Physics" msgstr "Fysik Bildruta %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Animations-Node" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Animations-Node" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26662,7 +26961,7 @@ msgstr "ÖvergÃ¥ng: " msgid "Refraction" msgstr "Sektioner:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26744,7 +27043,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Skalning: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Ändra Bas Typ:" #: scene/resources/navigation_mesh.cpp @@ -26761,10 +27065,15 @@ msgid "Source Group Name" msgstr "Källa" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "InnehÃ¥ll:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26773,11 +27082,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "Raw-Läge" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26790,6 +27104,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Ladda Standard" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26806,7 +27125,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27216,6 +27535,11 @@ msgid "Scenario" msgstr "Scen" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Animations-Node" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27233,6 +27557,26 @@ msgstr "Linjär" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Standard" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Förhandsgranska" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Höger" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Redigera Koppling:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/te.po b/editor/translations/te.po index 9544d6f702..7e39aed20c 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -200,9 +200,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -353,6 +354,14 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +msgid "Mouse Mode" +msgstr "" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -535,7 +544,8 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -618,24 +628,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -743,7 +752,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "" @@ -2128,7 +2138,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2419,7 +2429,7 @@ msgid "Bus Options" msgstr "" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2675,6 +2685,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2687,6 +2713,26 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2787,8 +2833,25 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -2958,9 +3021,9 @@ msgid "Import" msgstr "దిగà±à°®à°¤à°¿" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4036,14 +4099,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4158,6 +4213,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "" @@ -4185,6 +4244,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -4912,6 +4975,10 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5165,7 +5232,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "" @@ -6547,7 +6616,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "" @@ -6815,6 +6884,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9683,6 +9764,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11034,7 +11116,7 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11993,8 +12075,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "" @@ -13410,31 +13491,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13567,6 +13627,10 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +msgid "Project Export" +msgstr "" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -15814,7 +15878,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "" @@ -16376,7 +16440,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16402,6 +16465,18 @@ msgstr "" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "గణనలà±" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +msgid "Navigation Layers" +msgstr "" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -17837,10 +17912,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -17944,12 +18015,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "నోడà±" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -17965,6 +18040,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -17993,7 +18072,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18004,19 +18083,17 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18029,7 +18106,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18044,7 +18121,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18052,15 +18129,12 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18070,7 +18144,7 @@ msgid "Adding files..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +msgid "Could not export project files." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18296,6 +18370,15 @@ msgstr "" msgid "Custom BG Color" msgstr "" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18317,19 +18400,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." +msgstr "" + +#: platform/javascript/export/export.cpp +msgid "Invalid export template: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +msgid "Could not write file: \"%s\"." msgstr "" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "గణనలà±" + #: platform/javascript/export/export.cpp -msgid "Could not write file:" +msgid "Could not read file: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18402,15 +18494,15 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -18677,9 +18769,26 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "గణనలà±" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -18695,15 +18804,67 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "గణనలà±" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." msgstr "" #: platform/osx/export/export.cpp @@ -18714,7 +18875,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -18755,6 +18916,14 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19051,6 +19220,10 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19091,6 +19264,63 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "à°¸à±à°¥à°¿à°°à°¾à°‚కాలà±" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19109,6 +19339,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19124,6 +19370,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19232,7 +19482,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -19987,13 +20238,15 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21052,12 +21305,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -23425,6 +23672,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "గణనలà±" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "గణనలà±" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -24653,7 +24910,7 @@ msgstr "" msgid "Refraction" msgstr "గణనలà±" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -24727,10 +24984,15 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +msgid "Sampling" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" +msgstr "గణనలà±" + +#: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" msgstr "" @@ -24743,7 +25005,11 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24755,11 +25021,15 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -24771,6 +25041,10 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -24787,7 +25061,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -25147,6 +25421,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "గణనలà±" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -25162,6 +25441,22 @@ msgstr "" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +msgid "Default Map Up" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Size" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Height" +msgstr "" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Edge Connection Margin" +msgstr "" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index c291d5f337..cf482896d4 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -235,9 +235,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "โปรไฟล์เน็ตเวิร์à¸" @@ -399,6 +400,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "โหมดเคลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "ลบà¸à¸´à¸™à¸žà¸¸à¸•" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -600,7 +611,8 @@ msgstr "รายละเà¸à¸µà¸¢à¸”" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "เริ่ม" @@ -691,6 +703,11 @@ msgid "Main Run Args" msgstr "ตัวà¹à¸›à¸£à¸‰à¸²à¸à¸«à¸¥à¸±à¸:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¸‰à¸²à¸:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -698,19 +715,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "เวà¸à¸£à¹Œà¸Šà¸±à¸™à¸„à¸à¸™à¹‚ทรล" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "ระบบจัดà¸à¸²à¸£à¸‹à¸à¸£à¹Œà¸ª (Version Control)" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "ชื่à¸à¸›à¸¥à¸±à¹Šà¸à¸à¸´à¸™:" +msgid "Version Control Plugin Name" +msgstr "เวà¸à¸£à¹Œà¸Šà¸±à¸™à¸„à¸à¸™à¹‚ทรล" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -830,7 +843,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "ตัวà¸à¸£à¸à¸‡:" @@ -2277,8 +2291,8 @@ msgid "Open" msgstr "เปิด" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "เจ้าขà¸à¸‡à¸‚à¸à¸‡:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2586,7 +2600,7 @@ msgid "Bus Options" msgstr "ตัวเลืà¸à¸ Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ทำซ้ำ" @@ -2846,6 +2860,25 @@ msgid "Choose" msgstr "เลืà¸à¸" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "คัดลà¸à¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¹‚หนด" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "ติดตั้งà¹à¸žà¸„เà¸à¸ˆà¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸¡à¸šà¸¹à¸£à¸“์!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "ผิดพลาด:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "เà¸à¹‡à¸šà¹„ฟล์:" @@ -2858,6 +2891,31 @@ msgid "Packing" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸§à¸šà¸£à¸§à¸¡" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "บันทึà¸à¹€à¸›à¹‡à¸™" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "เขียนไฟล์ไม่ได้:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "เปิดไฟล์เพื่à¸à¹€à¸‚ียนไม่ได้:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "บันทึà¸à¹€à¸›à¹‡à¸™" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2973,11 +3031,33 @@ msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¸”ีบัà¸à¹à¸šà¸šà¸ msgid "Custom release template not found." msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¹€à¸œà¸¢à¹à¸žà¸£à¹ˆà¸—ี่à¸à¸³à¸«à¸™à¸”เà¸à¸‡" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลต" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "ไม่พบที่à¸à¸¢à¸¹à¹ˆà¸ªà¹ˆà¸‡à¸à¸à¸:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "ไม่พบไฟล์เทมเพลต:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "เทมเพลตส่งà¸à¸à¸à¹„ม่ถูà¸à¸•้à¸à¸‡:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "à¸à¸²à¸£à¹€à¸§à¹‰à¸™à¸Šà¹ˆà¸à¸‡" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸à¹à¸šà¸š 32 bit PCK à¹à¸šà¸šà¸à¸±à¸‡à¸•ัวไม่สามารถใหà¸à¹ˆà¹„ด้เà¸à¸´à¸™ 4 GiB" @@ -3153,9 +3233,9 @@ msgid "Import" msgstr "นำเข้า" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "ส่งà¸à¸à¸" @@ -4297,15 +4377,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "ฉาà¸" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¸‰à¸²à¸:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4434,6 +4505,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "เวà¸à¸£à¹Œà¸Šà¸±à¸™à¸„à¸à¸™à¹‚ทรล" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "เปลี่ยนชื่à¸" @@ -4462,6 +4537,10 @@ msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™" msgid "Add a new scene." msgstr "เพิ่มฉาà¸à¹ƒà¸«à¸¡à¹ˆ" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "ฉาà¸" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "ไปยังฉาà¸à¸—ี่เพิ่งเปิด" @@ -5244,6 +5323,11 @@ msgstr "" "ไม่มีพรีเซ็ตส่งà¸à¸à¸à¸—ี่สามารถรันเà¸à¸¡à¹„ด้ขà¸à¸‡à¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰\n" "à¸à¸£à¸¸à¸“าเพิ่มพรีเซ็ตส่งà¸à¸à¸à¸—ี่รันเà¸à¸¡à¹„ด้ในเมนูส่งà¸à¸à¸à¸«à¸£à¸·à¸à¸—ำให้พรีเซ็ตเดิมสามารถรันได้" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "โปรเจà¸à¸•์" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "เขียนโปรà¹à¸à¸£à¸¡à¹ƒà¸™à¹€à¸¡à¸—็à¸à¸” _run()" @@ -5527,7 +5611,9 @@ msgid "Draw Spaces" msgstr "จำนวนครั้งในà¸à¸²à¸£à¸§à¸²à¸”" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "ตัวนำทาง" @@ -7041,7 +7127,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "ตัวà¸à¸£à¸à¸‡:" @@ -7338,6 +7424,18 @@ msgid "Saving..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10311,6 +10409,7 @@ msgid "Points" msgstr "จุด" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "โพลีà¸à¸à¸™" @@ -11726,7 +11825,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "เรขาคณิตผิดพลาด ไม่สามารถà¹à¸—นที่ด้วย mesh" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™ Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12779,8 +12879,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "เลืà¸à¸à¸£à¸¹à¸›à¸£à¹ˆà¸²à¸‡, ไทล์ย่à¸à¸¢à¸«à¸£à¸·à¸à¹„ทล์à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "ขà¸à¸šà¹€à¸‚ต" @@ -14292,35 +14391,10 @@ msgid "Delete preset '%s'?" msgstr "ลบพรีเซ็ต '%s'?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"ล้มเหลวในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸à¹‚ปรเจà¸à¸•์สำหรับà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡ '%s'\n" -"เทมเพลตส่งà¸à¸à¸à¸ªà¸¹à¸à¸«à¸²à¸¢à¸«à¸£à¸·à¸à¸œà¸´à¸”พลาด" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"เà¸à¸´à¸”ข้à¸à¸œà¸´à¸”พลาดในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸à¹‚ปรเจà¸à¸•์ไปยังà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡ '%s'\n" -"ปัà¸à¸«à¸²à¸à¸²à¸ˆà¹€à¸à¸´à¸”จาà¸à¸„่าที่ตั้งในพรีเซ็ตà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸à¸«à¸£à¸·à¸à¸à¸²à¸£à¸•ั้งค่าà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ส่งà¸à¸à¸à¸—ั้งหมด" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "ไม่พบที่à¸à¸¢à¸¹à¹ˆà¸ªà¹ˆà¸‡à¸à¸à¸:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "เทมเพลตส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰à¸ªà¸¹à¸à¸«à¸²à¸¢/เสียหาย:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "ไดเรà¸à¸—à¸à¸£à¸µà¸ªà¹ˆà¸‡à¸à¸à¸" @@ -14468,6 +14542,11 @@ msgid "Export templates for this platform are missing:" msgstr "ไม่พบเทมเพลตส่งà¸à¸à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟà¸à¸£à¹Œà¸¡à¸™à¸µà¹‰:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ผู้ริเริ่มโครงà¸à¸²à¸£" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลตส่งà¸à¸à¸" @@ -16864,7 +16943,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "โพลีà¸à¸à¸™" @@ -17489,7 +17568,6 @@ msgid "Use In Baked Light" msgstr "สร้าง Lightmaps" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17519,6 +17597,19 @@ msgstr "à¸à¸¥à¸²à¸‡" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "ตัวนำทาง" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "โหมด Navigation" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "ระนาบถัดไป" @@ -19074,10 +19165,6 @@ msgid "Could not execute on device." msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "ไม่สามารถหาเครื่à¸à¸‡à¸¡à¸·à¸ 'apksigner'" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19185,12 +19272,16 @@ msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่à¸à¹€ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "สัà¸à¸à¸²à¸“" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19208,6 +19299,11 @@ msgid "Could not find keystore, unable to export." msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "ไม่สามารถเริ่มขั้นตà¸à¸™à¸¢à¹ˆà¸à¸¢!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19238,7 +19334,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "ชื่à¸à¹„ฟล์ผิดพลาด! à¹à¸à¸™à¸”รà¸à¸¢à¸”์ APK จำเป็นต้à¸à¸‡à¸¡à¸µà¸™à¸²à¸¡à¸ªà¸à¸¸à¸¥ *.apk" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19249,10 +19345,9 @@ msgstr "" "พยายามสร้างจาà¸à¹€à¸—มเพลตที่สร้างขึ้นเà¸à¸‡ à¹à¸•่ไม่มีข้à¸à¸¡à¸¹à¸¥à¹€à¸§à¸à¸£à¹Œà¸Šà¸±à¸™ โปรดติดตั้งใหม่จาà¸à¹€à¸¡à¸™à¸¹ \"โปรเจà¸à¸•์\"" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "เวà¸à¸£à¹Œà¸Šà¸±à¸™à¸šà¸´à¸§à¸”์ Android ไม่ตรงà¸à¸±à¸™:\n" @@ -19262,11 +19357,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "ไม่สามารถส่งà¸à¸à¸à¹„ฟล์โปรเจคไปยังโปรเจค gradle ได้\n" #: platform/android/export/export_plugin.cpp @@ -19279,8 +19375,9 @@ msgid "Building Android Project (gradle)" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¹‚ปรเจคà¹à¸à¸™à¸”รà¸à¸¢à¸”์ (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ปรเจà¸à¸•์à¹à¸à¸™à¸”รà¸à¸¢à¸”์ล้มเหลว ตรวจสà¸à¸šà¸œà¸¥à¸¥à¸±à¸žà¸˜à¹Œà¹€à¸žà¸·à¹ˆà¸à¸«à¸²à¸‚้à¸à¸œà¸´à¸”พลาด\n" @@ -19299,7 +19396,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "ไม่พบà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™: '%s'" #: platform/android/export/export_plugin.cpp @@ -19308,17 +19405,15 @@ msgid "Creating APK..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸„à¸à¸™à¸—ัวร์..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "ไม่พบเทมเพลต APK สำหรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19330,7 +19425,7 @@ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡ %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "เขียนไฟล์ไม่ได้:" #: platform/android/export/export_plugin.cpp @@ -19572,6 +19667,17 @@ msgstr "ตัดโหนด" msgid "Custom BG Color" msgstr "ตัดโหนด" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลต" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¹€à¸œà¸¢à¹à¸žà¸£à¹ˆà¸—ี่à¸à¸³à¸«à¸™à¸”เà¸à¸‡" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID ยังไม่ได้ระบุ - ไม่สามารถà¸à¸³à¸«à¸™à¸”ค่าให้โปรเจà¸à¸•์ได้" @@ -19593,23 +19699,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "รันไฟล์ HTML ที่ส่งà¸à¸à¸à¹ƒà¸™à¹€à¸šà¸£à¸²à¹€à¸‹à¸à¸£à¹Œ" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "เทมเพลตส่งà¸à¸à¸à¹„ม่ถูà¸à¸•้à¸à¸‡:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "เขียนไฟล์ไม่ได้:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "ตั้งระยะขà¸à¸š" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "เขียนไฟล์ไม่ได้:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "เว้น:" @@ -19685,17 +19803,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "ไม่สามารถà¸à¹ˆà¸²à¸™à¹‚ครงสร้าง HTML:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "ไม่สามารถสร้างโฟลเดà¸à¸£à¹Œ" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "ผิดพลาดขณะบันทึà¸à¸‰à¸²à¸" #: platform/javascript/export/export.cpp @@ -19995,9 +20113,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "เขียนไฟล์ไม่ได้:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "ไม่สามารถเริ่มขั้นตà¸à¸™à¸¢à¹ˆà¸à¸¢!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "à¸à¸²à¸£à¹à¸›à¸¥" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20013,23 +20150,78 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "ไม่พบ!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "ผิดพลาดขณะบันทึà¸à¹„ฟล์: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ทิศทาง" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "ไม่สามารถเริ่มขั้นตà¸à¸™à¸¢à¹ˆà¸à¸¢!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸•ัวà¸à¸¢à¹ˆà¸²à¸‡" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" "ไม่พบเทมเพลต APK สำหรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸:\n" "%s" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "เทมเพลตส่งà¸à¸à¸à¹„ม่ถูà¸à¸•้à¸à¸‡:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20037,7 +20229,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20079,6 +20271,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "โปรเจà¸à¸•์" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "ไม่สามารถส่งà¸à¸à¸à¹„ฟล์โปรเจคไปยังโปรเจค gradle ได้\n" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "ระบุไม่ถูà¸à¸•้à¸à¸‡:" @@ -20391,6 +20593,11 @@ msgid "Debug Algorithm" msgstr "ตัวดีบัà¸" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "ไม่สามารถลบไฟล์ชั่วคราวได้:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20438,6 +20645,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "สุ่มà¸à¸²à¸£à¸«à¸¡à¸¸à¸™:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "เปิดเทมเพลตเพื่à¸à¸ªà¹ˆà¸‡à¸à¸à¸à¹„ม่ได้:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "ระบุไม่ถูà¸à¸•้à¸à¸‡:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "ชื่à¸à¸œà¸´à¸”พลาด" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "ไม่สามารถลบไฟล์ชั่วคราวได้:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20459,6 +20730,23 @@ msgid "Invalid product version:" msgstr "GUID ขà¸à¸‡à¹‚ปรà¹à¸à¸£à¸¡à¹„ม่ถูà¸à¸•้à¸à¸‡" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้à¸à¸‡" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "หน้าต่างใหม่" @@ -20475,6 +20763,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20602,7 +20894,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" @@ -21461,17 +21754,19 @@ msgstr "" "ต้à¸à¸‡à¸¡à¸µ NavigationPolygon เพื่à¸à¹ƒà¸«à¹‰à¹‚หนดนี้ทำงานได้ à¸à¸£à¸¸à¸“าà¹à¸à¹‰à¹„ขคุณสมบัติหรืà¸à¸§à¸²à¸”รูปหลายเหลี่ยม" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸/หลานขà¸à¸‡à¹‚หนด Navigation2D " -"โดยจะให้ข้à¸à¸¡à¸¹à¸¥à¸à¸²à¸£à¸™à¸³à¸—างเท่านั้น" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ล่าง" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸—ี่" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22682,14 +22977,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance ต้à¸à¸‡à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸/หลานขà¸à¸‡à¹‚หนด Navigation " -"โดยจะให้ข้à¸à¸¡à¸¹à¸¥à¸à¸²à¸£à¸™à¸³à¸—างเท่านั้น" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25393,6 +25680,16 @@ msgid "3D Physics" msgstr "% ขà¸à¸‡à¹€à¸Ÿà¸£à¸¡à¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ตัวนำทาง" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ตัวนำทาง" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26820,7 +27117,7 @@ msgstr "ทรานสิชัน: " msgid "Refraction" msgstr "เว้น:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26905,7 +27202,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "à¸à¸±à¸•ราส่วน: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "à¹à¸à¹‰à¹„ขประเภทตัวà¹à¸›à¸£" #: scene/resources/navigation_mesh.cpp @@ -26923,10 +27225,15 @@ msgid "Source Group Name" msgstr "ต้นฉบับ" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "ตัวà¹à¸›à¸£à¸‰à¸²à¸à¸«à¸¥à¸±à¸:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26936,11 +27243,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "ขà¸à¸šà¹€à¸‚ต" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "รวมจาà¸à¸‰à¸²à¸" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26954,6 +27266,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "โหลดค่าเริ่มต้น" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" @@ -26971,7 +27288,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27386,6 +27703,11 @@ msgid "Scenario" msgstr "ฉาà¸" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ตัวนำทาง" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27403,6 +27725,26 @@ msgstr "เส้นตรงซ้าย" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "ค่าเริ่มต้น" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "à¸à¸±à¸žà¹€à¸”ทà¸à¸²à¸£à¸”ูตัวà¸à¸¢à¹ˆà¸²à¸‡" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¸—ดสà¸à¸š" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/tl.po b/editor/translations/tl.po index 5436a37303..963d542e6d 100644 --- a/editor/translations/tl.po +++ b/editor/translations/tl.po @@ -215,9 +215,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "" @@ -376,6 +377,16 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Gumalaw" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Alisin ang Input" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -574,7 +585,8 @@ msgstr "Paglalarawan" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Patakbuhin" @@ -660,6 +672,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Kinalalagyan ng Eksena:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -667,19 +684,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Pagmamahala ng Bersyon" - #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "Pagmamahala ng Bersyon" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Pangalan ng Plugin:" +msgid "Version Control Plugin Name" +msgstr "Pagmamahala ng Bersyon" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -793,7 +806,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "Salain ang mga node" @@ -2228,8 +2242,8 @@ msgid "Open" msgstr "Buksan" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Mga May-ari ng:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2527,7 +2541,7 @@ msgid "Bus Options" msgstr "Kaayusan ng Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "I-duplicate" @@ -2786,6 +2800,23 @@ msgid "Choose" msgstr "Pumili" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Nabigo:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Inimpok ang File:" @@ -2798,6 +2829,31 @@ msgid "Packing" msgstr "Iniimpake" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "I-save Bilang" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Nabigong lumikha ng folder." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Hindi mai-luwas ang mga project file" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Hindi mabuksan ang file para sa pagsusulat:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "I-save Bilang" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2901,11 +2957,29 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Di-mahanap ang template file:" #: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" @@ -3075,9 +3149,9 @@ msgid "Import" msgstr "Umangkat" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Magluwas" @@ -4181,15 +4255,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Eksena" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Kinalalagyan ng Eksena:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4313,6 +4378,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Pagmamahala ng Bersyon" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "Inibang Pangalan" @@ -4341,6 +4410,10 @@ msgstr "" msgid "Add a new scene." msgstr "Magdagdag ng panibagong eksena." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Eksena" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Bumalik sa dating binuksang eksena." @@ -5076,6 +5149,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proyekto" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5347,7 +5425,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Nabigasyon" @@ -6795,7 +6875,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Salain ang mga node" @@ -7087,6 +7167,18 @@ msgid "Saving..." msgstr "Nililigtas..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10000,6 +10092,7 @@ msgid "Points" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "" @@ -11358,8 +11451,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr "Gawing %s" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12338,8 +12432,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Saklaw" @@ -13787,31 +13880,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -13950,6 +14022,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Mga Tagapagtatag ng Proyekto" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16243,7 +16320,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Bagong Polygon" @@ -16848,7 +16925,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16878,6 +16954,19 @@ msgstr "Gitna" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Nabigasyon" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Nabigasyon" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18387,10 +18476,6 @@ msgid "Could not execute on device." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18494,12 +18579,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Hudyat" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18515,6 +18604,11 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Hindi maumpisa ang subprocess!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "nagbalik ng may pagkakabigong #%d ang 'apksigner'" @@ -18545,7 +18639,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18556,20 +18650,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "Hindi mai-luwas ang mga project file" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18581,7 +18674,7 @@ msgstr "Binibuild ang Android Project (gradle)" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18596,25 +18689,24 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" -msgstr "" +#, fuzzy +msgid "Package not found: \"%s\"." +msgstr "Di-mahanap ang animation: '%s'" #: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Nililikha ang APK..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Walang mahanap na template APK upang iluwas:\n" "%s" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18624,7 +18716,8 @@ msgid "Adding files..." msgstr "Dinadagdag ang mga file..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Hindi mai-luwas ang mga project file" #: platform/android/export/export_plugin.cpp @@ -18864,6 +18957,17 @@ msgstr "Kopyahin ang mga Node" msgid "Custom BG Color" msgstr "Kopyahin ang mga Node" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Pangasiwaan ang mga Export Template..." + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Di-mahanap ang template file:" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18885,19 +18989,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "" +"Walang mahanap na template APK upang iluwas:\n" +"%s" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr "Di-wastong index ng uring %s para sa batayang uri %s" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "" +#, fuzzy +msgid "Could not write file: \"%s\"." +msgstr "Nabigong lumikha ng folder." + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Laman:" + +#: platform/javascript/export/export.cpp +#, fuzzy +msgid "Could not read file: \"%s\"." +msgstr "Nabigong lumikha ng folder." #: platform/javascript/export/export.cpp -msgid "Could not read file:" +msgid "PWA" msgstr "" #: platform/javascript/export/export.cpp @@ -18975,16 +19094,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" -msgstr "" +#, fuzzy +msgid "Could not create HTTP server directory: %s." +msgstr "Nabigong lumikha ng folder." #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "" +#, fuzzy +msgid "Error starting HTTP server: %d." +msgstr "Nabigong ang pagsave ang file: %s" #: platform/javascript/export/export.cpp msgid "Web" @@ -19273,9 +19394,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Hindi mai-luwas ang mga project file" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Hindi maumpisa ang subprocess!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Nabigasyon" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19291,17 +19431,75 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Nabigong ang pagsave ang file: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Mga Direksyon" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Hindi maumpisa ang subprocess!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Ginagawa ang Thumbnail" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "" +"Walang mahanap na template APK upang iluwas:\n" +"%s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Di-wastong binary format." #: platform/osx/export/export.cpp msgid "" @@ -19311,7 +19509,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19352,6 +19550,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proyekto" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19659,6 +19866,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Nabigong lumikha ng folder." + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19705,6 +19917,65 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Constant" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Di-wastong mga argument para i-construct ang '%s'" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Di-wastong pangalan." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19724,6 +19995,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Bagong Tabing" @@ -19740,6 +20027,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19859,7 +20150,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20669,13 +20961,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Usog:" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21827,12 +22122,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24428,6 +24717,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Nabigasyon" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Nabigasyon" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25825,7 +26124,7 @@ msgstr "Transisyon: " msgid "Refraction" msgstr "Ibahin ang Pangalan ng Punsyon" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25904,7 +26203,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Sukat:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Ibahin ang Punong-Uri" #: scene/resources/navigation_mesh.cpp @@ -25922,10 +26226,15 @@ msgid "Source Group Name" msgstr "Pangalan ng Skript:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Mga Gizmo" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25935,11 +26244,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Saklaw" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Ipagsama galing sa Eksena" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25952,6 +26266,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Ipakita ang Karaniwan" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25969,7 +26288,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26372,6 +26691,11 @@ msgid "Scenario" msgstr "Eksena" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Nabigasyon" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26388,6 +26712,26 @@ msgstr "Burahin ang Linya" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Karaniwan" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Karaniwan" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Sinusubukan" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Ayusin Ang Pagkakabit:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 0a83a3a958..ea437aaf30 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -71,13 +71,14 @@ # Recep GUCLUER <rgucluer@gmail.com>, 2022. # Emir Tunahan Alim <emrtnhalim@gmail.com>, 2022. # inci <incialien@gmail.com>, 2022. +# Ramazan Aslan <legendraslan@gmail.com>, 2022. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-05-27 16:15+0000\n" -"Last-Translator: inci <incialien@gmail.com>\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" +"Last-Translator: Ramazan Aslan <legendraslan@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -92,7 +93,6 @@ msgid "Tablet Driver" msgstr "Tablet Sürücüsü" #: core/bind/core_bind.cpp -#, fuzzy msgid "Clipboard" msgstr "Pano" @@ -125,7 +125,6 @@ msgid "Low Processor Usage Mode Sleep (µsec)" msgstr "Düşük İşlemci Kullanımı Uyku Modu (μsn)" #: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp -#, fuzzy msgid "Keep Screen On" msgstr "Ekranı Açık Tut" @@ -160,11 +159,11 @@ msgstr "Tam Ekran" #: core/bind/core_bind.cpp msgid "Maximized" -msgstr "" +msgstr "Maksimize edilmiÅŸ" #: core/bind/core_bind.cpp msgid "Minimized" -msgstr "Küçültülmüş" +msgstr "Minimize edilmiÅŸ" #: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp #: scene/gui/graph_node.cpp @@ -193,11 +192,11 @@ msgstr "Boyut" #: core/bind/core_bind.cpp msgid "Endian Swap" -msgstr "" +msgstr "Endian DeÄŸiÅŸimi" #: core/bind/core_bind.cpp msgid "Editor Hint" -msgstr "Düzenleyici İpucu" +msgstr "Düzenleyici İpucusu" #: core/bind/core_bind.cpp msgid "Print Error Messages" @@ -216,9 +215,8 @@ msgid "Time Scale" msgstr "Zaman ÖlçeÄŸi" #: core/bind/core_bind.cpp main/main.cpp -#, fuzzy msgid "Physics Jitter Fix" -msgstr "Fizik Kare %" +msgstr "Fizik TitreÅŸim Düzeltmesi" #: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Error" @@ -226,7 +224,7 @@ msgstr "Hata" #: core/bind/core_bind.cpp msgid "Error String" -msgstr "Hata Dizesi" +msgstr "Hata yazısı" #: core/bind/core_bind.cpp msgid "Error Line" @@ -238,7 +236,7 @@ msgstr "Sonuç" #: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp msgid "Memory" -msgstr "Bellek" +msgstr "Hafıza" #: core/command_queue_mt.cpp core/message_queue.cpp #: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp @@ -272,16 +270,16 @@ msgid "Data" msgstr "Veri" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "AÄŸ" #: core/io/file_access_network.cpp -#, fuzzy msgid "Remote FS" -msgstr "Uzak " +msgstr "Uzaktan Dosyalama Sistemi" #: core/io/file_access_network.cpp msgid "Page Size" @@ -289,11 +287,11 @@ msgstr "Sayfa Boyutu" #: core/io/file_access_network.cpp msgid "Page Read Ahead" -msgstr "" +msgstr "Sayfayı Önceden Okuma" #: core/io/http_client.cpp msgid "Blocking Mode Enabled" -msgstr "Engelleme Modu Etkin" +msgstr "Engelleme Modu EtkinleÅŸtirildi" #: core/io/http_client.cpp msgid "Connection" @@ -308,33 +306,28 @@ msgid "Object ID" msgstr "Nesne KimliÄŸi" #: core/io/multiplayer_api.cpp core/io/packet_peer.cpp -#, fuzzy msgid "Allow Object Decoding" -msgstr "Araları Doldurmayı EtkinleÅŸtir" +msgstr "Nesne Çözümlemelerine İzin Ver" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp msgid "Refuse New Network Connections" -msgstr "" +msgstr "Yeni BaÄŸlantılar Kurmayı Reddet" #: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp -#, fuzzy msgid "Network Peer" msgstr "AÄŸ Profilcisi" #: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp -#, fuzzy msgid "Root Node" -msgstr "Kök düğüm adı" +msgstr "Kök Düğüm Adı" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Refuse New Connections" -msgstr "BaÄŸla" +msgstr "Yeni BaÄŸlantıları Reddet" #: core/io/networked_multiplayer_peer.cpp -#, fuzzy msgid "Transfer Mode" -msgstr "Dönüştürme Türü" +msgstr "Transfer Modu" #: core/io/packet_peer.cpp msgid "Encode Buffer Max Size" @@ -365,9 +358,8 @@ msgid "Blocking Handshake" msgstr "" #: core/io/udp_server.cpp -#, fuzzy msgid "Max Pending Connections" -msgstr "BaÄŸlantıyı Düzenle:" +msgstr "Bekletilebilecek Maks. BaÄŸlantı Sayısı" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -385,15 +377,16 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz format." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "İfadede geçersiz giriÅŸ %i (geçersiz)" +msgstr "İfadede geçersiz giriÅŸ %d" #: core/math/expression.cpp +#, fuzzy msgid "self can't be used because instance is null (not passed)" msgstr "self kullanılamaz çünkü örnek boÅŸ (geçilmedi)" #: core/math/expression.cpp +#, fuzzy msgid "Invalid operands to operator %s, %s and %s." msgstr "\"%s\" iÅŸlecinde geçersiz terimler, '%s' ve '%s'." @@ -419,17 +412,26 @@ msgid "Seed" msgstr "" #: core/math/random_number_generator.cpp -#, fuzzy msgid "State" msgstr "Durum" #: core/message_queue.cpp msgid "Message Queue" -msgstr "" +msgstr "Mesaj Sırası" #: core/message_queue.cpp msgid "Max Size (KB)" -msgstr "" +msgstr "En Büyük Boyut (KB)" + +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Biçimi Taşı" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "GiriÅŸi Sil" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp @@ -437,62 +439,58 @@ msgid "Device" msgstr "Aygıt" #: core/os/input_event.cpp -#, fuzzy msgid "Alt" -msgstr "Hepsi" +msgstr "Alt" #: core/os/input_event.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: core/os/input_event.cpp #, fuzzy msgid "Control" -msgstr "Sürüm Kontrol" +msgstr "Ctrl" #: core/os/input_event.cpp +#, fuzzy msgid "Meta" -msgstr "" +msgstr "Meta" #: core/os/input_event.cpp -#, fuzzy msgid "Command" -msgstr "Topluluk" +msgstr "Komut" #: core/os/input_event.cpp scene/2d/touch_screen_button.cpp #: scene/gui/base_button.cpp scene/gui/texture_button.cpp #: scene/resources/default_theme/default_theme.cpp -#, fuzzy msgid "Pressed" -msgstr "Ön ayar" +msgstr "Basılmış" #: core/os/input_event.cpp -#, fuzzy msgid "Scancode" -msgstr "Tara" +msgstr "TuÅŸ Kodu" #: core/os/input_event.cpp -#, fuzzy msgid "Physical Scancode" -msgstr "Fiziksel Anahtar" +msgstr "Fiziksel TuÅŸ Kodu" #: core/os/input_event.cpp +#, fuzzy msgid "Unicode" -msgstr "" +msgstr "Unicode" #: core/os/input_event.cpp +#, fuzzy msgid "Echo" -msgstr "" +msgstr "Eko" #: core/os/input_event.cpp scene/gui/base_button.cpp -#, fuzzy msgid "Button Mask" -msgstr "Düğme" +msgstr "TuÅŸ Maskesi" #: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp -#, fuzzy msgid "Global Position" -msgstr "Genel Sabit" +msgstr "Global Pozisyon" #: core/os/input_event.cpp #, fuzzy @@ -500,35 +498,31 @@ msgid "Factor" msgstr "Vektör" #: core/os/input_event.cpp -#, fuzzy msgid "Button Index" -msgstr "Fare Düğmesi İndeksi:" +msgstr "TuÅŸ İndeksi" #: core/os/input_event.cpp msgid "Doubleclick" -msgstr "" +msgstr "Çift Tıklama" #: core/os/input_event.cpp msgid "Tilt" -msgstr "" +msgstr "EÄŸim" #: core/os/input_event.cpp -#, fuzzy msgid "Pressure" -msgstr "Ön ayar" +msgstr "Baskı" #: core/os/input_event.cpp -#, fuzzy msgid "Relative" -msgstr "Göreceli Yapış" +msgstr "Göreceli" #: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp #: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp #: scene/animation/animation_player.cpp scene/resources/environment.cpp #: scene/resources/particles_material.cpp -#, fuzzy msgid "Speed" -msgstr "Hız:" +msgstr "Hız" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: scene/3d/sprite_3d.cpp @@ -536,14 +530,12 @@ msgid "Axis" msgstr "Eksen" #: core/os/input_event.cpp -#, fuzzy msgid "Axis Value" -msgstr "İğneleme deÄŸeri" +msgstr "Eksen DeÄŸeri" #: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Index" -msgstr "İndeks:" +msgstr "İndeks" #: core/os/input_event.cpp editor/project_settings_editor.cpp #: modules/visual_script/visual_script_nodes.cpp @@ -554,37 +546,35 @@ msgstr "Eylem" #: core/os/input_event.cpp scene/resources/environment.cpp #: scene/resources/material.cpp msgid "Strength" -msgstr "" +msgstr "Güç" #: core/os/input_event.cpp msgid "Delta" -msgstr "" +msgstr "Delta" #: core/os/input_event.cpp -#, fuzzy msgid "Channel" -msgstr "DeÄŸiÅŸtir" +msgstr "Kanal" #: core/os/input_event.cpp main/main.cpp -#, fuzzy msgid "Message" -msgstr "İşleme Mesajı" +msgstr "Mesaj" #: core/os/input_event.cpp #, fuzzy msgid "Pitch" -msgstr "Perde:" +msgstr "Perde" #: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp #: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp #: scene/3d/physics_body.cpp scene/resources/particles_material.cpp -#, fuzzy msgid "Velocity" -msgstr "Yörünge Görünümü SaÄŸ" +msgstr "Hız" #: core/os/input_event.cpp +#, fuzzy msgid "Instrument" -msgstr "" +msgstr "Alet" #: core/os/input_event.cpp #, fuzzy @@ -598,19 +588,16 @@ msgstr "" #: core/project_settings.cpp editor/editor_node.cpp main/main.cpp #: platform/iphone/export/export.cpp platform/osx/export/export.cpp #: platform/windows/export/export.cpp -#, fuzzy msgid "Application" -msgstr "Eylem" +msgstr "Uygulama" #: core/project_settings.cpp main/main.cpp -#, fuzzy msgid "Config" -msgstr "Yapışmayı Yapılandır" +msgstr "Yapılandırma" #: core/project_settings.cpp -#, fuzzy msgid "Project Settings Override" -msgstr "Proje Ayarları..." +msgstr "Proje Ayarlarını Bastır" #: core/project_settings.cpp core/resource.cpp #: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp @@ -633,7 +620,8 @@ msgstr "Açıklama" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Çalıştır" @@ -643,39 +631,36 @@ msgid "Main Scene" msgstr "Ana Sahne" #: core/project_settings.cpp -#, fuzzy msgid "Disable stdout" -msgstr "Oto-döşemeleri PasifleÅŸtir" +msgstr "Stdout'u devre dışı bırak" #: core/project_settings.cpp -#, fuzzy msgid "Disable stderr" -msgstr "Pasif Öge" +msgstr "Stderr'i devre dışı bırak" #: core/project_settings.cpp msgid "Use Hidden Project Data Directory" -msgstr "" +msgstr "GizlenmiÅŸ Proje Verileri Dizinini Kullan" #: core/project_settings.cpp msgid "Use Custom User Dir" -msgstr "" +msgstr "ÖzelleÅŸtirilmiÅŸ Kullanıcı Dizinini Kullan" #: core/project_settings.cpp msgid "Custom User Dir Name" -msgstr "" +msgstr "ÖzelleÅŸtirilmiÅŸ Kullanıcı Dizini Adı" #: core/project_settings.cpp main/main.cpp #: platform/javascript/export/export.cpp platform/osx/export/export.cpp #: platform/uwp/os_uwp.cpp -#, fuzzy msgid "Display" -msgstr "Hepsini Görüntüle" +msgstr "Görüntüle" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp #: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp msgid "Width" -msgstr "" +msgstr "GeniÅŸlik" #: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp #: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp @@ -683,23 +668,20 @@ msgstr "" #: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp #: scene/resources/font.cpp scene/resources/navigation_mesh.cpp #: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp -#, fuzzy msgid "Height" -msgstr "Işık" +msgstr "Yükseklik" #: core/project_settings.cpp msgid "Always On Top" -msgstr "" +msgstr "Her Zaman Üstte" #: core/project_settings.cpp -#, fuzzy msgid "Test Width" -msgstr "Soldan Görünüm" +msgstr "Test GeniÅŸliÄŸi" #: core/project_settings.cpp -#, fuzzy msgid "Test Height" -msgstr "Deneme" +msgstr "Test YüksekliÄŸi" #: core/project_settings.cpp editor/animation_track_editor.cpp #: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp @@ -707,9 +689,8 @@ msgid "Audio" msgstr "Ses" #: core/project_settings.cpp -#, fuzzy msgid "Default Bus Layout" -msgstr "Varsayılan Bus YerleÅŸim Düzenini Yükle." +msgstr "Varsayılan Bus YerleÅŸim Düzeni" #: core/project_settings.cpp editor/editor_export.cpp #: editor/editor_file_system.cpp editor/editor_node.cpp @@ -724,93 +705,84 @@ msgid "Main Run Args" msgstr "Ana Sahne DeÄŸiÅŸtirgenleri:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "Sahne Yolu:" + +#: core/project_settings.cpp msgid "Search In File Extensions" -msgstr "" +msgstr "Dosya Uzantılarında Ara" #: core/project_settings.cpp msgid "Script Templates Search Path" -msgstr "" - -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Sürüm Kontrol" +msgstr "Script Dosyalarını Aramak İçin Dosya Yolu" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" +#, fuzzy +msgid "Version Control Autoload On Startup" +msgstr "BaÅŸlangıçta Otomatik Yükleme" #: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "Eklentinin Adı:" +msgid "Version Control Plugin Name" +msgstr "Sürüm Kontrol" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp -#, fuzzy msgid "Input" -msgstr "GiriÅŸ Ekle" +msgstr "GiriÅŸ" #: core/project_settings.cpp msgid "UI Accept" -msgstr "" +msgstr "Kullanıcı Arayüzü Kabul Et" #: core/project_settings.cpp -#, fuzzy msgid "UI Select" -msgstr "Seç" +msgstr "Kullanıcı Arayüzü Seç" #: core/project_settings.cpp -#, fuzzy msgid "UI Cancel" -msgstr "Vazgeç" +msgstr "Kullanıcı Arayüzünü İptal Et" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Next" -msgstr "Yola Odaklan" +msgstr "Kullanıcı Arayüzü Sonrakine Odaklan" #: core/project_settings.cpp -#, fuzzy msgid "UI Focus Prev" -msgstr "Yola Odaklan" +msgstr "Kullanıcı Arayüzü Öncekine Odaklan" #: core/project_settings.cpp -#, fuzzy msgid "UI Left" -msgstr "Sol Üst" +msgstr "Kullanıcı Arayüzü Sol" #: core/project_settings.cpp -#, fuzzy msgid "UI Right" -msgstr "SaÄŸ Üst" +msgstr "Kullanıcı Arayüzü SaÄŸ" #: core/project_settings.cpp msgid "UI Up" -msgstr "" +msgstr "Kullanıcı Arayüzü Yukarı" #: core/project_settings.cpp -#, fuzzy msgid "UI Down" -msgstr "AÅŸağı" +msgstr "Kullanıcı Arayüzü AÅŸağı" #: core/project_settings.cpp -#, fuzzy msgid "UI Page Up" -msgstr "Sayfa: " +msgstr "Kullanıcı Arayüzü Sayfa Yukarı" #: core/project_settings.cpp msgid "UI Page Down" -msgstr "" +msgstr "Kullanıcı Arayüzü Sayfa AÅŸağı" #: core/project_settings.cpp msgid "UI Home" -msgstr "" +msgstr "Kullanıcı Arayüzü Home" #: core/project_settings.cpp -#, fuzzy msgid "UI End" -msgstr "Sonunda" +msgstr "Kullanıcı Arayüzü End" #: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp #: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp @@ -820,9 +792,8 @@ msgstr "Sonunda" #: servers/physics_2d/physics_2d_server_wrap_mt.h #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/physics_server.cpp -#, fuzzy msgid "Physics" -msgstr " (Fiziksel)" +msgstr "Fizik" #: core/project_settings.cpp editor/editor_settings.cpp #: editor/import/resource_importer_layered_texture.cpp @@ -832,12 +803,11 @@ msgstr " (Fiziksel)" #: scene/3d/physics_body.cpp scene/resources/world.cpp #: servers/physics/space_sw.cpp servers/physics_server.cpp msgid "3D" -msgstr "" +msgstr "3D" #: core/project_settings.cpp -#, fuzzy msgid "Smooth Trimesh Collision" -msgstr "Üçlü Örüntü Çarpışma KardeÅŸi OluÅŸtur" +msgstr "Akıcı Trimesh Çarpışması" #: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -848,9 +818,8 @@ msgstr "Üçlü Örüntü Çarpışma KardeÅŸi OluÅŸtur" #: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp #: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp -#, fuzzy msgid "Rendering" -msgstr "OluÅŸturucu:" +msgstr "OluÅŸturucu" #: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp #: drivers/gles3/rasterizer_scene_gles3.cpp @@ -860,17 +829,17 @@ msgstr "OluÅŸturucu:" #: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp #: servers/visual_server.cpp msgid "Quality" -msgstr "" +msgstr "Kalite" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp -#, fuzzy +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" -msgstr "Süzgeçler:" +msgstr "Filtreler" #: core/project_settings.cpp scene/main/viewport.cpp msgid "Sharpen Intensity" -msgstr "" +msgstr "KeskinleÅŸtirme YoÄŸunluÄŸu" #: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp #: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp @@ -886,70 +855,66 @@ msgstr "Hata Ayıklama" #: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp #: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp -#, fuzzy msgid "Settings" -msgstr "Ayarlar:" +msgstr "Ayarlar" #: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp +#, fuzzy msgid "Profiler" msgstr "Kesitçi" #: core/project_settings.cpp -#, fuzzy msgid "Max Functions" -msgstr "İşlev Yap" +msgstr "Maks. Fonksiyon Sayısı" #: core/project_settings.cpp scene/3d/vehicle_body.cpp -#, fuzzy msgid "Compression" -msgstr "İfade" +msgstr "Sıkıştırma" #: core/project_settings.cpp -#, fuzzy msgid "Formats" -msgstr "Biçem" +msgstr "Biçim" #: core/project_settings.cpp msgid "Zstd" -msgstr "" +msgstr "Zstd" #: core/project_settings.cpp msgid "Long Distance Matching" -msgstr "" +msgstr "Uzun Mesafe EÅŸleÅŸme" #: core/project_settings.cpp msgid "Compression Level" -msgstr "" +msgstr "Sıkıştırma Seviyesi" #: core/project_settings.cpp msgid "Window Log Size" -msgstr "" +msgstr "Pencere Günlük Boyutu" #: core/project_settings.cpp msgid "Zlib" -msgstr "" +msgstr "Zlib" #: core/project_settings.cpp msgid "Gzip" -msgstr "" +msgstr "Gzip" #: core/project_settings.cpp platform/android/export/export.cpp msgid "Android" -msgstr "" +msgstr "Android" #: core/project_settings.cpp msgid "Modules" -msgstr "" +msgstr "Modüller" #: core/register_core_types.cpp msgid "TCP" -msgstr "" +msgstr "TCP" #: core/register_core_types.cpp -#, fuzzy msgid "Connect Timeout Seconds" -msgstr "Metotlara baÄŸlantılar:" +msgstr "BaÄŸlanma Zaman Aşımı Süresi(Saniye)" #: core/register_core_types.cpp msgid "Packet Peer Stream" @@ -957,16 +922,15 @@ msgstr "" #: core/register_core_types.cpp msgid "Max Buffer (Power of 2)" -msgstr "" +msgstr "Maksimum Arabellek (2'nin üssü olacak ÅŸekilde)" #: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp msgid "SSL" -msgstr "" +msgstr "SSL" #: core/register_core_types.cpp main/main.cpp -#, fuzzy msgid "Certificates" -msgstr "Köşenoktalar:" +msgstr "Sertifikalar" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_resource_picker.cpp @@ -975,9 +939,8 @@ msgid "Resource" msgstr "Kaynak" #: core/resource.cpp -#, fuzzy msgid "Local To Scene" -msgstr "Sahneyi Kapat" +msgstr "Sahneye Yerel" #: core/resource.cpp editor/dependency_editor.cpp #: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp @@ -987,9 +950,8 @@ msgid "Path" msgstr "Yol" #: core/script_language.cpp -#, fuzzy msgid "Source Code" -msgstr "Kaynak" +msgstr "Kaynak Kodu" #: core/translation.cpp editor/project_settings_editor.cpp msgid "Locale" @@ -1010,27 +972,27 @@ msgstr "B" #: core/ustring.cpp msgid "KiB" -msgstr "KiB" +msgstr "KB" #: core/ustring.cpp msgid "MiB" -msgstr "MiB" +msgstr "MB" #: core/ustring.cpp msgid "GiB" -msgstr "GiB" +msgstr "GB" #: core/ustring.cpp msgid "TiB" -msgstr "TiB" +msgstr "TB" #: core/ustring.cpp msgid "PiB" -msgstr "PiB" +msgstr "PB" #: core/ustring.cpp msgid "EiB" -msgstr "EiB" +msgstr "EB" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles2/rasterizer_scene_gles2.cpp @@ -1038,7 +1000,7 @@ msgstr "EiB" #: drivers/gles3/rasterizer_scene_gles3.cpp #: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp msgid "Buffers" -msgstr "" +msgstr "Arabellek" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp @@ -1060,7 +1022,7 @@ msgstr "" #: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp #: servers/visual_server.cpp msgid "2D" -msgstr "" +msgstr "2D" #: drivers/gles2/rasterizer_canvas_base_gles2.cpp #: drivers/gles3/rasterizer_canvas_base_gles3.cpp @@ -1091,21 +1053,21 @@ msgid "Use Bicubic Sampling" msgstr "" #: drivers/gles3/rasterizer_scene_gles3.cpp +#, fuzzy msgid "Max Renderable Elements" -msgstr "" +msgstr "Maks. Renderlanabilinecek Ögeler" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Renderable Lights" -msgstr "" +msgstr "Maks. İşlenebilinecek Işık Sayısı" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Max Renderable Reflections" -msgstr "Merkez Seçimi" +msgstr "Maks. İşlenebilinecek Yansıma Sayısı" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Max Lights Per Object" -msgstr "" +msgstr "Maks. Objeye düşen Işık Sayısı" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Subsurface Scattering" @@ -1125,9 +1087,8 @@ msgid "Scale" msgstr "Ölçekle" #: drivers/gles3/rasterizer_scene_gles3.cpp -#, fuzzy msgid "Follow Surface" -msgstr "Yüzeyi Doldur" +msgstr "Yüzeyi Takip Et" #: drivers/gles3/rasterizer_scene_gles3.cpp msgid "Weight Samples" @@ -1139,7 +1100,7 @@ msgstr "" #: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp msgid "High Quality" -msgstr "" +msgstr "Yüksek Kalite" #: drivers/gles3/rasterizer_storage_gles3.cpp msgid "Blend Shape Max Buffer Size (KB)" @@ -1230,16 +1191,14 @@ msgstr "Zaman" #: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp #: platform/osx/export/export.cpp -#, fuzzy msgid "Location" -msgstr "YerelleÅŸtirme" +msgstr "Konum" #: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp #: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp #: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp -#, fuzzy msgid "Rotation" -msgstr "Dönme Adımı:" +msgstr "Rotasyon" #: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp #: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp @@ -1247,14 +1206,13 @@ msgid "Value" msgstr "DeÄŸer" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Arg Count" -msgstr "DeÄŸer:" +msgstr "Argüman Sayısı" #: editor/animation_track_editor.cpp main/main.cpp #: modules/mono/mono_gd/gd_mono.cpp msgid "Args" -msgstr "" +msgstr "Argümanlar" #: editor/animation_track_editor.cpp editor/editor_settings.cpp #: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp @@ -1301,9 +1259,8 @@ msgid "Animation" msgstr "Animasyon" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing" -msgstr "Açılma Kararma" +msgstr "YumuÅŸatma" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Time" @@ -1360,7 +1317,7 @@ msgstr "Animasyon Oynatıcı İzi" #: editor/animation_track_editor.cpp msgid "Animation length (frames)" -msgstr "Animasyon uzunluÄŸu (çerçeve)" +msgstr "Animasyon uzunluÄŸu (kare)" #: editor/animation_track_editor.cpp msgid "Animation length (seconds)" @@ -1377,7 +1334,7 @@ msgstr "Animasyon Döngüsü" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Functions:" -msgstr "İşlevler:" +msgstr "Fonksiyonlar:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" @@ -1412,19 +1369,16 @@ msgid "Remove this track." msgstr "Bu izi sil." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Süre (sn): " +msgstr "Süre (sn):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "Pozisyon" +msgstr "Pozisyon:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "Dönme Adımı:" +msgstr "Rotasyon:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1446,9 +1400,8 @@ msgid "(Invalid, expected type: %s)" msgstr "Geçersiz Dışa Aktarım Åžablonu:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "Açılma Kararma" +msgstr "YumuÅŸatma:" #: editor/animation_track_editor.cpp #, fuzzy @@ -2305,8 +2258,8 @@ msgid "Open" msgstr "Aç" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Åžunların sahipleri:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2610,7 +2563,7 @@ msgid "Bus Options" msgstr "Bus ayarları" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "ÇoÄŸalt" @@ -2868,6 +2821,25 @@ msgid "Choose" msgstr "Seç" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Düğüm Yolunu Kopyala" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Paket BaÅŸarı ile Kuruldu!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "BaÅŸarısız:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Dosya Depolama:" @@ -2880,6 +2852,31 @@ msgid "Packing" msgstr "Çıkınla" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Farklı Kaydet" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Klasör oluÅŸturulamadı." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Proje dosyaları dışa aktarılamadı" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Dosya yazmak için açılamıyor:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Farklı Kaydet" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -3000,11 +2997,33 @@ msgstr "Özel hata ayıklama ÅŸablonu bulunmadı." msgid "Custom release template not found." msgstr "Özel yayınlama ÅŸablonu bulunamadı." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Åžablonlarını Yönet" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Belirtilen Dışa aktarım yolu mevcut deÄŸil:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Åžablon dosyası bulunamadı:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Geçersiz Dışa Aktarım Åžablonu:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Dolgulama" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "32-bit dışa aktarımlarda gömülü PCK 4GiB'tan büyük olamaz." @@ -3178,9 +3197,9 @@ msgid "Import" msgstr "İçe Aktar" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Dışa Aktar" @@ -3458,7 +3477,7 @@ msgstr "Sınıf:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp #: editor/script_create_dialog.cpp msgid "Inherits:" -msgstr "Kalıtçılar:" +msgstr "Miras:" #: editor/editor_help.cpp msgid "Inherited by:" @@ -4344,15 +4363,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Sahne" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "Sahne Yolu:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4481,6 +4491,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Sürüm Kontrol" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Kullanıcı adı" @@ -4508,6 +4522,10 @@ msgstr "Dikkat-Dağıtmayan Kipine geç." msgid "Add a new scene." msgstr "Yeni bir sahne ekle." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Sahne" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Daha önce açılan sahneye git." @@ -5306,6 +5324,11 @@ msgstr "" "Lütfen Dışa Aktar menüsüne çalıştırılabilir bir ön ayar ekleyin veya mevcut " "bir ön ayarı çalıştırılabilir olarak tanımlayın." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Proje" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Mantığınızı _run() metoduna yazın." @@ -5589,7 +5612,9 @@ msgid "Draw Spaces" msgstr "Çizim ÇaÄŸrıları:" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Gezinim" @@ -7090,7 +7115,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Süzgeçler:" @@ -7389,6 +7414,18 @@ msgid "Saving..." msgstr "Kaydediliyor..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10373,6 +10410,7 @@ msgid "Points" msgstr "Noktalar" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Çokgenler" @@ -11754,7 +11792,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Geçersiz geometri, örüntü ile deÄŸiÅŸtirilemiyor." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Örüntü2D'ye döüştür" #: editor/plugins/sprite_editor_plugin.cpp @@ -12750,8 +12789,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Önceki ÅŸekil, altdöşeme ya da Döşemeyi Seç." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Bölge" @@ -14268,36 +14306,10 @@ msgid "Delete preset '%s'?" msgstr "'%s' önayarı silinsin mi?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"'%s' platformu için proje dışa aktarılamadı.\n" -"Dışa aktarma ÅŸablonları eksik veya hatalı görünüyor." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"'%s' platformu için proje dışa aktarılamadı.\n" -"Bu, dışa aktarma ön ayarlarındaki ya da dışa aktarma ayarlarınızdaki bir " -"yapılandırma sorunundan kaynaklanıyor olabilir." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Tümünü Dışa Aktarma" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Belirtilen Dışa aktarım yolu mevcut deÄŸil:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Bu platform için dışa aktarma ÅŸablonu eksik/bozuk:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "Dışa aktarım Yolu" @@ -14445,6 +14457,11 @@ msgid "Export templates for this platform are missing:" msgstr "Bu platform için dışa aktarma ÅŸablonu eksik:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Projenin Kurucuları" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Dışa Aktarım Åžablonlarını Yönet" @@ -16863,7 +16880,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Çokgenler" @@ -17486,7 +17503,6 @@ msgid "Use In Baked Light" msgstr "Işık-Haritalarını PiÅŸir" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17516,6 +17532,19 @@ msgstr "Merkez" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Gezinim" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Gezinim Kipi" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Sonraki sekme" @@ -19051,10 +19080,6 @@ msgid "Could not execute on device." msgstr "Cihazda yürütülemedi." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "'apksigner' aracı bulunamıyor." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19178,12 +19203,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" "\"Target Sdk\" sürümü \"Min Sdk\" sürümünden daha büyük veya eÅŸit olmalıdır." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "Sinyal" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "'apksigner' bulunamadı.\n" "Lütfen komutun Android SDK build-tools dizininde bulunup bulunmadığını " @@ -19203,6 +19233,11 @@ msgid "Could not find keystore, unable to export." msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Alt iÅŸlem baÅŸlatılamadı!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner', #%d hatasıyla döndürüldü" @@ -19231,7 +19266,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Desteklenmeyen dışa aktarma biçimi!\n" #: platform/android/export/export_plugin.cpp @@ -19243,10 +19279,9 @@ msgstr "" "için sürüm bilgisi yok. Lütfen 'Proje' menüsünden yeniden yükleyin." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Android derlemesi sürüm uyumsuzluÄŸu:\n" @@ -19255,13 +19290,15 @@ msgstr "" "Lütfen 'Proje' menüsünden Android derleme ÅŸablonunu yeniden yükleyin." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Proje adıyla res://android/build/res/*.xml dosyalarının üzerine yazılamıyor" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Proje dosyaları gradle projesine aktarılamadı\n" #: platform/android/export/export_plugin.cpp @@ -19273,8 +19310,9 @@ msgid "Building Android Project (gradle)" msgstr "Android Projesi OluÅŸturma (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Android projesinin oluÅŸturulması baÅŸarısız oldu, hatayı çıktı için kontrol " @@ -19295,7 +19333,8 @@ msgstr "" "için gradle proje dizinini kontrol edin." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Paket bulunamadı: %s" #: platform/android/export/export_plugin.cpp @@ -19303,17 +19342,16 @@ msgid "Creating APK..." msgstr "APK oluÅŸturuluyor..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Dışa aktarılacak ÅŸablon APK bulunamadı:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19326,7 +19364,8 @@ msgid "Adding files..." msgstr "Dosyalar ekleniyor..." #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Proje dosyaları dışa aktarılamadı" #: platform/android/export/export_plugin.cpp @@ -19569,6 +19608,17 @@ msgstr "ÖzelSınıf" msgid "Custom BG Color" msgstr "ÖzelSınıf" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Åžablonlarını Yönet" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Özel yayınlama ÅŸablonu bulunamadı." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Ekip KimliÄŸi belirtilmedi - proje yapılandırılamıyor." @@ -19590,22 +19640,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Dışa aktarılmış HTML'yi sistemin varsayılan tarayıcısında çalıştır." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Dışa aktarma için ÅŸablon açılamadı:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Geçersiz Dışa Aktarım Åžablonu:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Dosya yazılamadı:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Kenar BoÅŸluk Belirle" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Dosya okunamadı:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Ayrım:" @@ -19680,15 +19743,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "HTML kabuÄŸu okunamadı:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "HTTP sunucu klasörü oluÅŸturulamadı:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "HTTP sunucusu baÅŸlatılırken hata:" #: platform/javascript/export/export.cpp @@ -19989,9 +20055,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Proje dosyaları dışa aktarılamadı" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Alt iÅŸlem baÅŸlatılamadı!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "YerelleÅŸtirme" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20007,23 +20092,78 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Simge bulunamadı." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "%s dosyası kaydedilirken hata" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Yönler" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Alt iÅŸlem baÅŸlatılamadı!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Küçük Bediz OluÅŸturuluyor" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" "Dışa aktarılacak ÅŸablon APK bulunamadı:\n" "%s" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Geçersiz Dışa Aktarım Åžablonu:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20031,7 +20171,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20072,6 +20212,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "Proje" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Proje dosyaları gradle projesine aktarılamadı\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Geçersiz paket tanımlayıcısı:" @@ -20387,6 +20537,11 @@ msgid "Debug Algorithm" msgstr "Hata Ayıklayıcı" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Geçici dosya kaldırılamıyor:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20434,6 +20589,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Rastgele Döndürme:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Geçersiz Tanımlayıcı:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Geçersiz ad." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Geçici dosya kaldırılamıyor:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20455,6 +20674,23 @@ msgid "Invalid product version:" msgstr "Geçersiz ürün GUID'i." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Geçersiz uzantı." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Yeni Pencere" @@ -20471,6 +20707,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20598,7 +20838,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Uzaklık Seç:" @@ -21472,17 +21713,19 @@ msgstr "" "çokgen çizin." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance, bir Navigation2D çocuÄŸu olmalı ya da Navigation2D " -"düğümünün torunu olması gerekir. Bu nesne yalnızca yönlendirme verisi saÄŸlar." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Merkez Alt" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Seyahat" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22723,14 +22966,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent sadece Spatial düğümünün altında kullanılabilir." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance, bir Navigation düğümünün çocuÄŸu ya da torunu " -"olmalıdır. O yalnızca yönlendirme verisi saÄŸlar." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25478,6 +25713,16 @@ msgid "3D Physics" msgstr " (Fiziksel)" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Gezinim" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Gezinim" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26905,7 +27150,7 @@ msgstr "GeçiÅŸ: " msgid "Refraction" msgstr "Ayrım:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26990,7 +27235,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Ölçekleniyor: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "DeÄŸiÅŸken Tipini Ayarla" #: scene/resources/navigation_mesh.cpp @@ -27008,10 +27258,15 @@ msgid "Source Group Name" msgstr "Kaynak" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Ana Sahne DeÄŸiÅŸtirgenleri:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -27021,11 +27276,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Bölge" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Sahneden BirleÅŸtir" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -27039,6 +27299,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "Varsayılanı Göster" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "Uzaklık Seç:" @@ -27056,7 +27321,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27474,6 +27739,11 @@ msgid "Scenario" msgstr "Sahne" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Gezinim" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27491,6 +27761,26 @@ msgstr "Sol DoÄŸrusal" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Varsayılan" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Varsayılan Önizleme" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Deneme" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "BaÄŸlantıyı Düzenle:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" @@ -27683,11 +27973,11 @@ msgstr "" #: servers/audio/effects/audio_effect_reverb.cpp msgid "Msec" -msgstr "" +msgstr "MiliSaniye" #: servers/audio/effects/audio_effect_reverb.cpp msgid "Room Size" -msgstr "" +msgstr "Oda Büyüklüğü" #: servers/audio/effects/audio_effect_reverb.cpp #, fuzzy @@ -27712,14 +28002,12 @@ msgid "Surround" msgstr "" #: servers/audio_server.cpp -#, fuzzy msgid "Enable Audio Input" -msgstr "Audio Bus'ı Yeniden Adlandır" +msgstr "Ses GiriÅŸini AktifleÅŸtir" #: servers/audio_server.cpp -#, fuzzy msgid "Output Latency" -msgstr "Çıktı" +msgstr "Çıkış Gecikmesi" #: servers/audio_server.cpp msgid "Channel Disable Threshold dB" @@ -27740,9 +28028,8 @@ msgid "Bus Count" msgstr "GiriÅŸ Portu Ekle" #: servers/audio_server.cpp -#, fuzzy msgid "Capture Device" -msgstr "Pikselden Yakala" +msgstr "Yakalama Cihazı" #: servers/audio_server.cpp #, fuzzy @@ -27754,9 +28041,8 @@ msgid "Feed" msgstr "" #: servers/camera/camera_feed.cpp -#, fuzzy msgid "Is Active" -msgstr "Derinlik" +msgstr "Aktif mi" #: servers/physics/space_sw.cpp servers/physics_2d/space_2d_sw.cpp msgid "Sleep Threshold Linear" @@ -27798,50 +28084,46 @@ msgid "Total Linear Damp" msgstr "DoÄŸrusal" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Total Gravity" -msgstr "Varsayılan Önizleme" +msgstr "Toplam Yerçekimi" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Linear Velocity" -msgstr "EtkinleÅŸtir" +msgstr "Çizgisel hız" #: servers/physics_2d_server.cpp servers/physics_server.cpp msgid "Exclude" -msgstr "" +msgstr "Hariç tut" #: servers/physics_2d_server.cpp servers/physics_server.cpp msgid "Shape RID" -msgstr "" +msgstr "Åžekil RID" #: servers/physics_2d_server.cpp servers/physics_server.cpp #, fuzzy msgid "Collide With Bodies" -msgstr "Temas Kipi" +msgstr "DiÄŸer Bedenlerle Çarpış" #: servers/physics_2d_server.cpp servers/physics_server.cpp +#, fuzzy msgid "Collide With Areas" -msgstr "" +msgstr "DiÄŸer Alanlarla Çarpış" #: servers/physics_2d_server.cpp servers/physics_server.cpp msgid "Motion Remainder" -msgstr "" +msgstr "Kalan Hareket" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Point" -msgstr "Temas Kipi" +msgstr "Çarpışma Noktası" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Normal" -msgstr "Temas Kipi" +msgstr "Çarpışma Normali" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Collision Depth" -msgstr "Temas Kipi" +msgstr "Çarpışma DerinliÄŸi" #: servers/physics_2d_server.cpp servers/physics_server.cpp #, fuzzy @@ -27854,14 +28136,12 @@ msgid "Collision Unsafe Fraction" msgstr "Temas Kipi" #: servers/physics_2d_server.cpp servers/physics_server.cpp -#, fuzzy msgid "Physics Engine" -msgstr "Fizik Kare %" +msgstr "Fizik Motoru" #: servers/physics_server.cpp -#, fuzzy msgid "Center Of Mass" -msgstr "Sol Merkez" +msgstr "Kütle Merkezi" #: servers/physics_server.cpp msgid "Principal Inertia Axes" @@ -27942,12 +28222,11 @@ msgstr "Kalıbı İçe Aktar" #: servers/visual_server.cpp msgid "Lossless Compression" -msgstr "" +msgstr "Kayıpsız Sıkıştırma" #: servers/visual_server.cpp -#, fuzzy msgid "Force PNG" -msgstr "Zorla Gönder" +msgstr "PNG Uzantısını Kullanmaya Zorla" #: servers/visual_server.cpp msgid "WebP Compression Level" @@ -27979,14 +28258,12 @@ msgid "Quadrant 3 Subdiv" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Shadows" -msgstr "Gölgelendirici" +msgstr "Gölgeler" #: servers/visual_server.cpp -#, fuzzy msgid "Filter Mode" -msgstr "Düğümleri Süzgeçden Geçir" +msgstr "Filtre Modu" #: servers/visual_server.cpp #, fuzzy @@ -28023,21 +28300,20 @@ msgid "Mesh Storage" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Split Stream" -msgstr "EÄŸriyi Böl" +msgstr "Akışı Böl" #: servers/visual_server.cpp msgid "Use Physical Light Attenuation" -msgstr "" +msgstr "Fiziksel Işık Zayıflatmayı Kullanın" #: servers/visual_server.cpp msgid "Depth Prepass" -msgstr "" +msgstr "Derinlik Ön GeçiÅŸi" #: servers/visual_server.cpp msgid "Disable For Vendors" -msgstr "" +msgstr "Bu Satıcılar İçin Devre Dışı Bırak" #: servers/visual_server.cpp msgid "Anisotropic Filter Level" @@ -28088,12 +28364,11 @@ msgstr "" #: servers/visual_server.cpp msgid "Legacy Stream" -msgstr "" +msgstr "Eski Akış" #: servers/visual_server.cpp -#, fuzzy msgid "Batching" -msgstr "Aranıyor..." +msgstr "Yığınlama" #: servers/visual_server.cpp msgid "Use Batching" @@ -28144,25 +28419,23 @@ msgstr "Çerçeveyi Yapıştır" #: servers/visual_server.cpp msgid "GLES2" -msgstr "" +msgstr "GLES2" #: servers/visual_server.cpp msgid "Compatibility" -msgstr "" +msgstr "Uyumluluk" #: servers/visual_server.cpp msgid "Disable Half Float" -msgstr "" +msgstr "Yarım Float'ı devre dışı bırak" #: servers/visual_server.cpp -#, fuzzy msgid "Enable High Float" -msgstr "Önceliklemeyi EtkinleÅŸtir" +msgstr "Yüksek Float'ı EtkinleÅŸtir" #: servers/visual_server.cpp -#, fuzzy msgid "Precision" -msgstr "İfade" +msgstr "Hassasiyet" #: servers/visual_server.cpp msgid "UV Contract" @@ -28182,9 +28455,8 @@ msgid "PVS Logging" msgstr "" #: servers/visual_server.cpp -#, fuzzy msgid "Use Signals" -msgstr "sinyaller" +msgstr "Sinyal Kullan" #: servers/visual_server.cpp #, fuzzy @@ -28203,12 +28475,11 @@ msgstr "Emilme Ayırmayı Görüntüle" #: servers/visual_server.cpp msgid "Max Active Spheres" -msgstr "" +msgstr "Maks. Aktif Küre Sayısı" #: servers/visual_server.cpp -#, fuzzy msgid "Max Active Polygons" -msgstr "Çokgeni Taşı" +msgstr "Maks. Aktif Çokgen Sayısı" #: servers/visual_server.cpp #, fuzzy diff --git a/editor/translations/uk.po b/editor/translations/uk.po index f796d5c6a5..6d96ccc30b 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -28,7 +28,7 @@ msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-06-03 02:51+0000\n" +"PO-Revision-Date: 2022-06-12 13:19+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -222,9 +222,10 @@ msgid "Data" msgstr "Дані" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Мережа" @@ -330,9 +331,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "ÐедоÑтатньо байтів Ð´Ð»Ñ Ñ—Ñ… Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ вказано некоректний формат." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "Ðекоректні вхідні дані %i (не передано) у виразі" +msgstr "Ðекоректні вхідні дані %d (не передано) у виразі" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -377,6 +377,16 @@ msgstr "Черга повідомлень" msgid "Max Size (KB)" msgstr "МакÑ. розмір (кБ)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Режим переміщеннÑ" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Видалити введеннÑ" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -556,7 +566,8 @@ msgstr "ОпиÑ" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "ЗапуÑтити" @@ -639,6 +650,10 @@ msgid "Main Run Args" msgstr "Ðргументи оÑновного запуÑку" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "Ð†Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñцен" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ у файлах" @@ -646,18 +661,15 @@ msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ у файлах" msgid "Script Templates Search Path" msgstr "ШлÑÑ… пошуку Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð² Ñкриптів" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Ðвтоматично завантажувати під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Ðазва додатка" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -764,7 +776,8 @@ msgid "Quality" msgstr "ЯкіÑть" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Фільтри" @@ -1289,19 +1302,16 @@ msgid "Remove this track." msgstr "Вилучити цю доріжку." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "Ð§Ð°Ñ (Ñ): " +msgstr "Ð§Ð°Ñ (Ñ):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "РозташуваннÑ" +msgstr "РозташуваннÑ:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "ОбертаннÑ" +msgstr "ОбертаннÑ:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1318,44 +1328,36 @@ msgid "Type:" msgstr "Тип:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "Ðеправильний шаблон екÑпорту:" +msgstr "(Ðекоректний, очікуваний тип: %s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "Пом'ÑкшеннÑ" +msgstr "Пом'ÑкшеннÑ:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In-Handle:" -msgstr "ДеÑкриптор входу" +msgstr "ДеÑкриптор входу:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out-Handle:" -msgstr "ДеÑкриптор виходу" +msgstr "ДеÑкриптор виходу:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Stream:" -msgstr "Потік" +msgstr "Потік:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start (s):" -msgstr "ПерезапуÑтити (Ñек.):" +msgstr "Початок (Ñек.):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End (s):" -msgstr "ÐароÑÑ‚Ð°Ð½Ð½Ñ (Ñ):" +msgstr "Кінець (Ñек.):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Clip:" -msgstr "Ðнімації:" +msgstr "Кліп анімації:" #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -1570,9 +1572,8 @@ msgid "Add Method Track Key" msgstr "Додати ключ доріжки методів" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "Ðе знайдено метод у об'єкті: " +msgstr "Ðе знайдено метод у об'єкті:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2184,8 +2185,8 @@ msgid "Open" msgstr "Відкрити" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ВлаÑники:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2488,7 +2489,7 @@ msgid "Bus Options" msgstr "Параметри шини" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Дублювати" @@ -2541,9 +2542,8 @@ msgid "There is no '%s' file." msgstr "Ðемає файла «%s»." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "Макет" +msgstr "КомпонуваннÑ:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2745,6 +2745,25 @@ msgid "Choose" msgstr "Оберіть" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Повні шлÑхи до файлів" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Пакунок уÑпішно вÑтановлено!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Ðе вдалоÑÑ:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ:" @@ -2757,6 +2776,31 @@ msgid "Packing" msgstr "ПакуваннÑ" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Зберегти Ñк" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Ðеможливо Ñтворити теку." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Ðеможливо відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Зберегти Ñк" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2873,11 +2917,33 @@ msgstr "Ðетипового шаблону діагноÑтики не знай msgid "Custom release template not found." msgstr "Ðетипового шаблону випуÑку не знайдено." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "Вказаного шлÑху Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Файл шаблону не знайдено:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Ðеправильний шаблон екÑпорту:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "ФаÑка" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" "При екÑпортуванні у 32-бітовому режимі вбудовані PCK не можуть перевищувати " @@ -3056,9 +3122,9 @@ msgid "Import" msgstr "Імпорт" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "ЕкÑпортуваннÑ" @@ -4209,14 +4275,6 @@ msgstr "" "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати до файла «%s», файл викориÑтовує інша програма, його " "заблоковано або у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” відповідних прав доÑтупу до нього." -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Сцена" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "Ð†Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñцен" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4331,6 +4389,10 @@ msgid "Default Color Picker Mode" msgstr "Типовий режим піпетки кольорів" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "КориÑтувач" @@ -4358,6 +4420,10 @@ msgstr "Перемкнути режим без відволіканнÑ." msgid "Add a new scene." msgstr "Додати нову Ñцену." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Сцена" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Перейти до раніше відкритої Ñцени." @@ -5051,9 +5117,8 @@ msgid "Size:" msgstr "Розмір:" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "Сторінка: " +msgstr "Сторінка:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5150,6 +5215,11 @@ msgstr "" "Будь лаÑка, додайте придатний до викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ñ–Ñ€ параметрів за допомогою " "меню «ЕкÑпорт» або визначне наÑвний набір Ñк придатний до викориÑтаннÑ." +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Проєкт" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Ðапишіть Ñвою логіку в методі _run ()." @@ -5405,7 +5475,9 @@ msgid "Draw Spaces" msgstr "Ð’Ñ–Ð·ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð±Ñ–Ð»Ñ–Ð²" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "ÐавігаціÑ" @@ -6818,7 +6890,7 @@ msgstr "ПовтореннÑ" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "Фільтр" @@ -7052,9 +7124,8 @@ msgid "Generating Lightmaps" msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ€Ñ‚ оÑвітленнÑ" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñітки: " +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñітки:" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7081,6 +7152,18 @@ msgid "Saving..." msgstr "ЗбереженнÑ..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "2D, виÑвити 3D" @@ -8047,9 +8130,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "Ð’Ñтановити кінець анімації. КориÑно Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… переходів." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "Перехід: " +msgstr "Перехід:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9808,9 +9890,8 @@ msgid "Volume" msgstr "Об'єм" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "Джерело випромінюваннÑ: " +msgstr "Джерело випромінюваннÑ:" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -10043,6 +10124,7 @@ msgid "Points" msgstr "Точки" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Полігони" @@ -10905,15 +10987,13 @@ msgstr "ПереÑунути" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "МаÑштаб: " +msgstr "МаÑштаб:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "ПеренеÑеннÑ: " +msgstr "ПеренеÑеннÑ:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11424,7 +11504,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Ðекоректна геометріÑ, неможливо замінити Ñіткою." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Перетворити на Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -11456,19 +11537,16 @@ msgid "Sprite" msgstr "Спрайт" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "СпрощеннÑ: " +msgstr "СпрощеннÑ:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "СтиÑÐºÐ°Ð½Ð½Ñ (пікÑелі): " +msgstr "СтиÑÐºÐ°Ð½Ð½Ñ (пікÑелі):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі): " +msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12410,8 +12488,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Вибір попередньої форми, підплитки або плитки." #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "ОблаÑть" @@ -12779,7 +12856,7 @@ msgstr "Інтервал Ñубтитрів" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occluder Offset" -msgstr "" +msgstr "ЗÑув покриттÑ" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Offset" @@ -12816,9 +12893,8 @@ msgid "Selected Occlusion" msgstr "Позначене зіткненнÑ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tileset Script" -msgstr "Filter Script (Фільтрувальний Ñкрипт)" +msgstr "Скрипт набору плиток" #: editor/plugins/tile_set_editor_plugin.cpp msgid "TileSet" @@ -13908,48 +13984,23 @@ msgstr "Ðктивний" #: editor/project_export.cpp msgid "Export the project for all the presets defined." -msgstr "" +msgstr "ЕкÑпортувати проєкт Ð´Ð»Ñ ÑƒÑÑ–Ñ… визначених наборів." #: editor/project_export.cpp msgid "All presets must have an export path defined for Export All to work." msgstr "" +"Щоб можна було ÑкориÑтатиÑÑ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð¼ «ЕкÑпортувати уÑе», має бути визначено " +"шлÑÑ… Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑƒÑÑ–Ñ… наборів." #: editor/project_export.cpp msgid "Delete preset '%s'?" msgstr "Вилучити набір «%s»?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Ðе вдалоÑÑ ÐµÐºÑпортувати проєкт Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ «%s».\n" -"ЗдаєтьÑÑ, шаблони екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ або вони Ñ” некоректними." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Ðе вдалоÑÑ ÐµÐºÑпортувати проєкт Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ «%s».\n" -"Причиною може бути помилка у налаштуваннÑÑ… у наборі налаштувань Ð´Ð»Ñ " -"екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ параметрах екÑпортуваннÑ." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑього" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "Вказаного шлÑху Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" -"Ðе виÑтачає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ або шаблони пошкоджено:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "ШлÑÑ… екÑпорту" @@ -14059,43 +14110,43 @@ msgid "More Info..." msgstr "Додаткова інформаціÑ…" #: editor/project_export.cpp -#, fuzzy msgid "Export PCK/Zip..." -msgstr "ЕкÑпортувати PCK/Zip" +msgstr "ЕкÑпортувати PCK/Zip…" #: editor/project_export.cpp -#, fuzzy msgid "Export Project..." -msgstr "ЕкÑпортувати проєкт" +msgstr "ЕкÑпортувати проєкт…" #: editor/project_export.cpp msgid "Export All" msgstr "ЕкÑпортувати уÑе" #: editor/project_export.cpp -#, fuzzy msgid "Choose an export mode:" -msgstr "Будь лаÑка, виберіть порожню теку." +msgstr "Виберіть режим екÑпортуваннÑ:" #: editor/project_export.cpp -#, fuzzy msgid "Export All..." -msgstr "ЕкÑпортувати уÑе" +msgstr "ЕкÑпортувати уÑе…" #: editor/project_export.cpp editor/project_manager.cpp msgid "ZIP File" msgstr "Файл ZIP" #: editor/project_export.cpp -#, fuzzy msgid "Godot Project Pack" -msgstr "Пакунок гри Godot" +msgstr "Пакунок проєкту Godot" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" msgstr "Ðемає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— платформи:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "ЗаÑновники проєкту" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпорту" @@ -15644,9 +15695,8 @@ msgid "Attach Node Script" msgstr "Долучити Ñкрипт вузла" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote %s:" -msgstr "Віддалений " +msgstr "Віддалений %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16461,7 +16511,7 @@ msgstr "Сторони КільцÑ" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "Багатокутник" @@ -16531,7 +16581,7 @@ msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñервера" #: modules/enet/networked_multiplayer_enet.cpp msgid "DTLS Verify" -msgstr "" +msgstr "Перевірка DTLS" #: modules/enet/networked_multiplayer_enet.cpp msgid "DTLS Hostname" @@ -16621,9 +16671,8 @@ msgid "Disabled GDNative Singleton" msgstr "Вимкнений одинак GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries:" -msgstr "Бібліотеки: " +msgstr "Бібліотеки:" #: modules/gdnative/nativescript/nativescript.cpp msgid "Class Name" @@ -16648,7 +16697,7 @@ msgstr "Скрипт" #: modules/gdscript/editor/gdscript_highlighter.cpp msgid "Function Definition Color" -msgstr "" +msgstr "Колір Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—" #: modules/gdscript/editor/gdscript_highlighter.cpp msgid "Node Path Color" @@ -16664,11 +16713,11 @@ msgstr "вважати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸" #: modules/gdscript/gdscript.cpp msgid "Exclude Addons" -msgstr "" +msgstr "Виключити додатки" #: modules/gdscript/gdscript.cpp msgid "Autocomplete Setters And Getters" -msgstr "" +msgstr "Ðвтоматичне Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñтановлювачів Ñ– отримувачів" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" @@ -17018,7 +17067,6 @@ msgid "Use In Baked Light" msgstr "ВикориÑтовувати у запеченому Ñвітлі" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "Мобільний" @@ -17044,6 +17092,19 @@ msgstr "Центр за Z" msgid "Mask" msgstr "МаÑка" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "ÐавігаціÑ" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Поведінка навігації" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "ÐаÑтупна площина" @@ -17447,9 +17508,8 @@ msgstr "" "вузла! Будь лаÑка, виправте ваш вузол." #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "Вузлом повернуто некоректну поÑлідовніÑть даних: " +msgstr "Вузлом повернуто некоректну поÑлідовніÑть даних:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -17457,9 +17517,8 @@ msgstr "" "ВиÑвлено біт поÑлідовноÑті, але не вузол у Ñтеку. Повідомте про цю ваду!" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Stack overflow with stack depth:" -msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека, глибина Ñтека: " +msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека, глибина Ñтека:" #: modules/visual_script/visual_script.cpp msgid "Visual Script" @@ -17827,18 +17886,16 @@ msgid "for (elem) in (input):" msgstr "Ð´Ð»Ñ (elem) у (input):" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Input type not iterable:" -msgstr "Тип вводу не ітерабельний: " +msgstr "Ð†Ñ‚ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð° вхідним типом неможлива:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" msgstr "Ітератор Ñтав недійÑним" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Iterator became invalid:" -msgstr "Ітератор Ñтав недійÑним: " +msgstr "Ітератор Ñтав некоректним:" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -17990,14 +18047,12 @@ msgid "Operator" msgstr "Оператор" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid argument of type:" -msgstr ": Ðеправильний тип аргументу: " +msgstr "Ðекоректний тип аргументу:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid arguments:" -msgstr ": ÐеприпуÑтимі аргументи: " +msgstr "Ðекоректні аргументи:" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -18008,14 +18063,12 @@ msgid "Var Name" msgstr "Ðазва змінної" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script:" -msgstr "Ðе знайдено VariableGet у Ñкрипті: " +msgstr "Ðе знайдено VariableGet у Ñкрипті:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script:" -msgstr "Ðе знайдено VariableSet у Ñкрипті: " +msgstr "Ðе знайдено VariableSet у Ñкрипті:" #: modules/visual_script/visual_script_nodes.cpp msgid "Preload" @@ -18502,10 +18555,6 @@ msgid "Could not execute on device." msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ на приÑтрої." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ програму apksigner." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18640,12 +18689,17 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "ВерÑÑ–Ñ Â«SDK цілі» має бути більшою або рівною за верÑÑ–ÑŽ «Мін. SDK»." +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "DMG із підпиÑуваннÑм коду" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «apksigner».\n" "Будь лаÑка, перевірте, чи Ñ” програма доÑтупною у каталозі build-tools набору " @@ -18665,6 +18719,11 @@ msgid "Could not find keystore, unable to export." msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ." #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "«apksigner» повернуто Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку із номером %d" @@ -18696,7 +18755,8 @@ msgstr "" "Ðекоректна назва файла! Пакунок Android APK повинен мати ÑÑƒÑ„Ñ–ÐºÑ Ð½Ð°Ð·Ð²Ð¸ *.apk." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "Ðепідтримуваний формат екÑпортуваннÑ!\n" #: platform/android/export/export_plugin.cpp @@ -18709,10 +18769,9 @@ msgstr "" "допомогою меню «Проєкт»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "ÐевідповідніÑть верÑÑ–Ñ Ð´Ð»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Android:\n" @@ -18722,13 +18781,15 @@ msgstr "" "меню «Проєкт»." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати файли res://android/build/res/*.xml із назвою проєкту" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту до проєкту gradle\n" #: platform/android/export/export_plugin.cpp @@ -18740,8 +18801,9 @@ msgid "Building Android Project (gradle)" msgstr "Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ Android. ОзнайомтеÑÑ Ñ–Ð· виведеними " @@ -18762,7 +18824,8 @@ msgstr "" "дані можна знайти у каталозі проєкту gradle." #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "Пакунок не знайдено: %s" #: platform/android/export/export_plugin.cpp @@ -18770,17 +18833,16 @@ msgid "Creating APK..." msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ APK…" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ шаблон APK Ð´Ð»Ñ ÐµÐºÑпортуваннÑ:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18793,7 +18855,8 @@ msgid "Adding files..." msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²â€¦" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту" #: platform/android/export/export_plugin.cpp @@ -19028,6 +19091,17 @@ msgstr "Ðетиповий колір тла" msgid "Custom BG Color" msgstr "Ðетиповий колір тла" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Ðетипового шаблону випуÑку не знайдено." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19050,22 +19124,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Виконати екÑпортований HTML у браузері за умовчаннÑм ÑиÑтеми." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ шаблон Ð´Ð»Ñ ÐµÐºÑпорту:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Ðеправильний шаблон екÑпорту:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Поле піктограми" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Variant" msgstr "Варіант" @@ -19134,15 +19221,18 @@ msgid "Icon 512 X 512" msgstr "Піктограма 512⨯12" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ оболонку HTML:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "Ðе вдалоÑÑ Ñтворити каталог на Ñервері HTTP:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запуÑку Ñервера HTTP:" #: platform/javascript/export/export.cpp @@ -19407,9 +19497,29 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "ЗаÑвідченнÑ" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" "ЗауваженнÑ: процедура заÑвідченнÑ, загалом, триває не більше години. Щойно " "процедуру буде завершено, ви отримаєте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾ÑŽ поштою." @@ -19431,18 +19541,83 @@ msgstr "" "програми (необов'Ñзкова процедура):" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñових позначок Ñ” неÑуміÑним із одноразовим підпиÑом — його " +"буде вимкнено!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" +"Стійке Ñередовище запуÑку Ñ” неÑуміÑним із одноразовим підпиÑом — його буде " +"вимкнено!" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "Ðе знайдено профілю." #: platform/osx/export/export.cpp +#, fuzzy +msgid "Cannot sign file %s." +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" +"У цій операційній ÑиÑтемі не передбачено підтримки відноÑних Ñимволічних " +"поÑилань. ЕкÑпортований проєкт може виÑвитиÑÑ Ð½ÐµÐ¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¸Ð¼!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "ÐапрÑмок" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "Створюємо комплект програми" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +#, fuzzy +msgid "Could not find template app to export: \"%s\"." msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ програму-шаблон Ð´Ð»Ñ ÐµÐºÑпортуваннÑ:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Ðеправильний шаблон екÑпорту:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19451,8 +19626,9 @@ msgstr "" "поÑилань. ЕкÑпортований проєкт може виÑвитиÑÑ Ð½ÐµÐ¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¸Ð¼!" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Ðе знайдено двійкового файла шаблона «%s». Ймовірно, його немає у вашому " @@ -19499,6 +19675,16 @@ msgid "Sending archive for notarization" msgstr "ÐадÑилаємо архів Ð´Ð»Ñ Ð·Ð°ÑвідченнÑ" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "ПроєкціÑ" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту до проєкту gradle\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "Ðекоректний ідентифікатор пакунка:" @@ -19835,6 +20021,11 @@ msgid "Debug Algorithm" msgstr "Ðлгоритм діагноÑтики" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "Тип профілю" @@ -19875,6 +20066,78 @@ msgid "Trademarks" msgstr "Торгівельні марки" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "ІмпульÑні ÑповіщеннÑ" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"Щоб мати змогу змінювати піктограму або дані щодо програми, має бути " +"налаштовано інÑтрумент rcedit у параметрах редактора (ЕкÑпорт > Windows > " +"Rcedit)." + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Тип профілю" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Ðекоректна назва." + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"Щоб мати змогу змінювати піктограму або дані щодо програми, має бути " +"налаштовано інÑтрумент rcedit у параметрах редактора (ЕкÑпорт > Windows > " +"Rcedit)." + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19896,6 +20159,23 @@ msgid "Invalid product version:" msgstr "Ðекоректна верÑÑ–Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ:" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Ðекоректний виконуваний файл." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Вікна" @@ -19911,6 +20191,10 @@ msgstr "" msgid "Wine" msgstr "Вино" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -20021,7 +20305,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "МакÑ. відÑтань" @@ -20799,17 +21084,19 @@ msgstr "" "намалюйте багатокутник." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance має бути дочірнім елементом вузла Navigation2D або " -"елементом ще нижчої підпорÑдкованоÑті. Він надає лише навігаційні дані." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "За центром внизу" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Подорож" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -21922,14 +22209,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent можна викориÑтовувати лише під проÑторовим вузлом." -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance має бути дочірнім елементом вузла Navigation або " -"елементом ще нижчої підпорÑдкованоÑті. Він надає лише навігаційні дані." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "NavMesh" @@ -22974,9 +23253,8 @@ msgid "Delay" msgstr "Затримка торканнÑ" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Random Delay" -msgstr "Випадковий нахил:" +msgstr "Випадкова затримка" #: scene/animation/animation_blend_tree.cpp #, fuzzy @@ -24396,6 +24674,16 @@ msgid "3D Physics" msgstr "ПроÑторова фізика" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "ÐавігаціÑ" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "ÐавігаціÑ" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "ВикориÑтовувати hiDPI" @@ -25644,7 +25932,7 @@ msgstr "Перехід" msgid "Refraction" msgstr "ЗаломленнÑ" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "Подробиці" @@ -25719,7 +26007,13 @@ msgid "Visible Instance Count" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" +#, fuzzy +msgid "Sampling" +msgstr "МаÑштаб:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Ð’Ñтановити базовий тип змінної" #: scene/resources/navigation_mesh.cpp @@ -25735,7 +26029,13 @@ msgid "Source Group Name" msgstr "Ðазва групи джерел" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +#, fuzzy +msgid "Cells" +msgstr "Мобільний" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" msgstr "ÐГЕÐТ" #: scene/resources/navigation_mesh.cpp @@ -25747,11 +26047,17 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "ОблаÑть" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "Об'єднати зі Ñцени" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +#, fuzzy +msgid "Edges" msgstr "Край" #: scene/resources/navigation_mesh.cpp @@ -25763,6 +26069,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Подробиці" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "ВідÑтань диÑкретизації" @@ -25779,7 +26090,7 @@ msgid "Ledge Spans" msgstr "Розміри планки" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26153,6 +26464,11 @@ msgid "Scenario" msgstr "Сценарій" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "ÐавігаціÑ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26168,6 +26484,26 @@ msgstr "Лівий лінійний" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Типовий крок переÑуваннÑ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Розмір комірки" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "ВиÑота комірки" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Поле з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€ÐµÐ±ÐµÑ€" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "Полотно" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index da5aea8eef..79cb7b84e2 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -212,9 +212,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr ".تمام کا انتخاب" @@ -372,6 +373,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "ایکشن منتقل کریں" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -560,7 +570,8 @@ msgstr "سب سکریپشن بنائیں" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "" @@ -644,24 +655,23 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp -msgid "Search In File Extensions" +msgid "Scene Naming" msgstr "" #: core/project_settings.cpp -msgid "Script Templates Search Path" +msgid "Search In File Extensions" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" +#: core/project_settings.cpp +msgid "Script Templates Search Path" msgstr "" #: core/project_settings.cpp -msgid "Autoload On Startup" +msgid "Version Control Autoload On Startup" msgstr "" #: core/project_settings.cpp -msgid "Plugin Name" +msgid "Version Control Plugin Name" msgstr "" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp @@ -770,7 +780,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "سب سکریپشن بنائیں" @@ -2184,7 +2195,7 @@ msgid "Open" msgstr "" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2480,7 +2491,7 @@ msgid "Bus Options" msgstr "سب سکریپشن بنائیں" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "" @@ -2739,6 +2750,22 @@ msgid "Choose" msgstr "" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2751,6 +2778,28 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "سب سکریپشن بنائیں" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "سب سکریپشن بنائیں" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2854,8 +2903,27 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr ".تمام کا انتخاب" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +msgid "Template file not found: \"%s\"." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr ".تمام کا انتخاب" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3034,9 +3102,9 @@ msgid "Import" msgstr "درآمد" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "" @@ -4142,14 +4210,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4269,6 +4329,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr ".تمام کا انتخاب" @@ -4297,6 +4361,10 @@ msgstr "" msgid "Add a new scene." msgstr "" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "" @@ -5044,6 +5112,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "سب سکریپشن بنائیں" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5306,7 +5379,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "سب سکریپشن بنائیں" @@ -6745,7 +6820,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "سب سکریپشن بنائیں" @@ -7025,6 +7100,18 @@ msgid "Saving..." msgstr "" #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -9996,6 +10083,7 @@ msgid "Points" msgstr ".تمام کا انتخاب" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "سب سکریپشن بنائیں" @@ -11387,8 +11475,9 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "" +#, fuzzy +msgid "Convert to MeshInstance2D" +msgstr ".تمام کا انتخاب" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -12398,8 +12487,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "ایکشن منتقل کریں" @@ -13892,31 +13980,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp msgid "Export Path" msgstr "" @@ -14055,6 +14122,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "سب سکریپشن بنائیں" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "" @@ -16373,7 +16445,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "سب سکریپشن بنائیں" @@ -16960,7 +17032,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -16990,6 +17061,19 @@ msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "سب سکریپشن بنائیں" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "سب سکریپشن بنائیں" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "" @@ -18503,10 +18587,6 @@ msgid "Could not execute on device." msgstr "سب سکریپشن بنائیں" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18610,12 +18690,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr ".تمام کا انتخاب" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18631,6 +18715,10 @@ msgid "Could not find keystore, unable to export." msgstr "" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -18659,7 +18747,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -18670,20 +18758,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "سب سکریپشن بنائیں" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18695,7 +18782,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -18710,7 +18797,7 @@ msgid "" msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "" #: platform/android/export/export_plugin.cpp @@ -18718,15 +18805,13 @@ msgid "Creating APK..." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." +msgstr "سب سکریپشن بنائیں" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -18738,7 +18823,7 @@ msgstr ".تمام کا انتخاب" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "سب سکریپشن بنائیں" #: platform/android/export/export_plugin.cpp @@ -18974,6 +19059,16 @@ msgstr "ایکشن منتقل کریں" msgid "Custom BG Color" msgstr "ایکشن منتقل کریں" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr ".تمام کا انتخاب" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -18995,24 +19090,34 @@ msgid "Run exported HTML in the system's default browser." msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "" +#, fuzzy +msgid "Invalid export template: \"%s\"." +msgstr ".تمام کا انتخاب" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "سب سکریپشن بنائیں" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr ".تمام کا انتخاب" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "سب سکریپشن بنائیں" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr ".تمام کا انتخاب" @@ -19088,15 +19193,15 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "سب سکریپشن بنائیں" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "" #: platform/javascript/export/export.cpp @@ -19380,9 +19485,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19398,18 +19522,72 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "" #: platform/osx/export/export.cpp -msgid "Creating app bundle" +msgid "Cannot sign file %s." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." msgstr "" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" +msgid "`hdiutil create` failed." msgstr "" #: platform/osx/export/export.cpp +msgid "Creating app bundle" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not find template app to export: \"%s\"." +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19417,7 +19595,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19458,6 +19636,15 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "سب سکریپشن بنائیں" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "" @@ -19763,6 +19950,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "سب سکریپشن بنائیں" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -19807,6 +19999,64 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "مستقل" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "'%s' Ú©ÛŒ تعمیر Ú©Û’ لیے غلط دلائل" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19825,6 +20075,22 @@ msgid "Invalid product version:" msgstr "" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -19840,6 +20106,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -19954,7 +20224,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "" @@ -20743,13 +21014,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -21861,12 +22135,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -24350,6 +24618,16 @@ msgid "3D Physics" msgstr "" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "سب سکریپشن بنائیں" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "سب سکریپشن بنائیں" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -25703,7 +25981,7 @@ msgstr "" msgid "Refraction" msgstr ".تمام کا انتخاب" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -25781,7 +26059,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "ایکشن منتقل کریں" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" #: scene/resources/navigation_mesh.cpp @@ -25797,10 +26080,15 @@ msgid "Source Group Name" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "سب سکریپشن بنائیں" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -25809,11 +26097,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "ایکشن منتقل کریں" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -25825,6 +26118,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -25842,7 +26140,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -26233,6 +26531,11 @@ msgid "Scenario" msgstr "" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "سب سکریپشن بنائیں" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -26249,6 +26552,26 @@ msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr ".تمام کا انتخاب" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 3fb7a375c8..a16d75a4bc 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -222,9 +222,10 @@ msgid "Data" msgstr "Dữ liệu" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "Mạng" @@ -376,6 +377,16 @@ msgstr "Hà ng chá» thông Ä‘iệp" msgid "Max Size (KB)" msgstr "KÃch cỡ tối Ä‘a (KB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "Chế độ Di chuyển" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "Xoá Input" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -559,7 +570,8 @@ msgstr "Mô tả" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "Chạy" @@ -647,6 +659,11 @@ msgid "Main Run Args" msgstr "Tham số Cảnh chÃnh:" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "ÄÆ°á»ng dẫn Cảnh:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -654,18 +671,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "ÄÆ°á»ng dẫn tìm kiếm bản mẫu kịch bản" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "Theo dõi phiên bản" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "Tá»± nạp khi khởi động" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "Tên trình cắm" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "Theo dõi phiên bản" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -776,7 +790,8 @@ msgid "Quality" msgstr "Chất lượng" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "Bá»™ lá»c" @@ -2201,8 +2216,8 @@ msgid "Open" msgstr "Mở" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "Sở hữu cá»§a:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp #, fuzzy @@ -2508,7 +2523,7 @@ msgid "Bus Options" msgstr "Tùy chá»n Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "Nhân đôi" @@ -2767,6 +2782,25 @@ msgid "Choose" msgstr "Chá»n" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "Sao chép đưá»ng dẫn nút" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "Cà i đặt gói thà nh công!" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "Thất bại:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "Lưu trữ tệp tin:" @@ -2779,6 +2813,31 @@ msgid "Packing" msgstr "Äóng gói" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "Lưu thà nh" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "Không thể tạo folder." + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "Không viết được file:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "Không thể mở tệp để ghi:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "Lưu thà nh" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2893,11 +2952,33 @@ msgstr "Không tìm thấy bản mẫu gỡ lá»—i tuỳ chỉnh." msgid "Custom release template not found." msgstr "Không tìm thấy bản mẫu phát hà nh tùy chỉnh." +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "Quản lý bản mẫu" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "ÄÆ°á»ng dẫn xuất không tồn tại:" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "Không tìm thấy tệp bản mẫu:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "Bản mẫu xuất không hợp lệ:" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "Äệm" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "Ở các bản xuất 32-bit thì PCK được nhúng và o không thể lá»›n hÆ¡n 4 GiB." @@ -3064,9 +3145,9 @@ msgid "Import" msgstr "Nháºp" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "Xuất ra" @@ -4196,15 +4277,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "Cảnh" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "ÄÆ°á»ng dẫn Cảnh:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4327,6 +4399,10 @@ msgid "Default Color Picker Mode" msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Theo dõi phiên bản" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "Tên ngưá»i dùng" @@ -4354,6 +4430,10 @@ msgstr "Báºt tắt chế độ táºp trung." msgid "Add a new scene." msgstr "Thêm cảnh má»›i." +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "Cảnh" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "Trở vá» cảnh đã mở trước đó." @@ -5117,6 +5197,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "Dá»± Ãn" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "Ghi logic cá»§a bạn trong hà m _run()." @@ -5379,7 +5464,9 @@ msgid "Draw Spaces" msgstr "Lượt gá»i" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "Äiá»u hướng" @@ -6878,7 +6965,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "Lá»c:" @@ -7172,6 +7259,18 @@ msgid "Saving..." msgstr "Äang lưu ..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10154,6 +10253,7 @@ msgid "Points" msgstr "Các Äiểm" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "Äa giác" @@ -11566,7 +11666,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "Hình không hợp lệ, không thể thay thế bằng lưới." #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "Chuyển thà nh Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12619,8 +12720,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "Khu vá»±c" @@ -14113,36 +14213,10 @@ msgid "Delete preset '%s'?" msgstr "" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"Không thể xuất dá»± án cho ná»n tảng '%s'.\n" -"Bản mẫu xuất dưá»ng như bị thiếu hoặc không hợp lệ." - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"Không thể xuất dá»± án cho ná»n tảng '%s'.\n" -"Có thể là do vấn đỠcấu hình trong cà i đặt xuất bản hoặc cà i đặt xuất bản " -"cá»§a bạn." - -#: editor/project_export.cpp msgid "Exporting All" msgstr "Äang xuất tất cả" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "ÄÆ°á»ng dẫn xuất không tồn tại:" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "Các bản mẫu xuất cho ná»n tảng nà y bị thiếu/há»ng:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "ÄÆ°á»ng dẫn xuất" @@ -14288,6 +14362,11 @@ msgid "Export templates for this platform are missing:" msgstr "Các mẫu xuất bản cho ná»n tảng nà y bị thiếu:" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "Các đồng sáng láºp dá»± án" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "Quản là bản mẫu xuất" @@ -16714,7 +16793,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "Äa giác" @@ -17333,7 +17412,6 @@ msgid "Use In Baked Light" msgstr "Ãnh sáng" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17363,6 +17441,19 @@ msgstr "Giữa" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "Äiá»u hướng" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "Chế độ di chuyển" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "Mặt phẳng tiếp theo" @@ -18921,10 +19012,6 @@ msgid "Could not execute on device." msgstr "Không thể tạo folder." #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "Không tìm thấy công cụ 'apksigner'." - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19042,12 +19129,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "TÃn hiệu" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19067,6 +19158,11 @@ msgid "Could not find keystore, unable to export." msgstr "Không thể mở bản mẫu để xuất:" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "Không thể bắt đầu quá trình phụ!" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19097,7 +19193,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Tên tệp không hợp lệ! Android APK cần Ä‘uôi *.apk ở cuối." #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19109,10 +19205,9 @@ msgstr "" "phiên bản nà o tồn tại. Vui lòng cà i đặt lại từ bảng chá»n'Dá»± án'." #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Phiên bản dá»±ng Android không khá»›p:\n" @@ -19122,12 +19217,12 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files to gradle project\n" +msgid "Could not export project files to gradle project." msgstr "Không thể chỉnh sá»a 'project.godot' trong đưá»ng dẫn dá»± án." #: platform/android/export/export_plugin.cpp @@ -19140,8 +19235,9 @@ msgid "Building Android Project (gradle)" msgstr "Äang dá»±ng dá»± án Android (gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Xây dá»±ng dá»± án Android thất bại, hãy kiểm tra đầu ra để biết lá»—i.\n" @@ -19161,7 +19257,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "Không tìm thấy Animation: '%s'" #: platform/android/export/export_plugin.cpp @@ -19170,15 +19266,14 @@ msgid "Creating APK..." msgstr "Tạo đưá»ng viá»n ..." #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "Không thể tìm APK bản mẫu để xuất:" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19193,7 +19288,7 @@ msgstr "Äang thêm %s..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "Không viết được file:" #: platform/android/export/export_plugin.cpp @@ -19435,6 +19530,17 @@ msgstr "Cắt các nút" msgid "Custom BG Color" msgstr "Cắt các nút" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "Quản lý bản mẫu" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Không tìm thấy bản mẫu phát hà nh tùy chỉnh." + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "App Store Team ID không được chỉ định - không thể cấu hình dá»± án." @@ -19456,23 +19562,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "Chạy HTML được xuất vá»›i trình duyệt mặc định cá»§a máy." #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "Không thể mở bản mẫu để xuất:" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "Bản mẫu xuất không hợp lệ:" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "Không viết được file:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "Äặt Lá»" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "Không viết được file:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "Thu phóng (theo tỉ lệ):" @@ -19548,17 +19666,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "Không Ä‘á»c được file hình khởi động:" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "Không thể tạo folder." #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "Lá»—i khi lưu scene." #: platform/javascript/export/export.cpp @@ -19858,9 +19976,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "Không viết được file:" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "Không thể bắt đầu quá trình phụ!" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "Bản địa hoá" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19876,29 +20013,85 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "Không tìm thấy tà i nguyên phụ." #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "Lá»—i lưu tệp: %s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "Hướng Ä‘i" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "Không thể bắt đầu quá trình phụ!" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "Tạo hình thu nhá»" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "Không thể mở bản mẫu để xuất:" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "Bản mẫu xuất không hợp lệ:" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" "Không thấy tệp nhị phân bản mẫu được yêu cầu '%s'. Nó có thể bị thiếu trong " @@ -19942,6 +20135,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "Dá»± Ãn" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "Không thể chỉnh sá»a 'project.godot' trong đưá»ng dẫn dá»± án." + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "Äịnh danh không hợp lệ:" @@ -20254,6 +20457,11 @@ msgid "Debug Algorithm" msgstr "Trình gỡ lá»—i" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "Không thể gỡ bá» tệp tạm thá»i:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20301,6 +20509,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "Xoay ngẫu nhiên:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "Không thể mở bản mẫu để xuất:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "Không thể mở bản mẫu để xuất:" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "Không thể mở bản mẫu để xuất:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "Không thể mở bản mẫu để xuất:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "Äịnh danh không hợp lệ:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "Tên không hợp lệ." + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "Không thể gỡ bá» tệp tạm thá»i:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20322,6 +20594,23 @@ msgid "Invalid product version:" msgstr "GUID sản phẩm không hợp lệ." #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "Tên Ä‘uôi không hợp lệ." + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "Cá»a sổ má»›i" @@ -20338,6 +20627,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20465,7 +20758,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Thêm và o Cảnh" @@ -21321,17 +21615,19 @@ msgstr "" "chạy được. Vui lòng đặt thuá»™c tÃnh hoặc vẽ má»™t Ä‘a giác." #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance phải là nút con hoặc cháu cá»§a nút Navigation2D. Nó " -"chỉ cung cấp dữ liệu Ä‘iá»u hướng." - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "Dưới giữa" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "Di chuyển" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22547,14 +22843,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance phải là nút con hoặc cháu má»™t nút Navigation. Nó chỉ " -"cung cấp dữ liệu Ä‘iá»u hướng." - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25222,6 +25510,16 @@ msgid "3D Physics" msgstr "Váºt lÃ" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "Äiá»u hướng" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "Äiá»u hướng" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26639,7 +26937,7 @@ msgstr "Chuyển tiếp: " msgid "Refraction" msgstr "Thu phóng (theo tỉ lệ):" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26722,7 +27020,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "Tá»· lệ:" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "Äặt loại biến" #: scene/resources/navigation_mesh.cpp @@ -26739,10 +27042,15 @@ msgid "Source Group Name" msgstr "Nguồn" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "Tham số Cảnh chÃnh:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26752,11 +27060,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "Khu vá»±c" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "Gá»™p từ Scene" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26769,6 +27082,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "Nạp mặc định" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26785,7 +27103,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27199,6 +27517,11 @@ msgid "Scenario" msgstr "Cảnh" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "Äiá»u hướng" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27216,6 +27539,26 @@ msgstr "Tịnh tuyến trái" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "Mặc định" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "Cáºp nháºt bản xem trước" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "Kiểm tra" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "Chỉnh sá»a kết nối:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 493d0dad63..ea23349421 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -89,7 +89,7 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2022-06-01 10:42+0000\n" +"PO-Revision-Date: 2022-06-19 11:52+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" @@ -98,7 +98,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.13-dev\n" +"X-Generator: Weblate 4.13.1-dev\n" #: core/bind/core_bind.cpp main/main.cpp msgid "Tablet Driver" @@ -282,9 +282,10 @@ msgid "Data" msgstr "æ•°æ®" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "网络" @@ -388,9 +389,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "è§£ç å—节数ä¸å¤Ÿï¼Œæˆ–æ ¼å¼æ— 效。" #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %d (not passed) in expression" -msgstr "表达å¼çš„输入 %i æ— æ•ˆï¼ˆæœªä¼ é€’ï¼‰" +msgstr "表达å¼çš„输入 %d æ— æ•ˆï¼ˆæœªä¼ é€’ï¼‰" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -433,6 +433,14 @@ msgstr "消æ¯é˜Ÿåˆ—" msgid "Max Size (KB)" msgstr "最大大å°ï¼ˆKB)" +#: core/os/input.cpp +msgid "Mouse Mode" +msgstr "é¼ æ ‡æ¨¡å¼" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "使用累积输入" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -612,7 +620,8 @@ msgstr "æè¿°" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "è¿è¡Œ" @@ -695,6 +704,10 @@ msgid "Main Run Args" msgstr "主è¿è¡Œå‚æ•°" #: core/project_settings.cpp +msgid "Scene Naming" +msgstr "场景命å" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "æœç´¢æ–‡ä»¶æ‰©å±•å" @@ -702,18 +715,15 @@ msgstr "æœç´¢æ–‡ä»¶æ‰©å±•å" msgid "Script Templates Search Path" msgstr "è„šæœ¬æ¨¡æ¿æœç´¢è·¯å¾„" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "版本控制" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "å¯åŠ¨æ—¶è‡ªåŠ¨åŠ è½½" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "æ’ä»¶å" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "版本控制" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -820,7 +830,8 @@ msgid "Quality" msgstr "è´¨é‡" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp msgid "Filters" msgstr "过滤" @@ -1345,19 +1356,16 @@ msgid "Remove this track." msgstr "移除该轨é“。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s):" -msgstr "时间(秒): " +msgstr "时间(秒):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Position:" -msgstr "ä½ç½®" +msgstr "ä½ç½®ï¼š" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rotation:" -msgstr "旋转" +msgstr "旋转:" #: editor/animation_track_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -1374,44 +1382,36 @@ msgid "Type:" msgstr "类型:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "(Invalid, expected type: %s)" -msgstr "å¯¼å‡ºæ¨¡æ¿æ— 效:" +msgstr "ï¼ˆæ— æ•ˆï¼ŒæœŸæœ›ç±»åž‹ï¼š%s)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Easing:" -msgstr "缓入缓出" +msgstr "缓动:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "In-Handle:" -msgstr "入点手柄" +msgstr "入点手柄:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Out-Handle:" -msgstr "出点手柄" +msgstr "出点手柄:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Stream:" -msgstr "æµ" +msgstr "æµï¼š" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Start (s):" -msgstr "釿–°å¼€å§‹ï¼ˆç§’):" +msgstr "开始(秒):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "End (s):" -msgstr "淡入(秒):" +msgstr "结æŸï¼ˆç§’):" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Clip:" -msgstr "动画:" +msgstr "动画剪辑:" #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -1624,9 +1624,8 @@ msgid "Add Method Track Key" msgstr "æ·»åŠ æ–¹æ³•è½¨é“帧" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object:" -msgstr "对象方法未找到: " +msgstr "对象方法未找到:" #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -2227,8 +2226,8 @@ msgid "Open" msgstr "打开" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "拥有者:" +msgid "Owners of: %s (Total: %d)" +msgstr "%s 的所有者(总计:%d)" #: editor/dependency_editor.cpp msgid "" @@ -2525,7 +2524,7 @@ msgid "Bus Options" msgstr "总线选项" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "创建副本" @@ -2578,9 +2577,8 @@ msgid "There is no '%s' file." msgstr "文件 “%s†ä¸å˜åœ¨ã€‚" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Layout:" -msgstr "布局" +msgstr "布局:" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -2782,6 +2780,23 @@ msgid "Choose" msgstr "选择" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "针对平å°å¯¼å‡ºé¡¹ç›®ï¼š" + +#: editor/editor_export.cpp +msgid "Completed with errors." +msgstr "已完æˆï¼Œå˜åœ¨é”™è¯¯ã€‚" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "æˆåŠŸå®Œæˆã€‚" + +#: editor/editor_export.cpp +msgid "Failed." +msgstr "失败。" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "ä¿å˜æ–‡ä»¶ï¼š" @@ -2794,6 +2809,26 @@ msgid "Packing" msgstr "打包ä¸" #: editor/editor_export.cpp +msgid "Save PCK" +msgstr "ä¿å˜ PCK" + +#: editor/editor_export.cpp +msgid "Cannot create file \"%s\"." +msgstr "æ— æ³•åˆ›å»ºæ–‡ä»¶â€œ%sâ€ã€‚" + +#: editor/editor_export.cpp +msgid "Failed to export project files." +msgstr "导出项目文件失败。" + +#: editor/editor_export.cpp +msgid "Can't open file to read from path \"%s\"." +msgstr "æ— æ³•æ‰“å¼€ä½äºŽâ€œ%sâ€çš„æ–‡ä»¶ç”¨äºŽè¯»å–。" + +#: editor/editor_export.cpp +msgid "Save ZIP" +msgstr "ä¿å˜ ZIP" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2902,9 +2937,26 @@ msgstr "找ä¸åˆ°è‡ªå®šä¹‰è°ƒè¯•模æ¿ã€‚" msgid "Custom release template not found." msgstr "找ä¸åˆ°è‡ªå®šä¹‰å‘布模æ¿ã€‚" +#: editor/editor_export.cpp +msgid "Prepare Template" +msgstr "准备模æ¿" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +msgid "The given export path doesn't exist." +msgstr "给定的导出路径ä¸å˜åœ¨ã€‚" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" -msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶ï¼š" +msgid "Template file not found: \"%s\"." +msgstr "æ¨¡æ¿æ–‡ä»¶ä¸å˜åœ¨ï¼šâ€œ%sâ€ã€‚" + +#: editor/editor_export.cpp +msgid "Failed to copy export template." +msgstr "å¤åˆ¶å¯¼å‡ºæ¨¡æ¿å¤±è´¥ã€‚" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" +msgstr "PCK 内嵌" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -3073,9 +3125,9 @@ msgid "Import" msgstr "导入" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "导出" @@ -4186,14 +4238,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "æ— æ³•å†™å…¥æ–‡ä»¶â€œ%sâ€ï¼Œæ–‡ä»¶è¢«å 用ã€å·²é”å®šã€æˆ–æƒé™ä¸è¶³ã€‚" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "场景" - -#: editor/editor_node.cpp -msgid "Scene Naming" -msgstr "场景命å" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4308,6 +4352,10 @@ msgid "Default Color Picker Mode" msgstr "默认å–色器模å¼" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "版本控制" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Username" msgstr "用户å" @@ -4335,6 +4383,10 @@ msgstr "切æ¢ä¸“注模å¼ã€‚" msgid "Add a new scene." msgstr "æ·»åŠ æ–°åœºæ™¯ã€‚" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "场景" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "转到上一个打开的场景。" @@ -5004,9 +5056,8 @@ msgid "Size:" msgstr "大å°ï¼š" #: editor/editor_properties_array_dict.cpp -#, fuzzy msgid "Page:" -msgstr "页: " +msgstr "页:" #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -5099,6 +5150,10 @@ msgstr "" "没有对应该平å°çš„坿‰§è¡Œå¯¼å‡ºé¢„设。\n" "请在导出èœå•䏿·»åР坿‰§è¡Œé¢„è®¾ï¼Œæˆ–å°†å·²æœ‰é¢„è®¾è®¾ä¸ºå¯æ‰§è¡Œã€‚" +#: editor/editor_run_native.cpp +msgid "Project Run" +msgstr "项目è¿è¡Œ" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "在 _run() 方法ä¸å¡«å†™é€»è¾‘代ç 。" @@ -5352,7 +5407,9 @@ msgid "Draw Spaces" msgstr "ç»˜åˆ¶ç©ºæ ¼" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "导航" @@ -6746,7 +6803,7 @@ msgstr "é‡å¤" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp msgid "Filter" msgstr "过滤" @@ -6980,9 +7037,8 @@ msgid "Generating Lightmaps" msgstr "æ£åœ¨ç”Ÿæˆå…‰ç…§è´´å›¾" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Generating for Mesh:" -msgstr "æ£åœ¨ç”Ÿæˆç½‘æ ¼ï¼š " +msgstr "æ£åœ¨ç”Ÿæˆç½‘æ ¼ï¼š" #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." @@ -7009,6 +7065,21 @@ msgid "Saving..." msgstr "ä¿å˜ä¸..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" +"%s:检测到纹ç†è¢«ç”¨äºŽ 3D 法线贴图。æ£åœ¨å¯ç”¨çº¢ç»¿çº¹ç†åŽ‹ç¼©ï¼Œé™ä½Žå†…å˜ä½¿ç”¨ï¼ˆè“通é“" +"被丢弃)。" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" +"%s:检测到纹ç†è¢«ç”¨äºŽ 3D。æ£åœ¨å¯ç”¨è¿‡æ»¤ã€é‡å¤ã€Mipmap 生æˆå’Œ VRAM 纹ç†åŽ‹ç¼©ã€‚" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "2Dã€æ£€æµ‹ 3D" @@ -7953,9 +8024,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "设置终点结æŸåŠ¨ç”»ã€‚é€‚ç”¨äºŽå过渡动画。" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition:" -msgstr "过渡: " +msgstr "过渡:" #: editor/plugins/animation_state_machine_editor.cpp msgid "Play Mode:" @@ -9688,9 +9758,8 @@ msgid "Volume" msgstr "体积" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source:" -msgstr "å‘å°„æºï¼š " +msgstr "å‘å°„æºï¼š" #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -9921,6 +9990,7 @@ msgid "Points" msgstr "点" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "多边形" @@ -10772,15 +10842,13 @@ msgstr "平移" #. TRANSLATORS: Refers to changing the scale of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling:" -msgstr "缩放: " +msgstr "缩放:" #. TRANSLATORS: Refers to changing the position of a node in the 3D editor. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating:" -msgstr "移动: " +msgstr "移动:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -11284,8 +11352,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "æ— æ•ˆçš„å‡ ä½•ä½“ï¼Œæ— æ³•ä½¿ç”¨ç½‘æ ¼æ›¿æ¢ã€‚" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" -msgstr "转æ¢ä¸º Mesh2D" +msgid "Convert to MeshInstance2D" +msgstr "转æ¢ä¸º MeshInstance2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." @@ -11316,19 +11384,16 @@ msgid "Sprite" msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Simplification:" -msgstr "简化: " +msgstr "简化:" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels):" -msgstr "收缩(åƒç´ ): " +msgstr "收缩(åƒç´ ):" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels):" -msgstr "扩展(åƒç´ ): " +msgstr "扩展(åƒç´ ):" #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" @@ -12256,8 +12321,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "选择上一个形状ã€å图å—ã€å›¾å—。" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "区域" @@ -13713,35 +13777,10 @@ msgid "Delete preset '%s'?" msgstr "是å¦åˆ 除预设 “%sâ€ï¼Ÿ" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"æ— æ³•ä¸ºå¹³å° â€œ%s†导出项目。\n" -"导出模æ¿ä¼¼ä¹Žç¼ºå¤±æˆ–æ— æ•ˆã€‚" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"æ— æ³•ä¸ºå¹³å° â€œ%s†导出项目。\n" -"åŽŸå› å¯èƒ½æ˜¯å¯¼å‡ºé¢„设或导出设置内的é…置有问题。" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "全部导出" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "指定导出路径ä¸å˜åœ¨ï¼š" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "该平å°çš„导出模æ¿ç¼ºå¤±æˆ–æŸå:" - -#: editor/project_export.cpp msgid "Export Path" msgstr "导出路径" @@ -13882,6 +13921,10 @@ msgid "Export templates for this platform are missing:" msgstr "该平å°çš„导出模æ¿ç¼ºå¤±ï¼š" #: editor/project_export.cpp +msgid "Project Export" +msgstr "项目导出" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "管ç†å¯¼å‡ºæ¨¡æ¿" @@ -15382,9 +15425,8 @@ msgid "Attach Node Script" msgstr "设置节点的脚本" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote %s:" -msgstr "远程 " +msgstr "远程 %s:" #: editor/script_editor_debugger.cpp msgid "Bytes:" @@ -16199,7 +16241,7 @@ msgstr "环边数" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp msgid "Polygon" msgstr "多边形" @@ -16359,9 +16401,8 @@ msgid "Disabled GDNative Singleton" msgstr "ç¦ç”¨çš„ GDNative å•例" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries:" -msgstr "库: " +msgstr "库:" #: modules/gdnative/nativescript/nativescript.cpp msgid "Class Name" @@ -16754,7 +16795,6 @@ msgid "Use In Baked Light" msgstr "用于烘焙光照" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "å•å…ƒæ ¼" @@ -16780,6 +16820,17 @@ msgstr "Z è½´å±…ä¸" msgid "Mask" msgstr "é®ç½©" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +msgid "Bake Navigation" +msgstr "烘焙导航" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +msgid "Navigation Layers" +msgstr "导航层" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "下一平é¢" @@ -17177,18 +17228,16 @@ msgid "" msgstr "节点工作内å˜çš„第一个节点的返回值必须被赋值ï¼è¯·ä¿®æ£èŠ‚ç‚¹ã€‚" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Node returned an invalid sequence output:" -msgstr "èŠ‚ç‚¹è¿”å›žäº†ä¸€ä¸ªæ— æ•ˆçš„è¿žç»è¾“出: " +msgstr "èŠ‚ç‚¹è¿”å›žäº†ä¸€ä¸ªæ— æ•ˆçš„åºåˆ—输出:" #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "在éžå †æ ˆä¸çš„èŠ‚ç‚¹ä¸æ‰¾åˆ°è¿žç»æ¯”特,请回报 Bugï¼" #: modules/visual_script/visual_script.cpp -#, fuzzy msgid "Stack overflow with stack depth:" -msgstr "å †æ ˆæ·±åº¦æº¢å‡ºï¼š " +msgstr "å †æ ˆæ·±åº¦æº¢å‡ºï¼š" #: modules/visual_script/visual_script.cpp msgid "Visual Script" @@ -17549,18 +17598,16 @@ msgid "for (elem) in (input):" msgstr "对 input ä¸çš„æ¯ä¸€ä¸ª elem:" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Input type not iterable:" -msgstr "输入类型ä¸å¯è¿ä»£ï¼š " +msgstr "输入类型ä¸å¯è¿ä»£ï¼š" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" msgstr "è¿ä»£å™¨å¤±æ•ˆ" #: modules/visual_script/visual_script_flow_control.cpp -#, fuzzy msgid "Iterator became invalid:" -msgstr "è¿ä»£å™¨å¤±æ•ˆï¼š " +msgstr "è¿ä»£å™¨å¤±æ•ˆï¼š" #: modules/visual_script/visual_script_flow_control.cpp msgid "Sequence" @@ -17711,14 +17758,12 @@ msgid "Operator" msgstr "æ“作符" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid argument of type:" -msgstr ": æ— æ•ˆå‚æ•°ç±»åž‹: " +msgstr "æ— æ•ˆå‚æ•°ç±»åž‹ï¼š" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "Invalid arguments:" -msgstr ": æ— æ•ˆå‚æ•°: " +msgstr "æ— æ•ˆå‚æ•°ï¼š" #: modules/visual_script/visual_script_nodes.cpp msgid "a if cond, else b" @@ -17729,14 +17774,12 @@ msgid "Var Name" msgstr "å˜é‡åç§°" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script:" -msgstr "è„šæœ¬ä¸æœªæ‰¾åˆ° VariableGet: " +msgstr "è„šæœ¬ä¸æœªæ‰¾åˆ° VariableGet:" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script:" -msgstr "è„šæœ¬ä¸æœªæ‰¾åˆ° VariableSet: " +msgstr "è„šæœ¬ä¸æœªæ‰¾åˆ° VariableSet:" #: modules/visual_script/visual_script_nodes.cpp msgid "Preload" @@ -18217,10 +18260,6 @@ msgid "Could not execute on device." msgstr "æ— æ³•åœ¨è®¾å¤‡ä¸Šè¿è¡Œã€‚" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "找ä¸åˆ°â€œapksignerâ€å·¥å…·ã€‚" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18329,16 +18368,18 @@ msgstr "修改“Target Sdkâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "“Target Sdkâ€ç‰ˆæœ¬å¿…须大于ç‰äºŽâ€œMin Sdkâ€ç‰ˆæœ¬ã€‚" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +msgid "Code Signing" +msgstr "代ç ç¾å" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" -"æ— æ³•æ‰¾åˆ°â€œapksignerâ€ã€‚\n" -"请检查 Android SDK çš„ build-tools ç›®å½•ä¸æ˜¯å¦æœ‰æ¤å‘½ä»¤ã€‚\n" -"生æˆçš„ %s 未ç¾å。" +"æ— æ³•æ‰¾åˆ°â€œapksignerâ€ã€‚请检查 Android SDK çš„ build-tools ç›®å½•ä¸æ˜¯å¦æœ‰æ¤å‘½ä»¤ã€‚生" +"æˆçš„ %s 未ç¾å。" #: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." @@ -18353,6 +18394,10 @@ msgid "Could not find keystore, unable to export." msgstr "找ä¸åˆ°å¯†é’¥åº“ï¼Œæ— æ³•å¯¼å‡ºã€‚" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "æ— æ³•å¯åЍ apksigner 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "“apksignerâ€è¿”回错误 #%d" @@ -18381,8 +18426,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "æ— æ•ˆæ–‡ä»¶åï¼Android APK 必须有 *.apk 扩展。" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" -msgstr "䏿”¯æŒçš„å¯¼å‡ºæ ¼å¼ï¼\n" +msgid "Unsupported export format!" +msgstr "䏿”¯æŒçš„å¯¼å‡ºæ ¼å¼ï¼" #: platform/android/export/export_plugin.cpp msgid "" @@ -18393,24 +18438,20 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" -"Android 构建版本ä¸åŒ¹é…:\n" -" 安装的模æ¿ï¼š%s\n" -" Godot 版本:%s\n" -"请从“项目â€èœå•ä¸é‡æ–°å®‰è£… Android 构建模æ¿ã€‚" +"Android 构建版本ä¸åŒ¹é…:安装的模æ¿ï¼š%s,Godot 版本:%s。请从“项目â€èœå•ä¸é‡æ–°" +"安装 Android 构建模æ¿ã€‚" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" -msgstr "æ— æ³•ä½¿ç”¨é¡¹ç›®å称覆盖 res://android/build/res/*.xml 文件" +"Unable to overwrite res://android/build/res/*.xml files with project name." +msgstr "æ— æ³•ä½¿ç”¨é¡¹ç›®å称覆盖 res://android/build/res/*.xml 文件。" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "æ— æ³•å°†é¡¹ç›®æ–‡ä»¶å¯¼å‡ºè‡³ gradle 项目\n" +msgid "Could not export project files to gradle project." +msgstr "æ— æ³•å°†é¡¹ç›®æ–‡ä»¶å¯¼å‡ºè‡³ gradle 项目。" #: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" @@ -18422,11 +18463,11 @@ msgstr "构建 Android 项目 (Gradle)" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"Android é¡¹ç›®æž„å»ºå¤±è´¥ï¼Œè¯·æ£€æŸ¥è¾“å‡ºä¸æ˜¾ç¤ºçš„错误。\n" -"也å¯ä»¥è®¿é—® docs.godotengine.org 查看 Android 构建文档。" +"Android é¡¹ç›®æž„å»ºå¤±è´¥ï¼Œè¯·æ£€æŸ¥è¾“å‡ºä¸æ˜¾ç¤ºçš„错误。也å¯ä»¥è®¿é—® docs.godotengine." +"org 查看 Android 构建文档。" #: platform/android/export/export_plugin.cpp msgid "Moving output" @@ -18439,38 +18480,33 @@ msgid "" msgstr "æ— æ³•å¤åˆ¶ä¸Žæ›´å导出文件,请在 Gradle 项目文件夹内确认输出。" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" -msgstr "包ä¸å˜åœ¨ï¼š%s" +msgid "Package not found: \"%s\"." +msgstr "包ä¸å˜åœ¨ï¼šâ€œ%sâ€ã€‚" #: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "æ£åœ¨åˆ›å»º APK……" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" -msgstr "" -"找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ APK:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." +msgstr "找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ APK:“%sâ€ã€‚" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" -"导出模æ¿ç¼ºå¤±æ‰€é€‰æž¶æž„的库:%s。\n" -"请使用全部所需的库构建模æ¿ï¼Œæˆ–者在导出预设ä¸å–消对缺失架构的选择。" +"导出模æ¿ç¼ºå¤±æ‰€é€‰æž¶æž„的库:%s。请使用全部所需的库构建模æ¿ï¼Œæˆ–者在导出预设ä¸å–" +"消对缺失架构的选择。" #: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "æ£åœ¨æ·»åŠ æ–‡ä»¶â€¦â€¦" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" -msgstr "æ— æ³•å¯¼å‡ºé¡¹ç›®æ–‡ä»¶" +msgid "Could not export project files." +msgstr "æ— æ³•å¯¼å‡ºé¡¹ç›®æ–‡ä»¶ã€‚" #: platform/android/export/export_plugin.cpp msgid "Aligning APK..." @@ -18693,6 +18729,15 @@ msgstr "使用自定义背景色" msgid "Custom BG Color" msgstr "自定义背景色" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +msgid "Prepare Templates" +msgstr "准备模æ¿" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +msgid "Export template not found." +msgstr "找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ã€‚" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "未指定 App Store Team ID - æ— æ³•é…置项目。" @@ -18714,20 +18759,28 @@ msgid "Run exported HTML in the system's default browser." msgstr "使用默认æµè§ˆå™¨æ‰“开导出的 HTML 文件。" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" -msgstr "æ— æ³•æ‰“å¼€å¯¼å‡ºæ¨¡æ¿ï¼š" +msgid "Could not open template for export: \"%s\"." +msgstr "æ— æ³•æ‰“å¼€å¯¼å‡ºæ¨¡æ¿ï¼šâ€œ%sâ€ã€‚" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" -msgstr "å¯¼å‡ºæ¨¡æ¿æ— 效:" +msgid "Invalid export template: \"%s\"." +msgstr "å¯¼å‡ºæ¨¡æ¿æ— 效:“%sâ€ã€‚" #: platform/javascript/export/export.cpp -msgid "Could not write file:" -msgstr "æ— æ³•å†™å…¥æ–‡ä»¶:" +msgid "Could not write file: \"%s\"." +msgstr "æ— æ³•å†™å…¥æ–‡ä»¶ï¼šâ€œ%sâ€ã€‚" + +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +msgid "Icon Creation" +msgstr "å›¾æ ‡åˆ›å»º" #: platform/javascript/export/export.cpp -msgid "Could not read file:" -msgstr "æ— æ³•è¯»å–æ–‡ä»¶ï¼š" +msgid "Could not read file: \"%s\"." +msgstr "æ— æ³•è¯»å–æ–‡ä»¶ï¼šâ€œ%sâ€ã€‚" + +#: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "PWA" #: platform/javascript/export/export.cpp msgid "Variant" @@ -18798,16 +18851,16 @@ msgid "Icon 512 X 512" msgstr "å›¾æ ‡ 512×512" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" -msgstr "æ— æ³•è¯»å– HTML 壳:" +msgid "Could not read HTML shell: \"%s\"." +msgstr "æ— æ³•è¯»å– HTML 壳:“%sâ€ã€‚" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" -msgstr "æ— æ³•åˆ›å»º HTTP æœåŠ¡å™¨ç›®å½•ï¼š" +msgid "Could not create HTTP server directory: %s." +msgstr "æ— æ³•åˆ›å»º HTTP æœåŠ¡å™¨ç›®å½•ï¼š%s。" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" -msgstr "å¯åЍ HTTP æœåŠ¡å™¨æ—¶å‡ºé”™ï¼š" +msgid "Error starting HTTP server: %d." +msgstr "å¯åЍ HTTP æœåŠ¡å™¨æ—¶å‡ºé”™ï¼š%d。" #: platform/javascript/export/export.cpp msgid "Web" @@ -19071,10 +19124,26 @@ msgid "Apple Team ID" msgstr "Apple 团队 ID" #: platform/osx/export/export.cpp +msgid "Could not open icon file \"%s\"." +msgstr "æ— æ³•æ‰“å¼€å›¾æ ‡æ–‡ä»¶â€œ%sâ€ã€‚" + +#: platform/osx/export/export.cpp +msgid "Could not start xcrun executable." +msgstr "æ— æ³•å¯åЍ xcrun 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/osx/export/export.cpp +msgid "Notarization failed." +msgstr "å…¬è¯å¤±è´¥ã€‚" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "å…¬è¯è¯·æ±‚ UUID:“%sâ€" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." -msgstr "注æ„:公è¯è¿‡ç¨‹é€šå¸¸å°‘äºŽä¸€ä¸ªå°æ—¶ã€‚过程结æŸåŽï¼Œä½ 会收到一å°é‚®ä»¶ã€‚" +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." +msgstr "å…¬è¯è¿‡ç¨‹é€šå¸¸å°‘äºŽä¸€ä¸ªå°æ—¶ã€‚过程结æŸåŽï¼Œä½ 会收到一å°é‚®ä»¶ã€‚" #: platform/osx/export/export.cpp msgid "" @@ -19089,16 +19158,67 @@ msgid "" msgstr "è¿è¡Œä»¥ä¸‹å‘½ä»¤å°†å…¬è¯ç¥¨è¯è£…订到导出的应用ä¸ï¼ˆå¯é€‰ï¼‰ï¼š" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "æ·»åŠ æ—¶é—´æˆ³ä¸Ž Ad-hoc ç¾åä¸å…¼å®¹ï¼Œå·²è¢«ç¦ç”¨ï¼" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "åŠ å›ºè¿è¡Œæ—¶çŽ¯å¢ƒä¸Ž Ad-hoc ç¾åä¸å…¼å®¹ï¼Œå·²è¢«ç¦ç”¨ï¼" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "内置 CodeSign 失败,错误为“%sâ€ã€‚" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "内置 CodeSign éœ€è¦ regex 模å—。" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "æ— æ³•å¯åЍ codesign 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·ç¡®ä¿å·²å®‰è£… Xcode 命令行工具。" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp msgid "No identity found." msgstr "没有找到身份。" #: platform/osx/export/export.cpp +msgid "Cannot sign file %s." +msgstr "æ— æ³•ç¾å文件 %s。" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "䏿”¯æŒç›¸å¯¹ç¬¦å·é“¾æŽ¥ï¼Œå¯¼å‡ºçš„“%sâ€å¯èƒ½æŸåï¼" + +#: platform/osx/export/export.cpp +msgid "DMG Creation" +msgstr "DMG 创建" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "æ— æ³•å¯åЍ hdiutil 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "`hdiutil create` 失败 - 文件已å˜åœ¨ã€‚" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "`hdiutil create` 失败。" + +#: platform/osx/export/export.cpp msgid "Creating app bundle" msgstr "æ£åœ¨åˆ›å»ºåº”用æ†ç»‘包" #: platform/osx/export/export.cpp -msgid "Could not find template app to export:" -msgstr "æ— æ³•æ‰¾åˆ°å¯¼å‡ºçš„æ¨¡æ¿åº”用:" +msgid "Could not find template app to export: \"%s\"." +msgstr "æ— æ³•æ‰¾åˆ°å¯¼å‡ºçš„æ¨¡æ¿åº”用:“%sâ€ã€‚" + +#: platform/osx/export/export.cpp +msgid "Invalid export format." +msgstr "å¯¼å‡ºæ ¼å¼æ— 效。" #: platform/osx/export/export.cpp msgid "" @@ -19108,9 +19228,9 @@ msgstr "该æ“ä½œç³»ç»Ÿä¸Šä¸æ”¯æŒç›¸å¯¹ç¬¦å·é“¾æŽ¥ï¼Œå¯¼å‡ºçš„项目å¯èƒ½æŸ #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." -msgstr "未找到请求的二进制模æ¿â€œ%sâ€ã€‚ä½ çš„æ¨¡æ¿å½’æ¡£ä¸å¯èƒ½ç¼ºå¤±è¯¥æ–‡ä»¶ã€‚" +msgstr "未找到请求的模æ¿äºŒè¿›åˆ¶æ–‡ä»¶â€œ%sâ€ã€‚ä½ çš„æ¨¡æ¿å½’æ¡£ä¸å¯èƒ½ç¼ºå¤±è¯¥æ–‡ä»¶ã€‚" #: platform/osx/export/export.cpp msgid "Making PKG" @@ -19149,6 +19269,14 @@ msgid "Sending archive for notarization" msgstr "æ£åœ¨å‘é€å½’档进行公è¯" #: platform/osx/export/export.cpp +msgid "ZIP Creation" +msgstr "ZIP 创建" + +#: platform/osx/export/export.cpp +msgid "Could not open file to read from path \"%s\"." +msgstr "æ— æ³•æ‰“å¼€ä½äºŽâ€œ%sâ€çš„æ–‡ä»¶è¿›è¡Œè¯»å–。" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "æ— æ•ˆçš„åŒ…æ ‡è¯†ç¬¦ï¼š" @@ -19453,6 +19581,10 @@ msgid "Debug Algorithm" msgstr "调试算法" #: platform/windows/export/export.cpp +msgid "Failed to rename temporary file \"%s\"." +msgstr "é‡å‘½å临时文件“%sâ€å¤±è´¥ã€‚" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "身份类型" @@ -19493,6 +19625,70 @@ msgid "Trademarks" msgstr "å•†æ ‡" #: platform/windows/export/export.cpp +msgid "Resources Modification" +msgstr "资æºä¿®æ”¹" + +#: platform/windows/export/export.cpp +msgid "Could not find rcedit executable at \"%s\"." +msgstr "æ— æ³•åœ¨â€œ%sâ€æ‰¾åˆ° rcedit 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/windows/export/export.cpp +msgid "Could not find wine executable at \"%s\"." +msgstr "æ— æ³•åœ¨â€œ%sâ€æ‰¾åˆ° wine 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" +"æ— æ³•å¯åЍ rcedit 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·åœ¨ç¼–辑器设置ä¸é…ç½® rcedit 路径(导出 > Windows " +"> Rcedit)。" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" +"rcedit ä¿®æ”¹å¯æ‰§è¡Œæ–‡ä»¶å¤±è´¥ï¼š\n" +"%s" + +#: platform/windows/export/export.cpp +msgid "Could not find signtool executable at \"%s\"." +msgstr "æ— æ³•åœ¨â€œ%sâ€æ‰¾åˆ° signtool 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/windows/export/export.cpp +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "æ— æ³•åœ¨â€œ%sâ€æ‰¾åˆ° osslsigncode 坿‰§è¡Œæ–‡ä»¶ã€‚" + +#: platform/windows/export/export.cpp +msgid "Invalid identity type." +msgstr "èº«ä»½ç±»åž‹æ— æ•ˆã€‚" + +#: platform/windows/export/export.cpp +msgid "Invalid timestamp server." +msgstr "时间戳æœåŠ¡å™¨æ— æ•ˆã€‚" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" +"æ— æ³•å¯åЍ signtool 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·åœ¨ç¼–辑器设置ä¸é…ç½® signtool 路径(导出 > " +"Windows > Signtool)。" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" +"Signtool ç¾å坿‰§è¡Œæ–‡ä»¶å¤±è´¥ï¼š\n" +"%s" + +#: platform/windows/export/export.cpp +msgid "Failed to remove temporary file \"%s\"." +msgstr "移除临时文件“%sâ€å¤±è´¥ã€‚" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -19513,6 +19709,22 @@ msgid "Invalid product version:" msgstr "产å“ç‰ˆæœ¬æ— æ•ˆï¼š" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "Windows 坿‰§è¡Œæ–‡ä»¶ä¸èƒ½ >= 4GiB。" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Failed to open executable file \"%s\"." +msgstr "æ‰“å¼€å¯æ‰§è¡Œæ–‡ä»¶â€œ%sâ€å¤±è´¥ã€‚" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "坿‰§è¡Œæ–‡ä»¶å¤´å·²æŸå。" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "坿‰§è¡Œæ–‡ä»¶â€œpckâ€åŒºæœªæ‰¾åˆ°ã€‚" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "Windows" @@ -19528,6 +19740,10 @@ msgstr "Osslsigncode" msgid "Wine" msgstr "Wine" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "32 ä½å¯æ‰§è¡Œæ–‡ä»¶æ— 法内嵌 >= 4 GiB 的数æ®ã€‚" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp msgid "Frames" @@ -19638,7 +19854,8 @@ msgstr "æš‚åœæµ" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp msgid "Max Distance" msgstr "最大è·ç¦»" @@ -20398,17 +20615,17 @@ msgstr "" "请为æ¤èŠ‚ç‚¹è®¾ç½®ä¸€ä¸ª NavigationPolygon 类型的资æºä½œä¸ºå½¢çŠ¶ï¼Œè¿™æ ·å®ƒæ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance 类型的节点必须作为 Navigation2D çš„å节点或åå™èŠ‚ç‚¹" -"æ‰èƒ½ä¸ºå…¶æä¾›å¯¼èˆªæ•°æ®ã€‚" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "导航多边形" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Enter Cost" +msgstr "进入消耗" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" +msgstr "移动消耗" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp msgid "Rotation Degrees" @@ -21488,14 +21705,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "NavigationAgent åªèƒ½åœ¨ç»§æ‰¿ Spatial 的父节点下使用。" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance 类型节点必须作为 Navigation 节点的å节点或åå™èŠ‚ç‚¹æ‰èƒ½" -"æä¾›å¯¼èˆªæ•°æ®ã€‚" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "å¯¼èˆªç½‘æ ¼" @@ -23886,6 +24095,14 @@ msgid "3D Physics" msgstr "3D 物ç†" #: scene/register_scene_types.cpp +msgid "2D Navigation" +msgstr "2D 导航" + +#: scene/register_scene_types.cpp +msgid "3D Navigation" +msgstr "3D 导航" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "使用 hiDPI" @@ -25096,7 +25313,7 @@ msgstr "ä¼ é€’" msgid "Refraction" msgstr "折射" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "细节" @@ -25169,8 +25386,12 @@ msgid "Visible Instance Count" msgstr "å¯è§å®žä¾‹æ•°" #: scene/resources/navigation_mesh.cpp -msgid "Sample Partition Type" -msgstr "é‡‡æ ·åˆ†åŒºç±»åž‹" +msgid "Sampling" +msgstr "é‡‡æ ·" + +#: scene/resources/navigation_mesh.cpp +msgid "Partition Type" +msgstr "分区类型" #: scene/resources/navigation_mesh.cpp msgid "Parsed Geometry Type" @@ -25185,7 +25406,11 @@ msgid "Source Group Name" msgstr "æ¥æºåˆ†ç»„åç§°" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" +msgstr "å•å…ƒæ ¼" + +#: scene/resources/navigation_mesh.cpp +msgid "Agents" msgstr "代ç†" #: scene/resources/navigation_mesh.cpp @@ -25197,11 +25422,15 @@ msgid "Max Slope" msgstr "最大斜å¡" #: scene/resources/navigation_mesh.cpp +msgid "Regions" +msgstr "地区" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "åˆå¹¶å¤§å°" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "边界" #: scene/resources/navigation_mesh.cpp @@ -25213,6 +25442,10 @@ msgid "Verts Per Poly" msgstr "æ¯å¤šè¾¹å½¢é¡¶ç‚¹æ•°" #: scene/resources/navigation_mesh.cpp +msgid "Details" +msgstr "细节" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "é‡‡æ ·è·ç¦»" @@ -25229,8 +25462,8 @@ msgid "Ledge Spans" msgstr "凸å°èŒƒå›´" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" -msgstr "过滤å¯è¡Œèµ°ä½Žé«˜åº¦èŒƒå›´" +msgid "Walkable Low Height Spans" +msgstr "å¯è¡Œèµ°ä½Žé«˜åº¦èŒƒå›´" #: scene/resources/occluder_shape.cpp msgid "Spheres" @@ -25587,6 +25820,10 @@ msgid "Scenario" msgstr "场景" #: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Navigation Map" +msgstr "导航地图" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "DirectSpaceState" @@ -25602,6 +25839,22 @@ msgstr "默认线性阻尼" msgid "Default Angular Damp" msgstr "默认角度阻尼" +#: scene/resources/world.cpp +msgid "Default Map Up" +msgstr "默认地图上方" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Size" +msgstr "默认å•å…ƒæ ¼å¤§å°" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Cell Height" +msgstr "默认å•å…ƒæ ¼é«˜åº¦" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +msgid "Default Edge Connection Margin" +msgstr "默认边界连接边è·" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "画布" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 205fb3e882..01c72c6ee1 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -220,9 +220,10 @@ msgid "Data" msgstr "" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp #, fuzzy msgid "Network" msgstr "匯出" @@ -379,6 +380,15 @@ msgstr "" msgid "Max Size (KB)" msgstr "" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "移動模å¼" + +#: core/os/input.cpp +msgid "Use Accumulated Input" +msgstr "" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -576,7 +586,8 @@ msgstr "æè¿°ï¼š" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "é‹è¡Œ" @@ -665,6 +676,11 @@ msgid "Main Run Args" msgstr "" #: core/project_settings.cpp +#, fuzzy +msgid "Scene Naming" +msgstr "å ´æ™¯è·¯å¾‘:" + +#: core/project_settings.cpp msgid "Search In File Extensions" msgstr "" @@ -672,20 +688,15 @@ msgstr "" msgid "Script Templates Search Path" msgstr "" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp +#: core/project_settings.cpp #, fuzzy -msgid "Version Control" +msgid "Version Control Autoload On Startup" msgstr "版本:" #: core/project_settings.cpp -msgid "Autoload On Startup" -msgstr "" - -#: core/project_settings.cpp #, fuzzy -msgid "Plugin Name" -msgstr "æ’件列表:" +msgid "Version Control Plugin Name" +msgstr "版本:" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -796,7 +807,8 @@ msgid "Quality" msgstr "" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "篩é¸:" @@ -2279,7 +2291,7 @@ msgid "Open" msgstr "開啟" #: editor/dependency_editor.cpp -msgid "Owners Of:" +msgid "Owners of: %s (Total: %d)" msgstr "" #: editor/dependency_editor.cpp @@ -2589,7 +2601,7 @@ msgid "Bus Options" msgstr "é¸é …" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "å†è£½" @@ -2864,6 +2876,24 @@ msgid "Choose" msgstr "鏿“‡" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "複製路徑" + +#: editor/editor_export.cpp +msgid "Completed successfully." +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "失敗:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "" @@ -2876,6 +2906,31 @@ msgid "Packing" msgstr "" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "å¦å˜ç‚º" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "無法新增資料夾" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "無法新增資料夾" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "ä¸èƒ½é–‹å•Ÿæª”案以供寫入:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "å¦å˜ç‚º" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2979,8 +3034,29 @@ msgstr "" msgid "Custom release template not found." msgstr "" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "管ç†è¼¸å‡ºç¯„本" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "檔案ä¸å˜åœ¨." + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." +msgstr "時長(秒)。" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "管ç†è¼¸å‡ºç¯„本" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +msgid "PCK Embedding" msgstr "" #: editor/editor_export.cpp @@ -3167,9 +3243,9 @@ msgid "Import" msgstr "å°Žå…¥" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "匯出" @@ -4332,15 +4408,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "å ´æ™¯" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "å ´æ™¯è·¯å¾‘:" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp msgid "Interface" @@ -4468,6 +4535,11 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Version Control" +msgstr "版本:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy msgid "Username" msgstr "釿–°å‘½å" @@ -4497,6 +4569,10 @@ msgstr "" msgid "Add a new scene." msgstr "新增軌迹" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "å ´æ™¯" + #: editor/editor_node.cpp #, fuzzy msgid "Go to previously opened scene." @@ -5277,6 +5353,11 @@ msgid "" "as runnable." msgstr "" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "專案" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "" @@ -5553,7 +5634,9 @@ msgid "Draw Spaces" msgstr "" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp #, fuzzy msgid "Navigation" msgstr "æ’ä»¶" @@ -7077,7 +7160,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "篩é¸:" @@ -7369,6 +7452,18 @@ msgid "Saving..." msgstr "儲å˜ä¸..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10439,6 +10534,7 @@ msgid "Points" msgstr "下移" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp #, fuzzy msgid "Polygons" msgstr "æ’ä»¶" @@ -11892,7 +11988,7 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy -msgid "Convert to Mesh2D" +msgid "Convert to MeshInstance2D" msgstr "轉為..." #: editor/plugins/sprite_editor_plugin.cpp @@ -12951,8 +13047,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp #, fuzzy msgid "Region" msgstr "無干擾模å¼" @@ -14480,34 +14575,12 @@ msgid "Delete preset '%s'?" msgstr "è¦åˆªé™¤é¸ä¸æª”案?" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" - -#: editor/project_export.cpp #, fuzzy msgid "Exporting All" msgstr "匯出" #: editor/project_export.cpp #, fuzzy -msgid "The given export path doesn't exist:" -msgstr "檔案ä¸å˜åœ¨." - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "" - -#: editor/project_export.cpp -#, fuzzy msgid "Export Path" msgstr "匯出" @@ -14651,6 +14724,11 @@ msgid "Export templates for this platform are missing:" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "專案開è’人" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "管ç†è¼¸å‡ºç¯„本" @@ -17057,7 +17135,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "æ’ä»¶" @@ -17665,7 +17743,6 @@ msgid "Use In Baked Light" msgstr "" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17695,6 +17772,19 @@ msgstr "ä¸é¸" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "æ’ä»¶" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "æ’ä»¶" + #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Next Plane" @@ -19252,10 +19342,6 @@ msgid "Could not execute on device." msgstr "無法新增資料夾" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -19360,12 +19446,16 @@ msgstr "" msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "訊號" + #: platform/android/export/export_plugin.cpp msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" #: platform/android/export/export_plugin.cpp @@ -19383,6 +19473,10 @@ msgid "Could not find keystore, unable to export." msgstr "無法新增資料夾" #: platform/android/export/export_plugin.cpp +msgid "Could not start apksigner executable." +msgstr "" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" @@ -19413,7 +19507,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +msgid "Unsupported export format!" msgstr "" #: platform/android/export/export_plugin.cpp @@ -19424,20 +19518,19 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" -msgstr "" +#, fuzzy +msgid "Could not export project files to gradle project." +msgstr "無法新增資料夾" #: platform/android/export/export_plugin.cpp #, fuzzy @@ -19450,7 +19543,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" @@ -19466,7 +19559,7 @@ msgstr "" #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Package not found: %s" +msgid "Package not found: \"%s\"." msgstr "時長(秒)。" #: platform/android/export/export_plugin.cpp @@ -19476,15 +19569,12 @@ msgstr "連接ä¸..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "" -"Could not find template APK to export:\n" -"%s" +msgid "Could not find template APK to export: \"%s\"." msgstr "無法新增資料夾" #: platform/android/export/export_plugin.cpp msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19496,7 +19586,7 @@ msgstr "ç¯©é¸æª”案..." #: platform/android/export/export_plugin.cpp #, fuzzy -msgid "Could not export project files" +msgid "Could not export project files." msgstr "無法新增資料夾" #: platform/android/export/export_plugin.cpp @@ -19738,6 +19828,17 @@ msgstr "貼上" msgid "Custom BG Color" msgstr "貼上" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "管ç†è¼¸å‡ºç¯„本" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "Export Template管ç†å™¨" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" @@ -19762,25 +19863,34 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not open template for export:" +msgid "Could not open template for export: \"%s\"." msgstr "無法新增資料夾" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Invalid export template:" +msgid "Invalid export template: \"%s\"." msgstr "管ç†è¼¸å‡ºç¯„本" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not write file:" +msgid "Could not write file: \"%s\"." msgstr "無法新增資料夾" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "內容:" + #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read file:" +msgid "Could not read file: \"%s\"." msgstr "無法新增資料夾" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "ç¿»è¯:" @@ -19856,17 +19966,17 @@ msgstr "" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not read HTML shell:" +msgid "Could not read HTML shell: \"%s\"." msgstr "無法新增資料夾" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Could not create HTTP server directory:" +msgid "Could not create HTTP server directory: %s." msgstr "無法新增資料夾" #: platform/javascript/export/export.cpp #, fuzzy -msgid "Error starting HTTP server:" +msgid "Error starting HTTP server: %d." msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" #: platform/javascript/export/export.cpp @@ -20162,9 +20272,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "無法新增資料夾" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "無法新增資料夾" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "本地化" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -20180,21 +20309,75 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "找ä¸åˆ°!" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "儲å˜TileSet時出ç¾éŒ¯èª¤ï¼" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "æè¿°ï¼š" + +#: platform/osx/export/export.cpp +msgid "Could not start hdiutil executable." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "æ£åœ¨å»ºç«‹ç¸®åœ–" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "無法新增資料夾" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "管ç†è¼¸å‡ºç¯„本" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -20202,7 +20385,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -20244,6 +20427,16 @@ msgstr "" #: platform/osx/export/export.cpp #, fuzzy +msgid "ZIP Creation" +msgstr "專案" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "無法新增資料夾" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Invalid bundle identifier:" msgstr "無效å—åž‹" @@ -20558,6 +20751,11 @@ msgid "Debug Algorithm" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "ç„¡æ³•ç§»é™¤æš«å˜æª”:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20604,6 +20802,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "貼上動畫" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "無法新增資料夾" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "無法新增資料夾" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "無法新增資料夾" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "無法新增資料夾" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "無效å—åž‹" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "無效å稱。" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "ç„¡æ³•ç§»é™¤æš«å˜æª”:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20625,6 +20887,23 @@ msgid "Invalid product version:" msgstr "無效å—åž‹" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "無效副檔å" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp msgid "Windows" msgstr "" @@ -20640,6 +20919,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20762,7 +21045,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "Instance" @@ -21568,13 +21852,16 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." +msgid "Navpoly" msgstr "" -#: scene/2d/navigation_polygon.cpp -msgid "Navpoly" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ä¸é¸" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +msgid "Travel Cost" msgstr "" #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp @@ -22724,12 +23011,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp msgid "NavMesh" msgstr "" @@ -25323,6 +25604,16 @@ msgid "3D Physics" msgstr "物ç†å¹€ %" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "æ’ä»¶" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "æ’ä»¶" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26713,7 +27004,7 @@ msgstr "éŽæ¸¡" msgid "Refraction" msgstr "ç¿»è¯:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26794,7 +27085,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "鏿“‡æ¨¡å¼" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "更改動畫循環" #: scene/resources/navigation_mesh.cpp @@ -26811,10 +27107,15 @@ msgid "Source Group Name" msgstr "來æº:" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "內容:" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26823,11 +27124,16 @@ msgid "Max Slope" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Regions" +msgstr "無干擾模å¼" + +#: scene/resources/navigation_mesh.cpp msgid "Merge Size" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26840,6 +27146,11 @@ msgid "Verts Per Poly" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Details" +msgstr "é è¨" + +#: scene/resources/navigation_mesh.cpp msgid "Sample Distance" msgstr "" @@ -26856,7 +27167,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27260,6 +27571,11 @@ msgid "Scenario" msgstr "å ´æ™¯" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "æ’ä»¶" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27277,6 +27593,26 @@ msgstr "線性" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "é è¨" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "é 覽:" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "測試" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "編輯連接" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 3bf8ad4e07..be888529cc 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -240,9 +240,10 @@ msgid "Data" msgstr "資料" #: core/io/file_access_network.cpp core/register_core_types.cpp -#: editor/editor_settings.cpp main/main.cpp +#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp #: modules/gdscript/language_server/gdscript_language_server.cpp #: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h +#: scene/gui/file_dialog.cpp msgid "Network" msgstr "網路" @@ -398,6 +399,16 @@ msgstr "訊æ¯ä½‡åˆ—" msgid "Max Size (KB)" msgstr "最大大å°ï¼ˆKB)" +#: core/os/input.cpp +#, fuzzy +msgid "Mouse Mode" +msgstr "移動模å¼" + +#: core/os/input.cpp +#, fuzzy +msgid "Use Accumulated Input" +msgstr "刪除輸入" + #: core/os/input_event.cpp editor/project_settings_editor.cpp #: servers/audio_server.cpp msgid "Device" @@ -586,7 +597,8 @@ msgstr "說明" #: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp -#: main/main.cpp +#: main/main.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp msgid "Run" msgstr "執行" @@ -677,6 +689,11 @@ msgstr "主執行引數" #: core/project_settings.cpp #, fuzzy +msgid "Scene Naming" +msgstr "å ´æ™¯è·¯å¾‘ï¼š" + +#: core/project_settings.cpp +#, fuzzy msgid "Search In File Extensions" msgstr "ä»¥å‰¯æª”åæœå°‹" @@ -684,18 +701,15 @@ msgstr "ä»¥å‰¯æª”åæœå°‹" msgid "Script Templates Search Path" msgstr "è…³æœ¬æ¨£æ¿æœå°‹è·¯å¾‘" -#: core/project_settings.cpp editor/editor_node.cpp -#: editor/plugins/version_control_editor_plugin.cpp -msgid "Version Control" -msgstr "版本控制" - #: core/project_settings.cpp -msgid "Autoload On Startup" +#, fuzzy +msgid "Version Control Autoload On Startup" msgstr "啟動時自動載入" #: core/project_settings.cpp -msgid "Plugin Name" -msgstr "外掛å稱" +#, fuzzy +msgid "Version Control Plugin Name" +msgstr "版本控制" #: core/project_settings.cpp scene/2d/collision_object_2d.cpp #: scene/3d/collision_object.cpp scene/gui/control.cpp @@ -811,7 +825,8 @@ msgid "Quality" msgstr "å“質" #: core/project_settings.cpp scene/gui/file_dialog.cpp -#: scene/main/scene_tree.cpp servers/visual_server.cpp +#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp +#: servers/visual_server.cpp #, fuzzy msgid "Filters" msgstr "篩é¸å™¨" @@ -2247,8 +2262,8 @@ msgid "Open" msgstr "開啟" #: editor/dependency_editor.cpp -msgid "Owners Of:" -msgstr "ç‚ºä¸‹åˆ—ä¹‹æ“æœ‰è€…:" +msgid "Owners of: %s (Total: %d)" +msgstr "" #: editor/dependency_editor.cpp msgid "" @@ -2546,7 +2561,7 @@ msgid "Bus Options" msgstr "åŒ¯æµæŽ’é¸é …" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp -#: editor/scene_tree_dock.cpp +#: editor/project_export.cpp editor/scene_tree_dock.cpp msgid "Duplicate" msgstr "é‡è¤‡" @@ -2804,6 +2819,25 @@ msgid "Choose" msgstr "鏿“‡" #: editor/editor_export.cpp +msgid "Project export for platform:" +msgstr "" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed with errors." +msgstr "複製節點路徑" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Completed successfully." +msgstr "å¥—ä»¶å®‰è£æˆåŠŸï¼" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed." +msgstr "失敗:" + +#: editor/editor_export.cpp msgid "Storing File:" msgstr "å„²å˜æª”案:" @@ -2816,6 +2850,31 @@ msgid "Packing" msgstr "æ£åœ¨æ‰“包" #: editor/editor_export.cpp +#, fuzzy +msgid "Save PCK" +msgstr "å¦å˜æ–°æª”" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Cannot create file \"%s\"." +msgstr "無法新增資料夾。" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Failed to export project files." +msgstr "無法匯出專案檔案" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Can't open file to read from path \"%s\"." +msgstr "無法開啟欲寫入的檔案:" + +#: editor/editor_export.cpp +#, fuzzy +msgid "Save ZIP" +msgstr "å¦å˜æ–°æª”" + +#: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." @@ -2932,11 +2991,33 @@ msgstr "找ä¸åˆ°è‡ªå®šç¾©åµéŒ¯æ¨£æ¿ã€‚" msgid "Custom release template not found." msgstr "找ä¸åˆ°è‡ªå®šç¾©ç™¼è¡Œæ¨£æ¿ã€‚" +#: editor/editor_export.cpp +#, fuzzy +msgid "Prepare Template" +msgstr "ç®¡ç†æ¨£æ¿" + +#: editor/editor_export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "The given export path doesn't exist." +msgstr "給定的匯出路徑ä¸å˜åœ¨ï¼š" + #: editor/editor_export.cpp platform/javascript/export/export.cpp -msgid "Template file not found:" +#, fuzzy +msgid "Template file not found: \"%s\"." msgstr "找ä¸åˆ°æ¨£æ¿æª”案:" #: editor/editor_export.cpp +#, fuzzy +msgid "Failed to copy export template." +msgstr "無效的輸出樣æ¿ï¼š" + +#: editor/editor_export.cpp platform/windows/export/export.cpp +#: platform/x11/export/export.cpp +#, fuzzy +msgid "PCK Embedding" +msgstr "å¡«å……" + +#: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "匯出 32 ä½å…ƒæª”時,內嵌 PCK 大å°ä¸å¾—è¶…éŽ 4 GB。" @@ -3103,9 +3184,9 @@ msgid "Import" msgstr "匯入" #: editor/editor_feature_profile.cpp editor/project_export.cpp -#: platform/android/export/export.cpp platform/javascript/export/export.cpp -#: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#: platform/windows/export/export.cpp +#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#: platform/uwp/export/export.cpp platform/windows/export/export.cpp msgid "Export" msgstr "匯出" @@ -4236,15 +4317,6 @@ msgid "" "Unable to write to file '%s', file in use, locked or lacking permissions." msgstr "無法寫入檔案'%s',該檔案æ£è¢«ä½¿ç”¨ã€éŽ–å®šæˆ–å› æ¬Šé™ä¸è¶³ã€‚" -#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp -msgid "Scene" -msgstr "å ´æ™¯" - -#: editor/editor_node.cpp -#, fuzzy -msgid "Scene Naming" -msgstr "å ´æ™¯è·¯å¾‘ï¼š" - #: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp #: servers/arvr/arvr_interface.cpp #, fuzzy @@ -4375,6 +4447,10 @@ msgid "Default Color Picker Mode" msgstr "é è¨é¡è‰²æŒ‘é¸å™¨æ¨¡å¼" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "版本控制" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy msgid "Username" msgstr "釿–°å‘½å" @@ -4403,6 +4479,10 @@ msgstr "切æ›ï¼å–消專注模å¼ã€‚" msgid "Add a new scene." msgstr "æ–°å¢žå ´æ™¯ã€‚" +#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp +msgid "Scene" +msgstr "å ´æ™¯" + #: editor/editor_node.cpp msgid "Go to previously opened scene." msgstr "è·³è‡³ä¸Šä¸€å€‹é–‹å•Ÿçš„å ´æ™¯ã€‚" @@ -5178,6 +5258,11 @@ msgstr "" "為找到å¯åŸ·è¡Œæ–¼è©²å¹³å°çš„匯出é è¨è¨å®šã€‚\n" "請在 [匯出] é¸å–®ä¸æ–°å¢žä¸€å€‹å¯åŸ·è¡Œçš„é è¨è¨å®šï¼Œæˆ–å°‡ç¾æœ‰çš„é è¨è¨å®šè¨ç‚ºå¯åŸ·è¡Œã€‚" +#: editor/editor_run_native.cpp +#, fuzzy +msgid "Project Run" +msgstr "專案" + #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." msgstr "在 _run() 方法ä¸å¡«å¯«é‚輯。" @@ -5471,7 +5556,9 @@ msgid "Draw Spaces" msgstr "繪製呼å«ï¼š" #: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp -#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp +#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp +#: scene/main/scene_tree.cpp scene/resources/world.cpp +#: scene/resources/world_2d.cpp msgid "Navigation" msgstr "導航" @@ -6966,7 +7053,7 @@ msgstr "" #: editor/import/resource_importer_layered_texture.cpp #: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp -#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp +#: scene/gui/control.cpp #, fuzzy msgid "Filter" msgstr "篩é¸ï¼š" @@ -7263,6 +7350,18 @@ msgid "Saving..." msgstr "æ£åœ¨ä¿å˜..." #: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used as a normal map in 3D. Enabling red-green " +"texture compression to reduce memory usage (blue channel is discarded)." +msgstr "" + +#: editor/import/resource_importer_texture.cpp +msgid "" +"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap " +"generation and VRAM texture compression." +msgstr "" + +#: editor/import/resource_importer_texture.cpp msgid "2D, Detect 3D" msgstr "" @@ -10213,6 +10312,7 @@ msgid "Points" msgstr "點" #: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp +#: scene/resources/navigation_mesh.cpp msgid "Polygons" msgstr "多邊形" @@ -11587,7 +11687,8 @@ msgid "Invalid geometry, can't replace by mesh." msgstr "ç„¡æ•ˆçš„å¹¾ä½•åœ–å½¢ï¼Œç„¡æ³•ä»¥ç¶²æ ¼å–代。" #: editor/plugins/sprite_editor_plugin.cpp -msgid "Convert to Mesh2D" +#, fuzzy +msgid "Convert to MeshInstance2D" msgstr "轉æ›ç‚º Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp @@ -12577,8 +12678,7 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "鏿“‡å‰ä¸€å€‹å½¢ç‹€ã€ååœ–å¡Šã€æˆ–圖塊。" #: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp -#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp -#: scene/resources/texture.cpp +#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp msgid "Region" msgstr "å€åŸŸ" @@ -14083,35 +14183,10 @@ msgid "Delete preset '%s'?" msgstr "確定è¦åˆªé™¤é è¨è¨å®šã€Œ%sã€ï¼Ÿ" #: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"Export templates seem to be missing or invalid." -msgstr "" -"為平å°ã€Œ%sã€åŒ¯å‡ºå°ˆæ¡ˆå¤±æ•—。\n" -"匯出樣æ¿ä¼¼ä¹Žå·²éºå¤±æˆ–無效。" - -#: editor/project_export.cpp -msgid "" -"Failed to export the project for platform '%s'.\n" -"This might be due to a configuration issue in the export preset or your " -"export settings." -msgstr "" -"為平å°ã€Œ%sã€åŒ¯å‡ºå°ˆæ¡ˆå¤±æ•—。\n" -"å¯èƒ½æ˜¯ç”±æ–¼åŒ¯å‡ºé è¨è¨å®šæˆ–匯出è¨å®šä¸çš„組態è¨å®šæœ‰å•題導致。" - -#: editor/project_export.cpp msgid "Exporting All" msgstr "全部匯出" #: editor/project_export.cpp -msgid "The given export path doesn't exist:" -msgstr "給定的匯出路徑ä¸å˜åœ¨ï¼š" - -#: editor/project_export.cpp -msgid "Export templates for this platform are missing/corrupted:" -msgstr "該平å°çš„匯出範本éºå¤±ï¼ææ¯€ï¼š" - -#: editor/project_export.cpp msgid "Export Path" msgstr "匯出路徑" @@ -14256,6 +14331,11 @@ msgid "Export templates for this platform are missing:" msgstr "缺少匯出該平å°ç”¨çš„æ¨£æ¿ï¼š" #: editor/project_export.cpp +#, fuzzy +msgid "Project Export" +msgstr "專案發起人" + +#: editor/project_export.cpp msgid "Manage Export Templates" msgstr "管ç†åŒ¯å‡ºæ¨£æ¿" @@ -16634,7 +16714,7 @@ msgstr "" #: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp #: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp -#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp +#: scene/3d/collision_polygon.cpp #, fuzzy msgid "Polygon" msgstr "多邊形" @@ -17257,7 +17337,6 @@ msgid "Use In Baked Light" msgstr "烘焙光照圖" #: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp -#: scene/resources/navigation_mesh.cpp msgid "Cell" msgstr "" @@ -17287,6 +17366,19 @@ msgstr "ä¸å¤®" msgid "Mask" msgstr "" +#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp +#, fuzzy +msgid "Bake Navigation" +msgstr "導航" + +#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp +#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp +#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp +#: scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Navigation Layers" +msgstr "導航模å¼" + #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" msgstr "下一個平é¢" @@ -18835,10 +18927,6 @@ msgid "Could not execute on device." msgstr "無法於è£ç½®ä¸ŠåŸ·è¡Œã€‚" #: platform/android/export/export_plugin.cpp -msgid "Unable to find the 'apksigner' tool." -msgstr "找ä¸åˆ°ã€Œapksignerã€å·¥å…·ã€‚" - -#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -18945,12 +19033,17 @@ msgstr "å°ã€ŒTarget Sdkã€çš„修改僅於「Use Custom Buildã€å•Ÿç”¨æ™‚有效ã msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version." msgstr "「Target Sdkã€ç‰ˆæœ¬å¿…é ˆé«˜æ–¼æˆ–äºŽã€ŒMin Sdkã€ç‰ˆæœ¬ä¸€è‡´ã€‚" +#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Code Signing" +msgstr "訊號" + #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"'apksigner' could not be found.\n" -"Please check the command is available in the Android SDK build-tools " -"directory.\n" -"The resulting %s is unsigned." +"'apksigner' could not be found. Please check that the command is available " +"in the Android SDK build-tools directory. The resulting %s is unsigned." msgstr "" "找ä¸åˆ°ã€Œapksigner'ã€ã€‚\n" "è«‹ç¢ºèªæ¤å‘½ä»¤å¯ç”¨æ–¼Android SDK build-tools的目錄。\n" @@ -18969,6 +19062,11 @@ msgid "Could not find keystore, unable to export." msgstr "找ä¸åˆ°é‡‘鑰儲å˜å€ï¼Œç„¡æ³•匯出。" #: platform/android/export/export_plugin.cpp +#, fuzzy +msgid "Could not start apksigner executable." +msgstr "無法啟動å處ç†ç¨‹åºï¼" + +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "「apksignerã€å›žå‚³éŒ¯èª¤ #%d" @@ -18997,7 +19095,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "無效的檔案å稱ï¼Android APK å¿…é ˆè¦æœ‰ *.apk 副檔å。" #: platform/android/export/export_plugin.cpp -msgid "Unsupported export format!\n" +#, fuzzy +msgid "Unsupported export format!" msgstr "䏿”¯æ´çš„åŒ¯å‡ºæ ¼å¼ï¼\n" #: platform/android/export/export_plugin.cpp @@ -19008,10 +19107,9 @@ msgstr "" "嘗試自自定建置樣æ¿é€²è¡Œå»ºç½®ï¼Œä½†ç„¡ç‰ˆæœ¬è³‡è¨Šå¯ç”¨ã€‚請自「專案ã€é¸å–®ä¸é‡æ–°å®‰è£ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Android build version mismatch:\n" -" Template installed: %s\n" -" Godot Version: %s\n" +"Android build version mismatch: Template installed: %s, Godot version: %s. " "Please reinstall Android build template from 'Project' menu." msgstr "" "Android 建置版本ä¸ç¬¦åˆï¼š\n" @@ -19020,12 +19118,14 @@ msgstr "" "請自「專案ã€ç›®éŒ„ä¸é‡æ–°å®‰è£ Android 建置樣æ¿ã€‚" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Unable to overwrite res://android/build/res/*.xml files with project name" +"Unable to overwrite res://android/build/res/*.xml files with project name." msgstr "無法以專案å稱覆蓋檔案res://android/build/res/*.xml" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files to gradle project\n" +#, fuzzy +msgid "Could not export project files to gradle project." msgstr "無法匯出專案檔至Gradle專案。\n" #: platform/android/export/export_plugin.cpp @@ -19037,8 +19137,9 @@ msgid "Building Android Project (gradle)" msgstr "建置 Android 專案(Gradle)" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Building of Android project failed, check output for the error.\n" +"Building of Android project failed, check output for the error. " "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "建置 Android 專案失敗,請檢查輸出以確èªéŒ¯èª¤ã€‚\n" @@ -19055,7 +19156,8 @@ msgid "" msgstr "無法複製並更å匯出的檔案,請於 Gradle 專案資料夾內確èªè¼¸å‡ºã€‚" #: platform/android/export/export_plugin.cpp -msgid "Package not found: %s" +#, fuzzy +msgid "Package not found: \"%s\"." msgstr "未找到套件:「%sã€" #: platform/android/export/export_plugin.cpp @@ -19063,17 +19165,16 @@ msgid "Creating APK..." msgstr "æ£åœ¨å»ºç«‹APK……" #: platform/android/export/export_plugin.cpp -msgid "" -"Could not find template APK to export:\n" -"%s" +#, fuzzy +msgid "Could not find template APK to export: \"%s\"." msgstr "" "找ä¸åˆ°æ¨£æ¿APK以匯出:\n" "%s" #: platform/android/export/export_plugin.cpp +#, fuzzy msgid "" -"Missing libraries in the export template for the selected architectures: " -"%s.\n" +"Missing libraries in the export template for the selected architectures: %s. " "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" @@ -19085,7 +19186,8 @@ msgid "Adding files..." msgstr "æ£åœ¨åŠ å…¥æª”æ¡ˆ %s……" #: platform/android/export/export_plugin.cpp -msgid "Could not export project files" +#, fuzzy +msgid "Could not export project files." msgstr "無法匯出專案檔案" #: platform/android/export/export_plugin.cpp @@ -19328,6 +19430,17 @@ msgstr "剪下節點" msgid "Custom BG Color" msgstr "剪下節點" +#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Prepare Templates" +msgstr "ç®¡ç†æ¨£æ¿" + +#: platform/iphone/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Export template not found." +msgstr "找ä¸åˆ°è‡ªå®šç¾©ç™¼è¡Œæ¨£æ¿ã€‚" + #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "尚未è¨å®š App Store Team ID - 無法è¨å®šå°ˆæ¡ˆã€‚" @@ -19349,22 +19462,35 @@ msgid "Run exported HTML in the system's default browser." msgstr "在系統的é è¨ç€è¦½å™¨ä¸åŸ·è¡Œå·²åŒ¯å‡ºçš„ HTML。" #: platform/javascript/export/export.cpp -msgid "Could not open template for export:" +#, fuzzy +msgid "Could not open template for export: \"%s\"." msgstr "無法開啟樣æ¿ä»¥è¼¸å‡ºï¼š" #: platform/javascript/export/export.cpp -msgid "Invalid export template:" +#, fuzzy +msgid "Invalid export template: \"%s\"." msgstr "無效的輸出樣æ¿ï¼š" #: platform/javascript/export/export.cpp -msgid "Could not write file:" +#, fuzzy +msgid "Could not write file: \"%s\"." msgstr "無法寫入檔案:" +#: platform/javascript/export/export.cpp platform/osx/export/export.cpp +#, fuzzy +msgid "Icon Creation" +msgstr "è¨å®šå¤–邊è·" + #: platform/javascript/export/export.cpp -msgid "Could not read file:" +#, fuzzy +msgid "Could not read file: \"%s\"." msgstr "ç„¡æ³•è®€å–æª”案:" #: platform/javascript/export/export.cpp +msgid "PWA" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Variant" msgstr "分隔:" @@ -19439,15 +19565,18 @@ msgid "Icon 512 X 512" msgstr "" #: platform/javascript/export/export.cpp -msgid "Could not read HTML shell:" +#, fuzzy +msgid "Could not read HTML shell: \"%s\"." msgstr "無法讀å–HTML殼層:" #: platform/javascript/export/export.cpp -msgid "Could not create HTTP server directory:" +#, fuzzy +msgid "Could not create HTTP server directory: %s." msgstr "無法建立HTTP伺æœå™¨ç›®éŒ„:" #: platform/javascript/export/export.cpp -msgid "Error starting HTTP server:" +#, fuzzy +msgid "Error starting HTTP server: %d." msgstr "啟動HTTP伺æœå™¨æ™‚發生錯誤:" #: platform/javascript/export/export.cpp @@ -19747,9 +19876,28 @@ msgid "Apple Team ID" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open icon file \"%s\"." +msgstr "無法匯出專案檔案" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start xcrun executable." +msgstr "無法啟動å處ç†ç¨‹åºï¼" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Notarization failed." +msgstr "本地化" + +#: platform/osx/export/export.cpp +msgid "Notarization request UUID: \"%s\"" +msgstr "" + +#: platform/osx/export/export.cpp msgid "" -"Note: The notarization process generally takes less than an hour. When the " -"process is completed, you'll receive an email." +"The notarization process generally takes less than an hour. When the process " +"is completed, you'll receive an email." msgstr "" #: platform/osx/export/export.cpp @@ -19765,23 +19913,78 @@ msgid "" msgstr "" #: platform/osx/export/export.cpp +msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!" +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign failed with error \"%s\"." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "Built-in CodeSign require regex module." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "" +"Could not start codesign executable, make sure Xcode command line tools are " +"installed." +msgstr "" + +#: platform/osx/export/export.cpp platform/windows/export/export.cpp #, fuzzy msgid "No identity found." msgstr "未發ç¾ä»»ä½•圖示。" #: platform/osx/export/export.cpp #, fuzzy +msgid "Cannot sign file %s." +msgstr "無法ä¿å˜æª”案:%s" + +#: platform/osx/export/export.cpp +msgid "Relative symlinks are not supported, exported \"%s\" might be broken!" +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "DMG Creation" +msgstr "æ–¹å‘" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not start hdiutil executable." +msgstr "無法啟動å處ç†ç¨‹åºï¼" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed - file exists." +msgstr "" + +#: platform/osx/export/export.cpp +msgid "`hdiutil create` failed." +msgstr "" + +#: platform/osx/export/export.cpp +#, fuzzy msgid "Creating app bundle" msgstr "æ£åœ¨å»ºç«‹ç¸®åœ–" #: platform/osx/export/export.cpp #, fuzzy -msgid "Could not find template app to export:" +msgid "Could not find template app to export: \"%s\"." msgstr "" "找ä¸åˆ°æ¨£æ¿APK以匯出:\n" "%s" #: platform/osx/export/export.cpp +#, fuzzy +msgid "Invalid export format." +msgstr "無效的輸出樣æ¿ï¼š" + +#: platform/osx/export/export.cpp msgid "" "Relative symlinks are not supported on this OS, the exported project might " "be broken!" @@ -19789,7 +19992,7 @@ msgstr "" #: platform/osx/export/export.cpp msgid "" -"Requested template binary '%s' not found. It might be missing from your " +"Requested template binary \"%s\" not found. It might be missing from your " "template archive." msgstr "" @@ -19830,6 +20033,16 @@ msgid "Sending archive for notarization" msgstr "" #: platform/osx/export/export.cpp +#, fuzzy +msgid "ZIP Creation" +msgstr "專案" + +#: platform/osx/export/export.cpp +#, fuzzy +msgid "Could not open file to read from path \"%s\"." +msgstr "無法匯出專案檔至Gradle專案。\n" + +#: platform/osx/export/export.cpp msgid "Invalid bundle identifier:" msgstr "無效的æ†ç¶è˜åˆ¥ç¬¦ï¼š" @@ -20145,6 +20358,11 @@ msgid "Debug Algorithm" msgstr "除錯工具" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to rename temporary file \"%s\"." +msgstr "無法移除臨時檔案:" + +#: platform/windows/export/export.cpp msgid "Identity Type" msgstr "" @@ -20192,6 +20410,70 @@ msgid "Trademarks" msgstr "" #: platform/windows/export/export.cpp +#, fuzzy +msgid "Resources Modification" +msgstr "隨機旋轉:" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find rcedit executable at \"%s\"." +msgstr "找ä¸åˆ°é‡‘鑰儲å˜å€ï¼Œç„¡æ³•匯出。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find wine executable at \"%s\"." +msgstr "找ä¸åˆ°é‡‘鑰儲å˜å€ï¼Œç„¡æ³•匯出。" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start rcedit executable, configure rcedit path in the Editor " +"Settings (Export > Windows > Rcedit)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"rcedit failed to modify executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find signtool executable at \"%s\"." +msgstr "找ä¸åˆ°é‡‘鑰儲å˜å€ï¼Œç„¡æ³•匯出。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Could not find osslsigncode executable at \"%s\"." +msgstr "找ä¸åˆ°é‡‘鑰儲å˜å€ï¼Œç„¡æ³•匯出。" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid identity type." +msgstr "無效的è˜åˆ¥ç¬¦ï¼š" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Invalid timestamp server." +msgstr "無效的å稱。" + +#: platform/windows/export/export.cpp +msgid "" +"Could not start signtool executable, configure signtool path in the Editor " +"Settings (Export > Windows > Signtool)." +msgstr "" + +#: platform/windows/export/export.cpp +msgid "" +"Signtool failed to sign executable:\n" +"%s" +msgstr "" + +#: platform/windows/export/export.cpp +#, fuzzy +msgid "Failed to remove temporary file \"%s\"." +msgstr "無法移除臨時檔案:" + +#: platform/windows/export/export.cpp msgid "" "The rcedit tool must be configured in the Editor Settings (Export > Windows " "> Rcedit) to change the icon or app information data." @@ -20213,6 +20495,23 @@ msgid "Invalid product version:" msgstr "ç„¡æ•ˆçš„ç”¢å“ GUID。" #: platform/windows/export/export.cpp +msgid "Windows executables cannot be >= 4 GiB." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +#, fuzzy +msgid "Failed to open executable file \"%s\"." +msgstr "無效的副檔å。" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable file header corrupted." +msgstr "" + +#: platform/windows/export/export.cpp platform/x11/export/export.cpp +msgid "Executable \"pck\" section not found." +msgstr "" + +#: platform/windows/export/export.cpp #, fuzzy msgid "Windows" msgstr "新視窗" @@ -20229,6 +20528,10 @@ msgstr "" msgid "Wine" msgstr "" +#: platform/x11/export/export.cpp +msgid "32-bit executables cannot have embedded data >= 4 GiB." +msgstr "" + #: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp #: scene/resources/texture.cpp #, fuzzy @@ -20356,7 +20659,8 @@ msgstr "" #: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp #: scene/3d/light.cpp scene/3d/reflection_probe.cpp -#: scene/3d/visual_instance.cpp scene/resources/material.cpp +#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp +#: scene/resources/material.cpp #, fuzzy msgid "Max Distance" msgstr "鏿“‡è·é›¢ï¼š" @@ -21216,17 +21520,19 @@ msgstr "" "多邊形。" #: scene/2d/navigation_polygon.cpp -msgid "" -"NavigationPolygonInstance must be a child or grandchild to a Navigation2D " -"node. It only provides navigation data." -msgstr "" -"NavigationPolygonInstance å¿…é ˆæ˜¯ Navigation2D 節點的å級或次å級。其僅æä¾›å°Ž" -"航資料。" - -#: scene/2d/navigation_polygon.cpp msgid "Navpoly" msgstr "" +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Enter Cost" +msgstr "ä¸ä¸‹" + +#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp +#, fuzzy +msgid "Travel Cost" +msgstr "行程" + #: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp #: scene/main/canvas_layer.cpp #, fuzzy @@ -22438,14 +22744,6 @@ msgid "" "The NavigationAgent can be used only under a Spatial inheriting parent node." msgstr "" -#: scene/3d/navigation_mesh_instance.cpp -msgid "" -"NavigationMeshInstance must be a child or grandchild to a Navigation node. " -"It only provides navigation data." -msgstr "" -"NavigationMeshInstance å¿…é ˆç‚º Navigation 節點的å節點或次級å節點。其僅æä¾›å°Ž" -"航資料。" - #: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp #, fuzzy msgid "NavMesh" @@ -25170,6 +25468,16 @@ msgid "3D Physics" msgstr "物ç†" #: scene/register_scene_types.cpp +#, fuzzy +msgid "2D Navigation" +msgstr "導航" + +#: scene/register_scene_types.cpp +#, fuzzy +msgid "3D Navigation" +msgstr "導航" + +#: scene/register_scene_types.cpp msgid "Use hiDPI" msgstr "" @@ -26599,7 +26907,7 @@ msgstr "è½‰å ´ï¼š " msgid "Refraction" msgstr "分隔:" -#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp +#: scene/resources/material.cpp msgid "Detail" msgstr "" @@ -26684,7 +26992,12 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy -msgid "Sample Partition Type" +msgid "Sampling" +msgstr "縮放: " + +#: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Partition Type" msgstr "è¨å®šè®Šæ•¸åž‹åˆ¥" #: scene/resources/navigation_mesh.cpp @@ -26702,10 +27015,15 @@ msgid "Source Group Name" msgstr "來æº" #: scene/resources/navigation_mesh.cpp -msgid "Agent" +msgid "Cells" msgstr "" #: scene/resources/navigation_mesh.cpp +#, fuzzy +msgid "Agents" +msgstr "ä¸»å ´æ™¯å¼•æ•¸ï¼š" + +#: scene/resources/navigation_mesh.cpp msgid "Max Climb" msgstr "" @@ -26715,11 +27033,16 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Regions" +msgstr "å€åŸŸ" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Merge Size" msgstr "è‡ªå ´æ™¯åˆä½µ" #: scene/resources/navigation_mesh.cpp -msgid "Edge" +msgid "Edges" msgstr "" #: scene/resources/navigation_mesh.cpp @@ -26733,6 +27056,11 @@ msgstr "" #: scene/resources/navigation_mesh.cpp #, fuzzy +msgid "Details" +msgstr "顯示é è¨" + +#: scene/resources/navigation_mesh.cpp +#, fuzzy msgid "Sample Distance" msgstr "鏿“‡è·é›¢ï¼š" @@ -26750,7 +27078,7 @@ msgid "Ledge Spans" msgstr "" #: scene/resources/navigation_mesh.cpp -msgid "Filter Walkable Low Height Spans" +msgid "Walkable Low Height Spans" msgstr "" #: scene/resources/occluder_shape.cpp @@ -27165,6 +27493,11 @@ msgid "Scenario" msgstr "å ´æ™¯" #: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Navigation Map" +msgstr "導航" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp msgid "Direct Space State" msgstr "" @@ -27182,6 +27515,26 @@ msgstr "左線性" msgid "Default Angular Damp" msgstr "" +#: scene/resources/world.cpp +#, fuzzy +msgid "Default Map Up" +msgstr "é è¨æµ®é»žæ•¸é–“éš”" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Size" +msgstr "é è¨é 覽" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Cell Height" +msgstr "測試" + +#: scene/resources/world.cpp scene/resources/world_2d.cpp +#, fuzzy +msgid "Default Edge Connection Margin" +msgstr "編輯連接內容:" + #: scene/resources/world_2d.cpp msgid "Canvas" msgstr "" diff --git a/main/main.cpp b/main/main.cpp index 20270190b3..bfb0eacdfc 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -65,6 +65,8 @@ #include "servers/audio_server.h" #include "servers/camera_server.h" #include "servers/display_server.h" +#include "servers/movie_writer/movie_writer.h" +#include "servers/movie_writer/movie_writer_mjpeg.h" #include "servers/navigation_server_2d.h" #include "servers/navigation_server_3d.h" #include "servers/physics_server_2d.h" @@ -87,6 +89,7 @@ #include "editor/editor_settings.h" #include "editor/editor_translation.h" #include "editor/progress_dialog.h" +#include "editor/project_converter_3_to_4.h" #include "editor/project_manager.h" #ifndef NO_EDITOR_SPLASH #include "main/splash_editor.gen.h" @@ -177,6 +180,9 @@ static bool debug_navigation = false; static int frame_delay = 0; static bool disable_render_loop = false; static int fixed_fps = -1; +static String write_movie_path; +static MovieWriter *movie_writer = nullptr; +static bool disable_vsync = false; static bool print_fps = false; #ifdef TOOLS_ENABLED static bool dump_extension_api = false; @@ -324,6 +330,8 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print(" --text-driver <driver> Text driver (Fonts, BiDi, shaping)\n"); OS::get_singleton()->print(" --tablet-driver <driver> Pen tablet input driver.\n"); OS::get_singleton()->print(" --headless Enable headless mode (--display-driver headless --audio-driver Dummy). Useful for servers and with --script.\n"); + OS::get_singleton()->print(" --write-movie <file> Run the engine in a way that a movie is written (by default .avi MJPEG). Fixed FPS is forced when enabled, but can be used to change movie FPS. Disabling vsync can speed up movie writing but makes interaction more difficult.\n"); + OS::get_singleton()->print(" --disable-vsync Force disabling of vsync. Run the engine in a way that a movie is written (by default .avi MJPEG). Fixed FPS is forced when enabled, but can be used to change movie FPS.\n"); OS::get_singleton()->print("\n"); @@ -368,6 +376,8 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print(" <path> should be absolute or relative to the project directory, and include the filename for the binary (e.g. 'builds/game.exe'). The target directory should exist.\n"); OS::get_singleton()->print(" --export-debug <preset> <path> Same as --export, but using the debug template.\n"); OS::get_singleton()->print(" --export-pack <preset> <path> Same as --export, but only export the game pack for the given preset. The <path> extension determines whether it will be in PCK or ZIP format.\n"); + OS::get_singleton()->print(" --convert-3to4 Converts project from Godot 3.x to Godot 4.x.\n"); + OS::get_singleton()->print(" --validate-conversion-3to4 Shows what elements will be renamed when converting project from Godot 3.x to Godot 4.x.\n"); OS::get_singleton()->print(" --doctool [<path>] Dump the engine API reference to the given <path> (defaults to current dir) in XML format, merging if existing files are found.\n"); OS::get_singleton()->print(" --no-docbase Disallow dumping the base types (used with --doctool).\n"); OS::get_singleton()->print(" --build-solutions Build the scripting solutions (e.g. for C# projects). Implies --editor and requires a valid project to edit.\n"); @@ -600,7 +610,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph GLOBAL_DEF_RST("application/run/flush_stdout_on_print.debug", true); GLOBAL_DEF("debug/settings/crash_handler/message", - String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues")); + String("Please include this when reporting the bug to the project developer.")); + GLOBAL_DEF("debug/settings/crash_handler/message.editor", + String("Please include this when reporting the bug on: https://github.com/godotengine/godot/issues")); MAIN_PRINT("Main: Parse CMDLine"); @@ -996,6 +1008,14 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph editor = true; cmdline_tool = true; main_args.push_back(I->get()); + } else if (I->get() == "--convert-3to4") { + // Actually handling is done in start(). + cmdline_tool = true; + main_args.push_back(I->get()); + } else if (I->get() == "--validate-conversion-3to4") { + // Actually handling is done in start(). + cmdline_tool = true; + main_args.push_back(I->get()); } else if (I->get() == "--doctool") { // Actually handling is done in start(). cmdline_tool = true; @@ -1123,6 +1143,20 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph OS::get_singleton()->print("Missing fixed-fps argument, aborting.\n"); goto error; } + } else if (I->get() == "--write-movie") { + if (I->next()) { + write_movie_path = I->next()->get(); + N = I->next()->next(); + if (fixed_fps == -1) { + fixed_fps = 60; + } + OS::get_singleton()->_writing_movie = true; + } else { + OS::get_singleton()->print("Missing write-movie argument, aborting.\n"); + goto error; + } + } else if (I->get() == "--disable-vsync") { + disable_vsync = true; } else if (I->get() == "--print-fps") { print_fps = true; } else if (I->get() == "--profile-gpu") { @@ -1449,7 +1483,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } if (audio_driver_idx < 0) { - audio_driver_idx = 0; + audio_driver_idx = 0; // 0 Is always available as the dummy driver (no sound) + } + + if (write_movie_path != String()) { + // Always use dummy driver for audio driver (which is last), also in no threaded mode. + audio_driver_idx = AudioDriverManager::get_driver_count() - 1; + AudioDriverDummy::get_dummy_singleton()->set_use_threads(false); } { @@ -1457,6 +1497,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } { window_vsync_mode = DisplayServer::VSyncMode(int(GLOBAL_DEF("display/window/vsync/vsync_mode", DisplayServer::VSyncMode::VSYNC_ENABLED))); + if (disable_vsync) { + window_vsync_mode = DisplayServer::VSyncMode::VSYNC_DISABLED; + } } Engine::get_singleton()->set_physics_ticks_per_second(GLOBAL_DEF_BASIC("physics/common/physics_ticks_per_second", 60)); ProjectSettings::get_singleton()->set_custom_property_info("physics/common/physics_ticks_per_second", @@ -1496,7 +1539,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph "0,33200,1,or_greater")); // No negative numbers GLOBAL_DEF("display/window/ios/hide_home_indicator", true); - GLOBAL_DEF("input_devices/pointing/ios/touch_delay", 0.150); + GLOBAL_DEF("input_devices/pointing/ios/touch_delay", 0.15); + ProjectSettings::get_singleton()->set_custom_property_info("input_devices/pointing/ios/touch_delay", + PropertyInfo(Variant::FLOAT, + "input_devices/pointing/ios/touch_delay", + PROPERTY_HINT_RANGE, "0,1,0.001")); // XR project settings. GLOBAL_DEF_RST_BASIC("xr/openxr/enabled", false); @@ -1536,6 +1583,7 @@ error: display_driver = ""; audio_driver = ""; tablet_driver = ""; + write_movie_path = ""; project_path = ""; args.clear(); @@ -1708,6 +1756,14 @@ Error Main::setup2(Thread::ID p_main_tid_override) { rendering_server->set_print_gpu_profile(true); } + if (write_movie_path != String()) { + movie_writer = MovieWriter::find_writer_for_file(write_movie_path); + if (movie_writer == nullptr) { + ERR_PRINT("Can't find movie writer for file type, aborting: " + write_movie_path); + write_movie_path = String(); + } + } + #ifdef UNIX_ENABLED // Print warning after initializing the renderer but before initializing audio. if (OS::get_singleton()->get_environment("USER") == "root" && !OS::get_singleton()->has_environment("GODOT_SILENCE_ROOT_WARNING")) { @@ -1765,14 +1821,14 @@ Error Main::setup2(Thread::ID p_main_tid_override) { MAIN_PRINT("Main: Load Boot Image"); - Color clear = GLOBAL_DEF("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3)); + Color clear = GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3)); RenderingServer::get_singleton()->set_default_clear_color(clear); if (show_logo) { //boot logo! - const bool boot_logo_image = GLOBAL_DEF("application/boot_splash/show_image", true); - const String boot_logo_path = String(GLOBAL_DEF("application/boot_splash/image", String())).strip_edges(); - const bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true); - const bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true); + const bool boot_logo_image = GLOBAL_DEF_BASIC("application/boot_splash/show_image", true); + const String boot_logo_path = String(GLOBAL_DEF_BASIC("application/boot_splash/image", String())).strip_edges(); + const bool boot_logo_scale = GLOBAL_DEF_BASIC("application/boot_splash/fullsize", true); + const bool boot_logo_filter = GLOBAL_DEF_BASIC("application/boot_splash/use_filter", true); ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image", PropertyInfo(Variant::STRING, "application/boot_splash/image", @@ -1797,10 +1853,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) { #if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH) const Color boot_bg_color = - GLOBAL_DEF("application/boot_splash/bg_color", + GLOBAL_DEF_BASIC("application/boot_splash/bg_color", (editor || project_manager) ? boot_splash_editor_bg_color : boot_splash_bg_color); #else - const Color boot_bg_color = GLOBAL_DEF("application/boot_splash/bg_color", boot_splash_bg_color); + const Color boot_bg_color = GLOBAL_DEF_BASIC("application/boot_splash/bg_color", boot_splash_bg_color); #endif if (boot_logo.is_valid()) { RenderingServer::get_singleton()->set_boot_image(boot_logo, boot_bg_color, boot_logo_scale, @@ -1832,7 +1888,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) { MAIN_PRINT("Main: DCC"); RenderingServer::get_singleton()->set_default_clear_color( - GLOBAL_DEF("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3))); + GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3))); GLOBAL_DEF("application/config/icon", String()); ProjectSettings::get_singleton()->set_custom_property_info("application/config/icon", @@ -1958,9 +2014,9 @@ Error Main::setup2(Thread::ID p_main_tid_override) { // Theme needs modules to be initialized so that sub-resources can be loaded. initialize_theme(); - GLOBAL_DEF("display/mouse_cursor/custom_image", String()); - GLOBAL_DEF("display/mouse_cursor/custom_image_hotspot", Vector2()); - GLOBAL_DEF("display/mouse_cursor/tooltip_position_offset", Point2(10, 10)); + GLOBAL_DEF_BASIC("display/mouse_cursor/custom_image", String()); + GLOBAL_DEF_BASIC("display/mouse_cursor/custom_image_hotspot", Vector2()); + GLOBAL_DEF_BASIC("display/mouse_cursor/tooltip_position_offset", Point2(10, 10)); ProjectSettings::get_singleton()->set_custom_property_info("display/mouse_cursor/custom_image", PropertyInfo(Variant::STRING, "display/mouse_cursor/custom_image", @@ -2035,6 +2091,8 @@ bool Main::start() { String _export_preset; bool export_debug = false; bool export_pack_only = false; + bool converting_project = false; + bool validating_converting_project = false; #endif main_timer_sync.init(OS::get_singleton()->get_ticks_usec()); @@ -2050,6 +2108,10 @@ bool Main::start() { #ifdef TOOLS_ENABLED } else if (args[i] == "--no-docbase") { doc_base = false; + } else if (args[i] == "--convert-3to4") { + converting_project = true; + } else if (args[i] == "--validate-conversion-3to4") { + validating_converting_project = true; } else if (args[i] == "-e" || args[i] == "--editor") { editor = true; } else if (args[i] == "-p" || args[i] == "--project-manager") { @@ -2203,6 +2265,18 @@ bool Main::start() { NativeExtensionAPIDump::generate_extension_json_file("extension_api.json"); return false; } + + if (converting_project) { + int exit_code = ProjectConverter3To4().convert(); + OS::get_singleton()->set_exit_code(exit_code); + return false; + } + if (validating_converting_project) { + int exit_code = ProjectConverter3To4().validate_conversion(); + OS::get_singleton()->set_exit_code(exit_code); + return false; + } + #endif if (script.is_empty() && game_path.is_empty() && String(GLOBAL_GET("application/run/main_scene")) != "") { @@ -2615,6 +2689,9 @@ bool Main::start() { OS::get_singleton()->set_main_loop(main_loop); + if (movie_writer) { + movie_writer->begin(DisplayServer::get_singleton()->window_get_size(), fixed_fps, write_movie_path); + } return true; } @@ -2801,6 +2878,13 @@ bool Main::iteration() { Input::get_singleton()->flush_buffered_events(); } + if (movie_writer) { + RID main_vp_rid = RenderingServer::get_singleton()->viewport_find_from_screen_attachment(DisplayServer::MAIN_WINDOW_ID); + RID main_vp_texture = RenderingServer::get_singleton()->viewport_get_texture(main_vp_rid); + Ref<Image> vp_tex = RenderingServer::get_singleton()->texture_2d_get(main_vp_texture); + movie_writer->add_frame(vp_tex); + } + if (fixed_fps != -1) { return exit; } @@ -2840,6 +2924,10 @@ void Main::cleanup(bool p_force) { ERR_FAIL_COND(!_start_success); } + if (movie_writer) { + movie_writer->end(); + } + ResourceLoader::remove_custom_loaders(); ResourceSaver::remove_custom_savers(); diff --git a/misc/dist/shell/_godot.zsh-completion b/misc/dist/shell/_godot.zsh-completion index 6444ca337e..b17bb6e66b 100644 --- a/misc/dist/shell/_godot.zsh-completion +++ b/misc/dist/shell/_godot.zsh-completion @@ -78,6 +78,8 @@ _arguments \ '--export[export the project using the given preset and matching release template]:export preset name then path' \ '--export-debug[same as --export, but using the debug template]:export preset name then path' \ '--export-pack[same as --export, but only export the game pack for the given preset]:export preset name then path' \ + '--convert-3to4[converts project from Godot 3.x to Godot 4.x]' \ + '--validate-conversion-3to4[shows what elements will be renamed when converting project from Godot 3.x to Godot 4.x]' \ '--doctool[dump the engine API reference to the given path in XML format, merging if existing files are found]:path to base Godot build directory (optional):_dirs' \ '--no-docbase[disallow dumping the base types (used with --doctool)]' \ '--build-solutions[build the scripting solutions (e.g. for C# projects)]' \ diff --git a/misc/dist/shell/godot.bash-completion b/misc/dist/shell/godot.bash-completion index 31e067e29a..1ab687e1fc 100644 --- a/misc/dist/shell/godot.bash-completion +++ b/misc/dist/shell/godot.bash-completion @@ -81,6 +81,8 @@ _complete_godot_options() { --export --export-debug --export-pack +--convert-3to4 +--validate-conversion-3to4 --doctool --no-docbase --build-solutions diff --git a/misc/dist/shell/godot.fish b/misc/dist/shell/godot.fish index da4ce1190c..d58066c135 100644 --- a/misc/dist/shell/godot.fish +++ b/misc/dist/shell/godot.fish @@ -93,6 +93,8 @@ complete -c godot -l check-only -d "Only parse for errors and quit (use with --s complete -c godot -l export -d "Export the project using the given preset and matching release template" -x complete -c godot -l export-debug -d "Same as --export, but using the debug template" -x complete -c godot -l export-pack -d "Same as --export, but only export the game pack for the given preset" -x +complete -c godot -l convert-3to4 -d "Converts project from Godot 3.x to Godot 4.x" +complete -c godot -l validate-conversion-3to4 -d "Shows what elements will be renamed when converting project from Godot 3.x to Godot 4.x" complete -c godot -l doctool -d "Dump the engine API reference to the given path in XML format, merging if existing files are found" -r complete -c godot -l no-docbase -d "Disallow dumping the base types (used with --doctool)" complete -c godot -l build-solutions -d "Build the scripting solutions (e.g. for C# projects)" diff --git a/misc/scripts/check_ci_log.py b/misc/scripts/check_ci_log.py index 2c75b83bd7..1e5a12eeb4 100755 --- a/misc/scripts/check_ci_log.py +++ b/misc/scripts/check_ci_log.py @@ -25,6 +25,8 @@ if ( file_contents.find("Program crashed with signal") != -1 or file_contents.find("Dumping the backtrace") != -1 or file_contents.find("Segmentation fault (core dumped)") != -1 + or file_contents.find("Aborted (core dumped)") != -1 + or file_contents.find("terminate called without an active exception") != -1 ): print("FATAL ERROR: Godot has been crashed.") sys.exit(52) diff --git a/misc/scripts/codespell.sh b/misc/scripts/codespell.sh index f99c5d22b2..f99c5d22b2 100644..100755 --- a/misc/scripts/codespell.sh +++ b/misc/scripts/codespell.sh diff --git a/modules/csg/csg.h b/modules/csg/csg.h index 53a9e5d722..738e3d68ea 100644 --- a/modules/csg/csg.h +++ b/modules/csg/csg.h @@ -130,9 +130,9 @@ struct CSGBrushOperation { struct VertexKeyHash { static _FORCE_INLINE_ uint32_t hash(const VertexKey &p_vk) { - uint32_t h = hash_djb2_one_32(p_vk.x); - h = hash_djb2_one_32(p_vk.y, h); - h = hash_djb2_one_32(p_vk.z, h); + uint32_t h = hash_murmur3_one_32(p_vk.x); + h = hash_murmur3_one_32(p_vk.y, h); + h = hash_murmur3_one_32(p_vk.z, h); return h; } }; diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 25772bebbe..0f09eb2020 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -638,7 +638,7 @@ void CSGShape3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_meshes"), &CSGShape3D::get_meshes); ADD_PROPERTY(PropertyInfo(Variant::INT, "operation", PROPERTY_HINT_ENUM, "Union,Intersection,Subtraction"), "set_operation", "get_operation"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "snap", PROPERTY_HINT_RANGE, "0.0001,1,0.001"), "set_snap", "get_snap"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "snap", PROPERTY_HINT_RANGE, "0.0001,1,0.001,suffix:m"), "set_snap", "get_snap"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "calculate_tangents"), "set_calculate_tangents", "is_calculating_tangents"); ADD_GROUP("Collision", "collision_"); @@ -2135,7 +2135,7 @@ void CSGPolygon3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "polygon"), "set_polygon", "get_polygon"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Depth,Spin,Path"), "set_mode", "get_mode"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_RANGE, "0.01,100.0,0.01,or_greater,exp"), "set_depth", "get_depth"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_RANGE, "0.01,100.0,0.01,or_greater,exp,suffix:m"), "set_depth", "get_depth"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "spin_degrees", PROPERTY_HINT_RANGE, "1,360,0.1"), "set_spin_degrees", "get_spin_degrees"); ADD_PROPERTY(PropertyInfo(Variant::INT, "spin_sides", PROPERTY_HINT_RANGE, "3,64,1"), "set_spin_sides", "get_spin_sides"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "path_node", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Path3D"), "set_path_node", "get_path_node"); @@ -2145,7 +2145,7 @@ void CSGPolygon3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "path_rotation", PROPERTY_HINT_ENUM, "Polygon,Path,PathFollow"), "set_path_rotation", "get_path_rotation"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "path_local"), "set_path_local", "is_path_local"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "path_continuous_u"), "set_path_continuous_u", "is_path_continuous_u"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_u_distance", PROPERTY_HINT_RANGE, "0.0,10.0,0.01,or_greater"), "set_path_u_distance", "get_path_u_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_u_distance", PROPERTY_HINT_RANGE, "0.0,10.0,0.01,or_greater,suffix:m"), "set_path_u_distance", "get_path_u_distance"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "path_joined"), "set_path_joined", "is_path_joined"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smooth_faces"), "set_smooth_faces", "get_smooth_faces"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "BaseMaterial3D,ShaderMaterial"), "set_material", "get_material"); diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h index 0eaf5c3727..0b49dc4609 100644 --- a/modules/csg/csg_shape.h +++ b/modules/csg/csg_shape.h @@ -74,9 +74,9 @@ private: struct Vector3Hasher { _ALWAYS_INLINE_ uint32_t hash(const Vector3 &p_vec3) const { - uint32_t h = hash_djb2_one_float(p_vec3.x); - h = hash_djb2_one_float(p_vec3.y, h); - h = hash_djb2_one_float(p_vec3.z, h); + uint32_t h = hash_murmur3_one_float(p_vec3.x); + h = hash_murmur3_one_float(p_vec3.y, h); + h = hash_murmur3_one_float(p_vec3.z, h); return h; } }; diff --git a/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd b/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd new file mode 100644 index 0000000000..556afe994b --- /dev/null +++ b/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd @@ -0,0 +1,9 @@ +# meta-description: Basic import script template +@tool +extends EditorScenePostImport + + +# Called by the editor when a scene has this script set as the import script in the import tab. +func _post_import(scene: Node) -> Object: + # Modify the contents of the scene upon import. + return scene # Return the modified root node when you're done. diff --git a/modules/gdscript/editor/script_templates/EditorScenePostImport/no_comments.gd b/modules/gdscript/editor/script_templates/EditorScenePostImport/no_comments.gd new file mode 100644 index 0000000000..875afb4fc0 --- /dev/null +++ b/modules/gdscript/editor/script_templates/EditorScenePostImport/no_comments.gd @@ -0,0 +1,7 @@ +# meta-description: Basic import script template (no comments) +@tool +extends EditorScenePostImport + + +func _post_import(scene: Node) -> Object: + return scene diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 55a7e39dec..617db883f8 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -62,7 +62,7 @@ GDScriptNativeClass::GDScriptNativeClass(const StringName &p_name) { bool GDScriptNativeClass::_get(const StringName &p_name, Variant &r_ret) const { bool ok; - int v = ClassDB::get_integer_constant(name, p_name, &ok); + int64_t v = ClassDB::get_integer_constant(name, p_name, &ok); if (ok) { r_ret = v; @@ -128,6 +128,7 @@ void GDScript::_super_implicit_constructor(GDScript *p_script, GDScriptInstance return; } } + ERR_FAIL_NULL(p_script->implicit_initializer); p_script->implicit_initializer->call(p_instance, nullptr, 0, r_error); } @@ -1475,6 +1476,9 @@ void GDScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const if (d.has("usage")) { pinfo.usage = d["usage"]; } + if (d.has("class_name")) { + pinfo.class_name = d["class_name"]; + } props.push_back(pinfo); } diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index 80f187a375..0057962d5e 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -368,7 +368,7 @@ public: if (_debug_call_stack_pos >= _debug_max_call_stack) { //stack overflow - _debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")"; + _debug_error = vformat("Stack overflow (stack size: %s). Check for infinite recursion in your script.", _debug_max_call_stack); EngineDebugger::get_script_debugger()->debug(this); return; } diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index 9fa518ca0b..42b02ce3b9 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -1657,8 +1657,8 @@ void GDScriptAnalyzer::resolve_match_pattern(GDScriptParser::PatternNode *p_matc p_match_pattern->bind->set_datatype(result); #ifdef DEBUG_ENABLED is_shadowing(p_match_pattern->bind, "pattern bind"); - if (p_match_pattern->bind->usages == 0) { - parser->push_warning(p_match_pattern->bind, GDScriptWarning::UNASSIGNED_VARIABLE, p_match_pattern->bind->name); + if (p_match_pattern->bind->usages == 0 && !String(p_match_pattern->bind->name).begins_with("_")) { + parser->push_warning(p_match_pattern->bind, GDScriptWarning::UNUSED_VARIABLE, p_match_pattern->bind->name); } #endif break; @@ -2900,7 +2900,7 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod return; } bool valid = false; - int int_constant = ClassDB::get_integer_constant(native, name, &valid); + int64_t int_constant = ClassDB::get_integer_constant(native, name, &valid); if (valid) { p_identifier->is_constant = true; p_identifier->reduced_value = int_constant; diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 910f94a936..25454030b1 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -312,7 +312,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code // Class C++ integer constant. if (nc) { bool success = false; - int constant = ClassDB::get_integer_constant(nc->get_name(), identifier, &success); + int64_t constant = ClassDB::get_integer_constant(nc->get_name(), identifier, &success); if (success) { return codegen.add_constant(constant); } @@ -1389,25 +1389,9 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c codegen.generator->pop_temporary(); codegen.generator->pop_temporary(); - // If this isn't the first, we need to OR with the previous pattern. If it's nested, we use AND instead. - if (p_is_nested) { - // Use the previous value as target, since we only need one temporary variable. - codegen.generator->write_and_right_operand(result_addr); - codegen.generator->write_end_and(p_previous_test); - } else if (!p_is_first) { - // Use the previous value as target, since we only need one temporary variable. - codegen.generator->write_or_right_operand(result_addr); - codegen.generator->write_end_or(p_previous_test); - } else { - // Just assign this value to the accumulator temporary. - codegen.generator->write_assign(p_previous_test, result_addr); - } - codegen.generator->pop_temporary(); // Remove temp result addr. - // Create temporaries outside the loop so they can be reused. GDScriptCodeGenerator::Address element_addr = codegen.add_temporary(); GDScriptCodeGenerator::Address element_type_addr = codegen.add_temporary(); - GDScriptCodeGenerator::Address test_addr = p_previous_test; // Evaluate element by element. for (int i = 0; i < p_pattern->array.size(); i++) { @@ -1417,7 +1401,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c } // Use AND here too, as we don't want to be checking elements if previous test failed (which means this might be an invalid get). - codegen.generator->write_and_left_operand(test_addr); + codegen.generator->write_and_left_operand(result_addr); // Add index to constant map. GDScriptCodeGenerator::Address index_addr = codegen.add_constant(i); @@ -1431,19 +1415,34 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c codegen.generator->write_call_utility(element_type_addr, "typeof", typeof_args); // Try the pattern inside the element. - test_addr = _parse_match_pattern(codegen, r_error, p_pattern->array[i], element_addr, element_type_addr, p_previous_test, false, true); + result_addr = _parse_match_pattern(codegen, r_error, p_pattern->array[i], element_addr, element_type_addr, result_addr, false, true); if (r_error != OK) { return GDScriptCodeGenerator::Address(); } - codegen.generator->write_and_right_operand(test_addr); - codegen.generator->write_end_and(test_addr); + codegen.generator->write_and_right_operand(result_addr); + codegen.generator->write_end_and(result_addr); } // Remove element temporaries. codegen.generator->pop_temporary(); codegen.generator->pop_temporary(); - return test_addr; + // If this isn't the first, we need to OR with the previous pattern. If it's nested, we use AND instead. + if (p_is_nested) { + // Use the previous value as target, since we only need one temporary variable. + codegen.generator->write_and_right_operand(result_addr); + codegen.generator->write_end_and(p_previous_test); + } else if (!p_is_first) { + // Use the previous value as target, since we only need one temporary variable. + codegen.generator->write_or_right_operand(result_addr); + codegen.generator->write_end_or(p_previous_test); + } else { + // Just assign this value to the accumulator temporary. + codegen.generator->write_assign(p_previous_test, result_addr); + } + codegen.generator->pop_temporary(); // Remove temp result addr. + + return p_previous_test; } break; case GDScriptParser::PatternNode::PT_DICTIONARY: { if (p_is_nested) { @@ -1488,27 +1487,9 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c codegen.generator->pop_temporary(); codegen.generator->pop_temporary(); - // If this isn't the first, we need to OR with the previous pattern. If it's nested, we use AND instead. - if (p_is_nested) { - // Use the previous value as target, since we only need one temporary variable. - codegen.generator->write_and_right_operand(result_addr); - codegen.generator->write_end_and(p_previous_test); - } else if (!p_is_first) { - // Use the previous value as target, since we only need one temporary variable. - codegen.generator->write_or_right_operand(result_addr); - codegen.generator->write_end_or(p_previous_test); - } else { - // Just assign this value to the accumulator temporary. - codegen.generator->write_assign(p_previous_test, result_addr); - } - codegen.generator->pop_temporary(); // Remove temp result addr. - // Create temporaries outside the loop so they can be reused. - temp_type.builtin_type = Variant::BOOL; - GDScriptCodeGenerator::Address test_result = codegen.add_temporary(temp_type); GDScriptCodeGenerator::Address element_addr = codegen.add_temporary(); GDScriptCodeGenerator::Address element_type_addr = codegen.add_temporary(); - GDScriptCodeGenerator::Address test_addr = p_previous_test; // Evaluate element by element. for (int i = 0; i < p_pattern->dictionary.size(); i++) { @@ -1519,7 +1500,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c } // Use AND here too, as we don't want to be checking elements if previous test failed (which means this might be an invalid get). - codegen.generator->write_and_left_operand(test_addr); + codegen.generator->write_and_left_operand(result_addr); // Get the pattern key. GDScriptCodeGenerator::Address pattern_key_addr = _parse_expression(codegen, r_error, element.key); @@ -1530,11 +1511,11 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c // Check if pattern key exists in user's dictionary. This will be AND-ed with next result. func_args.clear(); func_args.push_back(pattern_key_addr); - codegen.generator->write_call(test_result, p_value_addr, "has", func_args); + codegen.generator->write_call(result_addr, p_value_addr, "has", func_args); if (element.value_pattern != nullptr) { // Use AND here too, as we don't want to be checking elements if previous test failed (which means this might be an invalid get). - codegen.generator->write_and_left_operand(test_result); + codegen.generator->write_and_left_operand(result_addr); // Get actual value from user dictionary. codegen.generator->write_get(element_addr, pattern_key_addr, p_value_addr); @@ -1545,16 +1526,16 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c codegen.generator->write_call_utility(element_type_addr, "typeof", func_args); // Try the pattern inside the value. - test_addr = _parse_match_pattern(codegen, r_error, element.value_pattern, element_addr, element_type_addr, test_addr, false, true); + result_addr = _parse_match_pattern(codegen, r_error, element.value_pattern, element_addr, element_type_addr, result_addr, false, true); if (r_error != OK) { return GDScriptCodeGenerator::Address(); } - codegen.generator->write_and_right_operand(test_addr); - codegen.generator->write_end_and(test_addr); + codegen.generator->write_and_right_operand(result_addr); + codegen.generator->write_end_and(result_addr); } - codegen.generator->write_and_right_operand(test_addr); - codegen.generator->write_end_and(test_addr); + codegen.generator->write_and_right_operand(result_addr); + codegen.generator->write_end_and(result_addr); // Remove pattern key temporary. if (pattern_key_addr.mode == GDScriptCodeGenerator::Address::TEMPORARY) { @@ -1565,9 +1546,23 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_match_pattern(CodeGen &c // Remove element temporaries. codegen.generator->pop_temporary(); codegen.generator->pop_temporary(); - codegen.generator->pop_temporary(); - return test_addr; + // If this isn't the first, we need to OR with the previous pattern. If it's nested, we use AND instead. + if (p_is_nested) { + // Use the previous value as target, since we only need one temporary variable. + codegen.generator->write_and_right_operand(result_addr); + codegen.generator->write_end_and(p_previous_test); + } else if (!p_is_first) { + // Use the previous value as target, since we only need one temporary variable. + codegen.generator->write_or_right_operand(result_addr); + codegen.generator->write_end_or(p_previous_test); + } else { + // Just assign this value to the accumulator temporary. + codegen.generator->write_assign(p_previous_test, result_addr); + } + codegen.generator->pop_temporary(); // Remove temp result addr. + + return p_previous_test; } break; case GDScriptParser::PatternNode::PT_REST: // Do nothing. diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 202d1dcdf4..5345143271 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -738,7 +738,7 @@ static void _get_directory_contents(EditorFileSystemDirectory *p_dir, HashMap<St static void _find_annotation_arguments(const GDScriptParser::AnnotationNode *p_annotation, int p_argument, const String p_quote_style, HashMap<String, ScriptLanguage::CodeCompletionOption> &r_result) { if (p_annotation->name == SNAME("@export_range")) { - if (p_argument == 3 || p_argument == 4) { + if (p_argument == 3 || p_argument == 4 || p_argument == 5) { // Slider hint. ScriptLanguage::CodeCompletionOption slider1("or_greater", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); slider1.insert_text = slider1.display.quote(p_quote_style); @@ -746,6 +746,9 @@ static void _find_annotation_arguments(const GDScriptParser::AnnotationNode *p_a ScriptLanguage::CodeCompletionOption slider2("or_lesser", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); slider2.insert_text = slider2.display.quote(p_quote_style); r_result.insert(slider2.display, slider2); + ScriptLanguage::CodeCompletionOption slider3("noslider", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); + slider3.insert_text = slider3.display.quote(p_quote_style); + r_result.insert(slider3.display, slider3); } } else if (p_annotation->name == SNAME("@export_exp_easing")) { if (p_argument == 0 || p_argument == 1) { diff --git a/modules/gdscript/gdscript_lambda_callable.cpp b/modules/gdscript/gdscript_lambda_callable.cpp index c43fa12c8c..a25bf9a306 100644 --- a/modules/gdscript/gdscript_lambda_callable.cpp +++ b/modules/gdscript/gdscript_lambda_callable.cpp @@ -91,7 +91,7 @@ GDScriptLambdaCallable::GDScriptLambdaCallable(Ref<GDScript> p_script, GDScriptF function = p_function; captures = p_captures; - h = (uint32_t)hash_djb2_one_64((uint64_t)this); + h = (uint32_t)hash_murmur3_one_64((uint64_t)this); } bool GDScriptLambdaSelfCallable::compare_equal(const CallableCustom *p_a, const CallableCustom *p_b) { @@ -161,7 +161,7 @@ GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Ref<RefCounted> p_self, G function = p_function; captures = p_captures; - h = (uint32_t)hash_djb2_one_64((uint64_t)this); + h = (uint32_t)hash_murmur3_one_64((uint64_t)this); } GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Object *p_self, GDScriptFunction *p_function, const Vector<Variant> &p_captures) { @@ -169,5 +169,5 @@ GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Object *p_self, GDScriptF function = p_function; captures = p_captures; - h = (uint32_t)hash_djb2_one_64((uint64_t)this); + h = (uint32_t)hash_murmur3_one_64((uint64_t)this); } diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index bc225850c9..5abbf907c7 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -120,7 +120,7 @@ GDScriptParser::GDScriptParser() { register_annotation(MethodInfo("@export_global_dir"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_DIR, Variant::STRING>); register_annotation(MethodInfo("@export_multiline"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_MULTILINE_TEXT, Variant::STRING>); register_annotation(MethodInfo("@export_placeholder"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_PLACEHOLDER_TEXT, Variant::STRING>); - register_annotation(MethodInfo("@export_range", { Variant::FLOAT, "min" }, { Variant::FLOAT, "max" }, { Variant::FLOAT, "step" }, { Variant::STRING, "slider1" }, { Variant::STRING, "slider2" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, 3); + register_annotation(MethodInfo("@export_range", { Variant::FLOAT, "min" }, { Variant::FLOAT, "max" }, { Variant::FLOAT, "step" }, { Variant::STRING, "slider1" }, { Variant::STRING, "slider2" }, { Variant::STRING, "slider3" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, 4); register_annotation(MethodInfo("@export_exp_easing", { Variant::STRING, "hint1" }, { Variant::STRING, "hint2" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_EXP_EASING, Variant::FLOAT>, 2); register_annotation(MethodInfo("@export_color_no_alpha"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_COLOR_NO_ALPHA, Variant::COLOR>); register_annotation(MethodInfo("@export_node_path", { Variant::STRING, "type" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NODE_PATH_VALID_TYPES, Variant::NODE_PATH>, 1, true); diff --git a/modules/gdscript/gdscript_rpc_callable.cpp b/modules/gdscript/gdscript_rpc_callable.cpp index 07ef5aefcb..63ebd8acf5 100644 --- a/modules/gdscript/gdscript_rpc_callable.cpp +++ b/modules/gdscript/gdscript_rpc_callable.cpp @@ -71,7 +71,7 @@ GDScriptRPCCallable::GDScriptRPCCallable(Object *p_object, const StringName &p_m object = p_object; method = p_method; h = method.hash(); - h = hash_djb2_one_64(object->get_instance_id(), h); + h = hash_murmur3_one_64(object->get_instance_id(), h); node = Object::cast_to<Node>(object); ERR_FAIL_COND_MSG(!node, "RPC can only be defined on class that extends Node."); } diff --git a/modules/gdscript/language_server/gdscript_text_document.cpp b/modules/gdscript/language_server/gdscript_text_document.cpp index d763701911..5ad9680ea0 100644 --- a/modules/gdscript/language_server/gdscript_text_document.cpp +++ b/modules/gdscript/language_server/gdscript_text_document.cpp @@ -169,6 +169,7 @@ Array GDScriptTextDocument::completion(const Dictionary &p_params) { lsp::CompletionItem item; item.label = option.display; item.data = request_data; + item.insertText = option.insert_text; switch (option.kind) { case ScriptLanguage::CODE_COMPLETION_KIND_ENUM: @@ -278,12 +279,7 @@ Dictionary GDScriptTextDocument::resolve(const Dictionary &p_params) { item.documentation = symbol->render(); } - if ((item.kind == lsp::CompletionItemKind::Method || item.kind == lsp::CompletionItemKind::Function) && !item.label.ends_with("):")) { - item.insertText = item.label + "("; - if (symbol && symbol->children.is_empty()) { - item.insertText += ")"; - } - } else if (item.kind == lsp::CompletionItemKind::Event) { + if (item.kind == lsp::CompletionItemKind::Event) { if (params.context.triggerKind == lsp::CompletionTriggerKind::TriggerCharacter && (params.context.triggerCharacter == "(")) { const String quote_style = EDITOR_GET("text_editor/completion/use_single_quotes") ? "'" : "\""; item.insertText = item.label.quote(quote_style); diff --git a/modules/gdscript/language_server/lsp.hpp b/modules/gdscript/language_server/lsp.hpp index d4aa207972..1c9349097f 100644 --- a/modules/gdscript/language_server/lsp.hpp +++ b/modules/gdscript/language_server/lsp.hpp @@ -1004,8 +1004,8 @@ struct CompletionItem { dict["label"] = label; dict["kind"] = kind; dict["data"] = data; + dict["insertText"] = insertText; if (resolved) { - dict["insertText"] = insertText; dict["detail"] = detail; dict["documentation"] = documentation.to_json(); dict["deprecated"] = deprecated; diff --git a/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd new file mode 100644 index 0000000000..707e4532cc --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.gd @@ -0,0 +1,13 @@ +# https://github.com/godotengine/godot/pull/61666 + +func test(): + var dict := {"key": "value"} + match dict: + {"key": var value}: + print(value) # used, no warning + match dict: + {"key": var value}: + pass # unused, warning + match dict: + {"key": var _value}: + pass # unused, suppressed warning from underscore diff --git a/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out new file mode 100644 index 0000000000..057c1b11e5 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_bind_unused.out @@ -0,0 +1,6 @@ +GDTEST_OK +>> WARNING +>> Line: 9 +>> UNUSED_VARIABLE +>> The local variable 'value' is declared but never used in the block. If this is intended, prefix it with an underscore: '_value' +value diff --git a/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd b/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd new file mode 100644 index 0000000000..377dd25e9e --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_dictionary.gd @@ -0,0 +1,43 @@ +func foo(x): + match x: + {"key1": "value1", "key2": "value2"}: + print('{"key1": "value1", "key2": "value2"}') + {"key1": "value1", "key2"}: + print('{"key1": "value1", "key2"}') + {"key1", "key2": "value2"}: + print('{"key1", "key2": "value2"}') + {"key1", "key2"}: + print('{"key1", "key2"}') + {"key1": "value1"}: + print('{"key1": "value1"}') + {"key1"}: + print('{"key1"}') + _: + print("wildcard") + +func bar(x): + match x: + {0}: + print("0") + {1}: + print("1") + {2}: + print("2") + _: + print("wildcard") + +func test(): + foo({"key1": "value1", "key2": "value2"}) + foo({"key1": "value1", "key2": ""}) + foo({"key1": "", "key2": "value2"}) + foo({"key1": "", "key2": ""}) + foo({"key1": "value1"}) + foo({"key1": ""}) + foo({"key1": "value1", "key2": "value2", "key3": "value3"}) + foo({"key1": "value1", "key3": ""}) + foo({"key2": "value2"}) + foo({"key3": ""}) + bar({0: "0"}) + bar({1: "1"}) + bar({2: "2"}) + bar({3: "3"}) diff --git a/modules/gdscript/tests/scripts/parser/features/match_dictionary.out b/modules/gdscript/tests/scripts/parser/features/match_dictionary.out new file mode 100644 index 0000000000..4dee886927 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_dictionary.out @@ -0,0 +1,15 @@ +GDTEST_OK +{"key1": "value1", "key2": "value2"} +{"key1": "value1", "key2"} +{"key1", "key2": "value2"} +{"key1", "key2"} +{"key1": "value1"} +{"key1"} +wildcard +wildcard +wildcard +wildcard +0 +1 +2 +wildcard diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd new file mode 100644 index 0000000000..dbe223f5f5 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.gd @@ -0,0 +1,26 @@ +func foo(x): + match x: + 1, [2]: + print('1, [2]') + _: + print('wildcard') + +func bar(x): + match x: + [1], [2], [3]: + print('[1], [2], [3]') + [4]: + print('[4]') + _: + print('wildcard') + +func test(): + foo(1) + foo([2]) + foo(2) + bar([1]) + bar([2]) + bar([3]) + bar([4]) + bar([5]) + diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out new file mode 100644 index 0000000000..a12b934d67 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_patterns_with_array.out @@ -0,0 +1,9 @@ +GDTEST_OK +1, [2] +1, [2] +wildcard +[1], [2], [3] +[1], [2], [3] +[1], [2], [3] +[4] +wildcard diff --git a/modules/gdscript/tests/test_gdscript.cpp b/modules/gdscript/tests/test_gdscript.cpp index d8f60d5e9b..cbcd7b2955 100644 --- a/modules/gdscript/tests/test_gdscript.cpp +++ b/modules/gdscript/tests/test_gdscript.cpp @@ -134,6 +134,34 @@ static void test_parser(const String &p_code, const String &p_script_path, const #endif } +static void recursively_disassemble_functions(const Ref<GDScript> script, const Vector<String> &p_lines) { + for (const KeyValue<StringName, GDScriptFunction *> &E : script->get_member_functions()) { + const GDScriptFunction *func = E.value; + + String signature = "Disassembling " + func->get_name().operator String() + "("; + for (int i = 0; i < func->get_argument_count(); i++) { + if (i > 0) { + signature += ", "; + } + signature += func->get_argument_name(i); + } + print_line(signature + ")"); +#ifdef TOOLS_ENABLED + func->disassemble(p_lines); +#endif + print_line(""); + print_line(""); + } + + for (const KeyValue<StringName, Ref<GDScript>> &F : script->get_subclasses()) { + const Ref<GDScript> inner_script = F.value; + print_line(""); + print_line(vformat("Inner Class: %s", inner_script->get_script_class_name())); + print_line(""); + recursively_disassemble_functions(inner_script, p_lines); + } +} + static void test_compiler(const String &p_code, const String &p_script_path, const Vector<String> &p_lines) { GDScriptParser parser; Error err = parser.parse(p_code, p_script_path, false); @@ -172,23 +200,7 @@ static void test_compiler(const String &p_code, const String &p_script_path, con return; } - for (const KeyValue<StringName, GDScriptFunction *> &E : script->get_member_functions()) { - const GDScriptFunction *func = E.value; - - String signature = "Disassembling " + func->get_name().operator String() + "("; - for (int i = 0; i < func->get_argument_count(); i++) { - if (i > 0) { - signature += ", "; - } - signature += func->get_argument_name(i); - } - print_line(signature + ")"); -#ifdef TOOLS_ENABLED - func->disassemble(p_lines); -#endif - print_line(""); - print_line(""); - } + recursively_disassemble_functions(script, p_lines); } void test(TestType p_type) { diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index 407ce961c8..499f54e3ba 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -73,6 +73,13 @@ Returns an array of [Transform3D] and [Mesh] references corresponding to the non-empty cells in the grid. The transforms are specified in world space. </description> </method> + <method name="get_navigation_layer_value" qualifiers="const"> + <return type="bool" /> + <argument index="0" name="layer_number" type="int" /> + <description> + Returns whether or not the specified layer of the [member navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> <method name="get_used_cells" qualifiers="const"> <return type="Array" /> <description> @@ -133,6 +140,14 @@ Based on [code]value[/code], enables or disables the specified layer in the [member collision_mask], given a [code]layer_number[/code] between 1 and 32. </description> </method> + <method name="set_navigation_layer_value"> + <return type="void" /> + <argument index="0" name="layer_number" type="int" /> + <argument index="1" name="value" type="bool" /> + <description> + Based on [code]value[/code], enables or disables the specified layer in the [member navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32. + </description> + </method> <method name="world_to_map" qualifiers="const"> <return type="Vector3i" /> <argument index="0" name="world_position" type="Vector3" /> @@ -177,7 +192,7 @@ The assigned [MeshLibrary]. </member> <member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1"> - The navigation layers the GridMap generates its navigable regions in. + A bitmask determining all navigation layers the GridMap generated navigation regions belong to. These navigation layers can be checked upon when requesting a path with [method NavigationServer3D.map_get_path]. </member> <member name="physics_material" type="PhysicsMaterial" setter="set_physics_material" getter="get_physics_material"> Overrides the default friction and bounce physics properties for the whole [GridMap]. diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp index cfff5c61de..b694c109e1 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.cpp +++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp @@ -1260,7 +1260,7 @@ GridMapEditor::GridMapEditor() { info_message->set_text(TTR("Give a MeshLibrary resource to this GridMap to use its meshes.")); info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); - info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART); + info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART); info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); mesh_library_palette->add_child(info_message); diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 84dd731195..7d80cbef7c 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -226,15 +226,33 @@ bool GridMap::is_baking_navigation() { return bake_navigation; } -void GridMap::set_navigation_layers(uint32_t p_layers) { - navigation_layers = p_layers; +void GridMap::set_navigation_layers(uint32_t p_navigation_layers) { + navigation_layers = p_navigation_layers; _recreate_octant_data(); } -uint32_t GridMap::get_navigation_layers() { +uint32_t GridMap::get_navigation_layers() const { return navigation_layers; } +void GridMap::set_navigation_layer_value(int p_layer_number, bool p_value) { + ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive."); + uint32_t _navigation_layers = get_navigation_layers(); + if (p_value) { + _navigation_layers |= 1 << (p_layer_number - 1); + } else { + _navigation_layers &= ~(1 << (p_layer_number - 1)); + } + set_navigation_layers(_navigation_layers); +} + +bool GridMap::get_navigation_layer_value(int p_layer_number) const { + ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive."); + return get_navigation_layers() & (1 << (p_layer_number - 1)); +} + void GridMap::set_mesh_library(const Ref<MeshLibrary> &p_mesh_library) { if (!mesh_library.is_null()) { mesh_library->unregister_owner(this); @@ -548,7 +566,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { if (bake_navigation) { RID region = NavigationServer3D::get_singleton()->region_create(); - NavigationServer3D::get_singleton()->region_set_layers(region, navigation_layers); + NavigationServer3D::get_singleton()->region_set_navigation_layers(region, navigation_layers); NavigationServer3D::get_singleton()->region_set_navmesh(region, navmesh); NavigationServer3D::get_singleton()->region_set_transform(region, get_global_transform() * nm.xform); NavigationServer3D::get_singleton()->region_set_map(region, get_world_3d()->get_navigation_map()); @@ -659,7 +677,7 @@ void GridMap::_octant_enter_world(const OctantKey &p_key) { Ref<NavigationMesh> nm = mesh_library->get_item_navmesh(cell_map[F.key].item); if (nm.is_valid()) { RID region = NavigationServer3D::get_singleton()->region_create(); - NavigationServer3D::get_singleton()->region_set_layers(region, navigation_layers); + NavigationServer3D::get_singleton()->region_set_navigation_layers(region, navigation_layers); NavigationServer3D::get_singleton()->region_set_navmesh(region, nm); NavigationServer3D::get_singleton()->region_set_transform(region, get_global_transform() * F.value.xform); NavigationServer3D::get_singleton()->region_set_map(region, get_world_3d()->get_navigation_map()); @@ -885,6 +903,9 @@ void GridMap::_bind_methods() { ClassDB::bind_method(D_METHOD("set_navigation_layers", "layers"), &GridMap::set_navigation_layers); ClassDB::bind_method(D_METHOD("get_navigation_layers"), &GridMap::get_navigation_layers); + ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &GridMap::set_navigation_layer_value); + ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &GridMap::get_navigation_layer_value); + ClassDB::bind_method(D_METHOD("set_mesh_library", "mesh_library"), &GridMap::set_mesh_library); ClassDB::bind_method(D_METHOD("get_mesh_library"), &GridMap::get_mesh_library); @@ -929,7 +950,7 @@ void GridMap::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh_library", PROPERTY_HINT_RESOURCE_TYPE, "MeshLibrary"), "set_mesh_library", "get_mesh_library"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "physics_material", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material", "get_physics_material"); ADD_GROUP("Cell", "cell_"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "cell_size"), "set_cell_size", "get_cell_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "cell_size", PROPERTY_HINT_NONE, "suffix:m"), "set_cell_size", "get_cell_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "cell_octant_size", PROPERTY_HINT_RANGE, "1,1024,1"), "set_octant_size", "get_octant_size"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "cell_center_x"), "set_center_x", "get_center_x"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "cell_center_y"), "set_center_y", "get_center_y"); diff --git a/modules/gridmap/grid_map.h b/modules/gridmap/grid_map.h index c79557afea..078a1d9de5 100644 --- a/modules/gridmap/grid_map.h +++ b/modules/gridmap/grid_map.h @@ -238,8 +238,11 @@ public: void set_bake_navigation(bool p_bake_navigation); bool is_baking_navigation(); - void set_navigation_layers(uint32_t p_layers); - uint32_t get_navigation_layers(); + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; + + void set_navigation_layer_value(int p_layer_number, bool p_value); + bool get_navigation_layer_value(int p_layer_number) const; void set_mesh_library(const Ref<MeshLibrary> &p_mesh_library); Ref<MeshLibrary> get_mesh_library() const; diff --git a/modules/jpg/SCsub b/modules/jpg/SCsub index 7c6ceeea29..b840542c1b 100644 --- a/modules/jpg/SCsub +++ b/modules/jpg/SCsub @@ -13,6 +13,7 @@ thirdparty_obj = [] thirdparty_dir = "#thirdparty/jpeg-compressor/" thirdparty_sources = [ "jpgd.cpp", + "jpge.cpp", ] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp index 51358876a4..0e03fa65c8 100644 --- a/modules/jpg/image_loader_jpegd.cpp +++ b/modules/jpg/image_loader_jpegd.cpp @@ -33,7 +33,8 @@ #include "core/os/os.h" #include "core/string/print_string.h" -#include <jpgd.h> +#include "thirdparty/jpeg-compressor/jpgd.h" +#include "thirdparty/jpeg-compressor/jpge.h" #include <string.h> Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) { @@ -131,6 +132,59 @@ static Ref<Image> _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) { return img; } +static Error _jpgd_save_func(const String &p_path, const Ref<Image> &p_img, float p_quality) { + return OK; +} + +class ImageLoaderJPGOSFile : public jpge::output_stream { +public: + Ref<FileAccess> f; + + virtual bool put_buf(const void *Pbuf, int len) { + f->store_buffer((const uint8_t *)Pbuf, len); + return true; + } +}; + +class ImageLoaderJPGOSBuffer : public jpge::output_stream { +public: + Vector<uint8_t> *buffer = nullptr; + virtual bool put_buf(const void *Pbuf, int len) { + uint32_t base = buffer->size(); + buffer->resize(base + len); + memcpy(buffer->ptrw() + base, Pbuf, len); + return true; + } +}; + +static Vector<uint8_t> _jpgd_buffer_save_func(const Ref<Image> &p_img, float p_quality) { + ERR_FAIL_COND_V(p_img.is_null() || p_img->is_empty(), Vector<uint8_t>()); + Ref<Image> image = p_img; + if (image->get_format() != Image::FORMAT_RGB8) { + image->convert(Image::FORMAT_ETC2_RGB8); + } + + jpge::params p; + p.m_quality = CLAMP(p_quality * 100, 1, 100); + Vector<uint8_t> output; + ImageLoaderJPGOSBuffer ob; + ob.buffer = &output; + + jpge::jpeg_encoder enc; + enc.init(&ob, image->get_width(), image->get_height(), 3, p); + + const uint8_t *src_data = image->get_data().ptr(); + for (int i = 0; i < image->get_height(); i++) { + enc.process_scanline(&src_data[i * image->get_width() * 3]); + } + + enc.process_scanline(nullptr); + + return output; +} + ImageLoaderJPG::ImageLoaderJPG() { Image::_jpg_mem_loader_func = _jpegd_mem_loader_func; + Image::save_jpg_func = _jpgd_save_func; + Image::save_jpg_buffer_func = _jpgd_buffer_save_func; } diff --git a/modules/lightmapper_rd/lightmapper_rd.h b/modules/lightmapper_rd/lightmapper_rd.h index 503f5f7009..bf9f9b5954 100644 --- a/modules/lightmapper_rd/lightmapper_rd.h +++ b/modules/lightmapper_rd/lightmapper_rd.h @@ -110,12 +110,12 @@ class LightmapperRD : public Lightmapper { struct EdgeHash { _FORCE_INLINE_ static uint32_t hash(const Edge &p_edge) { - uint32_t h = hash_djb2_one_float(p_edge.a.x); - h = hash_djb2_one_float(p_edge.a.y, h); - h = hash_djb2_one_float(p_edge.a.z, h); - h = hash_djb2_one_float(p_edge.b.x, h); - h = hash_djb2_one_float(p_edge.b.y, h); - h = hash_djb2_one_float(p_edge.b.z, h); + uint32_t h = hash_murmur3_one_float(p_edge.a.x); + h = hash_murmur3_one_float(p_edge.a.y, h); + h = hash_murmur3_one_float(p_edge.a.z, h); + h = hash_murmur3_one_float(p_edge.b.x, h); + h = hash_murmur3_one_float(p_edge.b.y, h); + h = hash_murmur3_one_float(p_edge.b.z, h); return h; } }; @@ -146,15 +146,15 @@ class LightmapperRD : public Lightmapper { struct VertexHash { _FORCE_INLINE_ static uint32_t hash(const Vertex &p_vtx) { - uint32_t h = hash_djb2_one_float(p_vtx.position[0]); - h = hash_djb2_one_float(p_vtx.position[1], h); - h = hash_djb2_one_float(p_vtx.position[2], h); - h = hash_djb2_one_float(p_vtx.uv[0], h); - h = hash_djb2_one_float(p_vtx.uv[1], h); - h = hash_djb2_one_float(p_vtx.normal_xy[0], h); - h = hash_djb2_one_float(p_vtx.normal_xy[1], h); - h = hash_djb2_one_float(p_vtx.normal_z, h); - return h; + uint32_t h = hash_murmur3_one_float(p_vtx.position[0]); + h = hash_murmur3_one_float(p_vtx.position[1], h); + h = hash_murmur3_one_float(p_vtx.position[2], h); + h = hash_murmur3_one_float(p_vtx.uv[0], h); + h = hash_murmur3_one_float(p_vtx.uv[1], h); + h = hash_murmur3_one_float(p_vtx.normal_xy[0], h); + h = hash_murmur3_one_float(p_vtx.normal_xy[1], h); + h = hash_murmur3_one_float(p_vtx.normal_z, h); + return hash_fmix32(h); } }; diff --git a/modules/minimp3/audio_stream_mp3.cpp b/modules/minimp3/audio_stream_mp3.cpp index b5b51403f7..c37bea519f 100644 --- a/modules/minimp3/audio_stream_mp3.cpp +++ b/modules/minimp3/audio_stream_mp3.cpp @@ -38,7 +38,9 @@ #include "core/io/file_access.h" int AudioStreamPlaybackMP3::_mix_internal(AudioFrame *p_buffer, int p_frames) { - ERR_FAIL_COND_V(!active, 0); + if (!active) { + return 0; + } int todo = p_frames; diff --git a/modules/mono/class_db_api_json.cpp b/modules/mono/class_db_api_json.cpp index 3afde1e8d3..c4547b4323 100644 --- a/modules/mono/class_db_api_json.cpp +++ b/modules/mono/class_db_api_json.cpp @@ -124,7 +124,7 @@ void class_db_api_to_json(const String &p_output_file, ClassDB::APIType p_api) { List<StringName> snames; - for (const KeyValue<StringName, int> &F : t->constant_map) { + for (const KeyValue<StringName, int64_t> &F : t->constant_map) { snames.push_back(F.key); } diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp index 960d2fe27c..9d3d481068 100644 --- a/modules/mono/editor/bindings_generator.cpp +++ b/modules/mono/editor/bindings_generator.cpp @@ -954,7 +954,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) { } } - p_output.append(MEMBER_BEGIN "public const int "); + p_output.append(MEMBER_BEGIN "public const long "); p_output.append(iconstant.proxy_name); p_output.append(" = "); p_output.append(itos(iconstant.value)); @@ -992,6 +992,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) { p_output.append("\n" INDENT1 "public enum "); p_output.append(enum_proxy_name); + p_output.append(" : long"); p_output.append("\n" INDENT1 OPEN_BLOCK); const ConstantInterface &last = ienum.constants.back()->get(); @@ -1417,7 +1418,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str } } - output.append(MEMBER_BEGIN "public const int "); + output.append(MEMBER_BEGIN "public const long "); output.append(iconstant.proxy_name); output.append(" = "); output.append(itos(iconstant.value)); @@ -1435,6 +1436,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str output.append(MEMBER_BEGIN "public enum "); output.append(ienum.cname.operator String()); + output.append(" : long"); output.append(MEMBER_BEGIN OPEN_BLOCK); const ConstantInterface &last = ienum.constants.back()->get(); @@ -3088,7 +3090,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { const List<StringName> &enum_constants = E.value; for (const StringName &constant_cname : enum_constants) { String constant_name = constant_cname.operator String(); - int *value = class_info->constant_map.getptr(constant_cname); + int64_t *value = class_info->constant_map.getptr(constant_cname); ERR_FAIL_NULL_V(value, false); constants.erase(constant_name); @@ -3123,7 +3125,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() { } for (const String &constant_name : constants) { - int *value = class_info->constant_map.getptr(StringName(constant_name)); + int64_t *value = class_info->constant_map.getptr(StringName(constant_name)); ERR_FAIL_NULL_V(value, false); ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value); @@ -3666,7 +3668,7 @@ void BindingsGenerator::_populate_global_constants() { } } - int constant_value = CoreConstants::get_global_constant_value(i); + int64_t constant_value = CoreConstants::get_global_constant_value(i); StringName enum_name = CoreConstants::get_global_constant_enum(i); ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), constant_value); diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h index f0ba2b18e4..70c4f12146 100644 --- a/modules/mono/editor/bindings_generator.h +++ b/modules/mono/editor/bindings_generator.h @@ -45,12 +45,12 @@ class BindingsGenerator { struct ConstantInterface { String name; String proxy_name; - int value = 0; + int64_t value = 0; const DocData::ConstantDoc *const_doc; ConstantInterface() {} - ConstantInterface(const String &p_name, const String &p_proxy_name, int p_value) { + ConstantInterface(const String &p_name, const String &p_proxy_name, int64_t p_value) { name = p_name; proxy_name = p_proxy_name; value = p_value; diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs new file mode 100644 index 0000000000..9e1b7ef580 --- /dev/null +++ b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs @@ -0,0 +1,16 @@ +// meta-description: Basic import script template + +#if TOOLS +using _BINDINGS_NAMESPACE_; +using System; + +[Tool] +public partial class _CLASS_ : _BASE_ +{ + public override Godot.Object _PostImport(Node scene) + { + // Modify the contents of the scene upon import. + return scene; // Return the modified root node when you're done. + } +} +#endif diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs new file mode 100644 index 0000000000..bf2c9434e4 --- /dev/null +++ b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs @@ -0,0 +1,15 @@ +// meta-description: Basic import script template (no comments) + +#if TOOLS +using _BINDINGS_NAMESPACE_; +using System; + +[Tool] +public partial class _CLASS_ : _BASE_ +{ + public override Godot.Object _PostImport(Node scene) + { + return scene; + } +} +#endif diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/AssemblyHasScriptsAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/AssemblyHasScriptsAttribute.cs index ef135da51a..2febf37f05 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/AssemblyHasScriptsAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/AssemblyHasScriptsAttribute.cs @@ -2,17 +2,27 @@ using System; namespace Godot { + /// <summary> + /// An attribute that determines if an assembly has scripts. If so, what types of scripts the assembly has. + /// </summary> [AttributeUsage(AttributeTargets.Assembly)] public class AssemblyHasScriptsAttribute : Attribute { private readonly bool requiresLookup; private readonly System.Type[] scriptTypes; + /// <summary> + /// Constructs a new AssemblyHasScriptsAttribute instance. + /// </summary> public AssemblyHasScriptsAttribute() { requiresLookup = true; } + /// <summary> + /// Constructs a new AssemblyHasScriptsAttribute instance. + /// </summary> + /// <param name="scriptTypes">The specified type(s) of scripts.</param> public AssemblyHasScriptsAttribute(System.Type[] scriptTypes) { requiresLookup = false; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/DisableGodotGeneratorsAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/DisableGodotGeneratorsAttribute.cs index e93bc89811..0b00878e8c 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/DisableGodotGeneratorsAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/DisableGodotGeneratorsAttribute.cs @@ -2,6 +2,9 @@ using System; namespace Godot { + /// <summary> + /// An attribute that disables Godot Generators. + /// </summary> [AttributeUsage(AttributeTargets.Class)] public class DisableGodotGeneratorsAttribute : Attribute { } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ExportAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ExportAttribute.cs index 6adf044886..46eb128d37 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ExportAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ExportAttribute.cs @@ -2,12 +2,20 @@ using System; namespace Godot { + /// <summary> + /// An attribute used to export objects. + /// </summary> [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public class ExportAttribute : Attribute { private PropertyHint hint; private string hintString; + /// <summary> + /// Constructs a new ExportAttribute Instance. + /// </summary> + /// <param name="hint">A hint to the exported object.</param> + /// <param name="hintString">A string representing the exported object.</param> public ExportAttribute(PropertyHint hint = PropertyHint.None, string hintString = "") { this.hint = hint; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotMethodAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotMethodAttribute.cs index 55848769d5..8d4ff0fdb7 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotMethodAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotMethodAttribute.cs @@ -2,6 +2,9 @@ using System; namespace Godot { + /// <summary> + /// An attribute for a method. + /// </summary> [AttributeUsage(AttributeTargets.Method)] internal class GodotMethodAttribute : Attribute { @@ -9,6 +12,10 @@ namespace Godot public string MethodName { get { return methodName; } } + /// <summary> + /// Constructs a new GodotMethodAttribute instance. + /// </summary> + /// <param name="methodName">The name of the method.</param> public GodotMethodAttribute(string methodName) { this.methodName = methodName; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttributes.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttributes.cs index b8b9bc660c..f0d37c344d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttributes.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/RPCAttributes.cs @@ -2,9 +2,15 @@ using System; namespace Godot { + /// <summary> + /// Constructs a new AnyPeerAttribute instance. Members with the AnyPeerAttribute are given authority over their own player. + /// </summary> [AttributeUsage(AttributeTargets.Method)] public class AnyPeerAttribute : Attribute { } + /// <summary> + /// Constructs a new AuthorityAttribute instance. Members with the AuthorityAttribute are given authority over the game. + /// </summary> [AttributeUsage(AttributeTargets.Method)] public class AuthorityAttribute : Attribute { } } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ScriptPathAttribute.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ScriptPathAttribute.cs index 12eb1035c3..3ebb6612de 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ScriptPathAttribute.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ScriptPathAttribute.cs @@ -2,11 +2,18 @@ using System; namespace Godot { + /// <summary> + /// An attribute that contains the path to the object's script. + /// </summary> [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class ScriptPathAttribute : Attribute { private string path; + /// <summary> + /// Constructs a new ScriptPathAttribute instance. + /// </summary> + /// <param name="path">The file path to the script</param> public ScriptPathAttribute(string path) { this.path = path; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dispatcher.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dispatcher.cs index 072e0f20ff..6475237002 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dispatcher.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dispatcher.cs @@ -4,9 +4,16 @@ namespace Godot { public static class Dispatcher { + /// <summary> + /// Implements an external instance of GodotTaskScheduler. + /// </summary> + /// <returns>A GodotTaskScheduler instance.</returns> [MethodImpl(MethodImplOptions.InternalCall)] private static extern GodotTaskScheduler godot_icall_DefaultGodotTaskScheduler(); + /// <summary> + /// Initializes the synchronization context as the context of the GodotTaskScheduler. + /// </summary> public static GodotSynchronizationContext SynchronizationContext => godot_icall_DefaultGodotTaskScheduler().Context; } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotSynchronizationContext.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotSynchronizationContext.cs index c01c926e82..1b599beab5 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotSynchronizationContext.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotSynchronizationContext.cs @@ -14,6 +14,9 @@ namespace Godot _queue.Add(new KeyValuePair<SendOrPostCallback, object>(d, state)); } + /// <summary> + /// Calls the Key method on each workItem object in the _queue to activate their callbacks. + /// </summary> public void ExecutePendingContinuations() { while (_queue.TryTake(out var workItem)) diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotTaskScheduler.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotTaskScheduler.cs index 8eaeea50dc..408bed71b2 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotTaskScheduler.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GodotTaskScheduler.cs @@ -6,11 +6,25 @@ using System.Threading.Tasks; namespace Godot { + /// <summary> + /// GodotTaskScheduler contains a linked list of tasks to perform as a queue. Methods + /// within the class are used to control the queue and perform the contained tasks. + /// </summary> public class GodotTaskScheduler : TaskScheduler { + /// <summary> + /// The current synchronization context. + /// </summary> internal GodotSynchronizationContext Context { get; } + + /// <summary> + /// The queue of tasks for the task scheduler. + /// </summary> private readonly LinkedList<Task> _tasks = new LinkedList<Task>(); + /// <summary> + /// Constructs a new GodotTaskScheduler instance. + /// </summary> public GodotTaskScheduler() { Context = new GodotSynchronizationContext(); @@ -53,12 +67,19 @@ namespace Godot } } + /// <summary> + /// Executes all queued tasks and pending tasks from the current context. + /// </summary> public void Activate() { ExecuteQueuedTasks(); Context.ExecutePendingContinuations(); } + /// <summary> + /// Loops through and attempts to execute each task in _tasks. + /// </summary> + /// <exception cref="InvalidOperationException"></exception> private void ExecuteQueuedTasks() { while (true) diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaitable.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaitable.cs index 0397957d00..e747e03c1e 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaitable.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaitable.cs @@ -1,10 +1,17 @@ namespace Godot { + /// <summary> + /// An interface that requires a GetAwaiter() method to get a reference to the Awaiter. + /// </summary> public interface IAwaitable { IAwaiter GetAwaiter(); } + /// <summary> + /// A templated interface that requires a GetAwaiter() method to get a reference to the Awaiter. + /// </summary> + /// <typeparam name="TResult">A reference to the result to be passed out.</typeparam> public interface IAwaitable<out TResult> { IAwaiter<TResult> GetAwaiter(); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaiter.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaiter.cs index d3be9d781c..dec225eb29 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaiter.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/IAwaiter.cs @@ -2,6 +2,9 @@ using System.Runtime.CompilerServices; namespace Godot { + /// <summary> + /// An interface that requires a boolean for completion status and a method that gets the result of completion. + /// </summary> public interface IAwaiter : INotifyCompletion { bool IsCompleted { get; } @@ -9,6 +12,10 @@ namespace Godot void GetResult(); } + /// <summary> + /// A templated interface that requires a boolean for completion status and a method that gets the result of completion and returns it. + /// </summary> + /// <typeparam name="TResult">A reference to the result to be passed out.</typeparam> public interface IAwaiter<out TResult> : INotifyCompletion { bool IsCompleted { get; } diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/ISerializationListener.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/ISerializationListener.cs index c3fa2f3e82..90b4d1b8d3 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/ISerializationListener.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Interfaces/ISerializationListener.cs @@ -1,5 +1,8 @@ namespace Godot { + /// <summary> + /// An interface that requires methods for before and after serialization. + /// </summary> public interface ISerializationListener { void OnBeforeSerialize(); diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs index ce213da6a7..2b820070d6 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs @@ -276,10 +276,14 @@ namespace Godot /// Returns a normalized value considering the given range. /// This is the opposite of <see cref="Lerp(real_t, real_t, real_t)"/>. /// </summary> - /// <param name="from">The interpolated value.</param> + /// <param name="from">The start value for interpolation.</param> /// <param name="to">The destination value for interpolation.</param> - /// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param> - /// <returns>The resulting value of the inverse interpolation.</returns> + /// <param name="weight">The interpolated value.</param> + /// <returns> + /// The resulting value of the inverse interpolation. + /// The returned value will be between 0.0 and 1.0 if <paramref name="weight"/> is + /// between <paramref name="from"/> and <paramref name="to"/> (inclusive). + /// </returns> public static real_t InverseLerp(real_t from, real_t to, real_t weight) { return (weight - from) / (to - from); @@ -516,6 +520,21 @@ namespace Godot } /// <summary> + /// Maps a <paramref name="value"/> from [<paramref name="inFrom"/>, <paramref name="inTo"/>] + /// to [<paramref name="outFrom"/>, <paramref name="outTo"/>]. + /// </summary> + /// <param name="value">The value to map.</param> + /// <param name="inFrom">The start value for the input interpolation.</param> + /// <param name="inTo">The destination value for the input interpolation.</param> + /// <param name="outFrom">The start value for the output interpolation.</param> + /// <param name="outTo">The destination value for the output interpolation.</param> + /// <returns>The resulting mapped value mapped.</returns> + public static real_t RangeLerp(real_t value, real_t inFrom, real_t inTo, real_t outFrom, real_t outTo) + { + return Lerp(outFrom, outTo, InverseLerp(inFrom, inTo, value)); + } + + /// <summary> /// Rounds <paramref name="s"/> to the nearest whole number, /// with halfway cases rounded towards the nearest multiple of two. /// </summary> diff --git a/modules/mono/managed_callable.cpp b/modules/mono/managed_callable.cpp index 4f7783b765..c159bb9eea 100644 --- a/modules/mono/managed_callable.cpp +++ b/modules/mono/managed_callable.cpp @@ -66,9 +66,8 @@ bool ManagedCallable::compare_less(const CallableCustom *p_a, const CallableCust } uint32_t ManagedCallable::hash() const { - // hmm uint32_t hash = delegate_invoke->get_name().hash(); - return hash_djb2_one_64(delegate_handle.handle, hash); + return hash_murmur3_one_64(delegate_handle.handle, hash); } String ManagedCallable::get_as_text() const { diff --git a/modules/mono/signal_awaiter_utils.cpp b/modules/mono/signal_awaiter_utils.cpp index 315a9c29f6..618e1b58e0 100644 --- a/modules/mono/signal_awaiter_utils.cpp +++ b/modules/mono/signal_awaiter_utils.cpp @@ -63,7 +63,7 @@ bool SignalAwaiterCallable::compare_less(const CallableCustom *p_a, const Callab uint32_t SignalAwaiterCallable::hash() const { uint32_t hash = signal.hash(); - return hash_djb2_one_64(target_id, hash); + return hash_murmur3_one_64(target_id, hash); } String SignalAwaiterCallable::get_as_text() const { @@ -164,7 +164,7 @@ bool EventSignalCallable::compare_less(const CallableCustom *p_a, const Callable uint32_t EventSignalCallable::hash() const { uint32_t hash = event_signal->field->get_name().hash(); - return hash_djb2_one_64(owner->get_instance_id(), hash); + return hash_murmur3_one_64(owner->get_instance_id(), hash); } String EventSignalCallable::get_as_text() const { diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp index e6975611d2..64b68b70af 100644 --- a/modules/mono/utils/string_utils.cpp +++ b/modules/mono/utils/string_utils.cpp @@ -145,7 +145,7 @@ bool is_csharp_keyword(const String &p_name) { p_name == "do" || p_name == "double" || p_name == "else" || p_name == "enum" || p_name == "event" || p_name == "explicit" || p_name == "extern" || p_name == "false" || p_name == "finally" || p_name == "fixed" || p_name == "float" || p_name == "for" || - p_name == "forech" || p_name == "goto" || p_name == "if" || p_name == "implicit" || + p_name == "foreach" || p_name == "goto" || p_name == "if" || p_name == "implicit" || p_name == "in" || p_name == "int" || p_name == "interface" || p_name == "internal" || p_name == "is" || p_name == "lock" || p_name == "long" || p_name == "namespace" || p_name == "new" || p_name == "null" || p_name == "object" || p_name == "operator" || diff --git a/modules/navigation/godot_navigation_server.cpp b/modules/navigation/godot_navigation_server.cpp index f4e719b0c1..2f8cb6c230 100644 --- a/modules/navigation/godot_navigation_server.cpp +++ b/modules/navigation/godot_navigation_server.cpp @@ -198,11 +198,11 @@ real_t GodotNavigationServer::map_get_edge_connection_margin(RID p_map) const { return map->get_edge_connection_margin(); } -Vector<Vector3> GodotNavigationServer::map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_layers) const { +Vector<Vector3> GodotNavigationServer::map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigation_layers) const { const NavMap *map = map_owner.get_or_null(p_map); ERR_FAIL_COND_V(map == nullptr, Vector<Vector3>()); - return map->get_path(p_origin, p_destination, p_optimize, p_layers); + return map->get_path(p_origin, p_destination, p_optimize, p_navigation_layers); } Vector3 GodotNavigationServer::map_get_closest_point_to_segment(RID p_map, const Vector3 &p_from, const Vector3 &p_to, const bool p_use_collision) const { @@ -339,18 +339,18 @@ real_t GodotNavigationServer::region_get_travel_cost(RID p_region) const { return region->get_travel_cost(); } -COMMAND_2(region_set_layers, RID, p_region, uint32_t, p_layers) { +COMMAND_2(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers) { NavRegion *region = region_owner.get_or_null(p_region); ERR_FAIL_COND(region == nullptr); - region->set_layers(p_layers); + region->set_navigation_layers(p_navigation_layers); } -uint32_t GodotNavigationServer::region_get_layers(RID p_region) const { +uint32_t GodotNavigationServer::region_get_navigation_layers(RID p_region) const { NavRegion *region = region_owner.get_or_null(p_region); ERR_FAIL_COND_V(region == nullptr, 0); - return region->get_layers(); + return region->get_navigation_layers(); } COMMAND_2(region_set_navmesh, RID, p_region, Ref<NavigationMesh>, p_nav_mesh) { diff --git a/modules/navigation/godot_navigation_server.h b/modules/navigation/godot_navigation_server.h index 1a7fddb7e6..d931dbaee0 100644 --- a/modules/navigation/godot_navigation_server.h +++ b/modules/navigation/godot_navigation_server.h @@ -98,7 +98,7 @@ public: COMMAND_2(map_set_edge_connection_margin, RID, p_map, real_t, p_connection_margin); virtual real_t map_get_edge_connection_margin(RID p_map) const override; - virtual Vector<Vector3> map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_layers = 1) const override; + virtual Vector<Vector3> map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigation_layers = 1) const override; virtual Vector3 map_get_closest_point_to_segment(RID p_map, const Vector3 &p_from, const Vector3 &p_to, const bool p_use_collision = false) const override; virtual Vector3 map_get_closest_point(RID p_map, const Vector3 &p_point) const override; @@ -117,8 +117,8 @@ public: COMMAND_2(region_set_map, RID, p_region, RID, p_map); virtual RID region_get_map(RID p_region) const override; - COMMAND_2(region_set_layers, RID, p_region, uint32_t, p_layers); - virtual uint32_t region_get_layers(RID p_region) const override; + COMMAND_2(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers); + virtual uint32_t region_get_navigation_layers(RID p_region) const override; COMMAND_2(region_set_transform, RID, p_region, Transform3D, p_transform); COMMAND_2(region_set_navmesh, RID, p_region, Ref<NavigationMesh>, p_nav_mesh); virtual void region_bake_navmesh(Ref<NavigationMesh> r_mesh, Node *p_node) const override; diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp index 059dc989a8..17d6e0a0a1 100644 --- a/modules/navigation/nav_map.cpp +++ b/modules/navigation/nav_map.cpp @@ -65,7 +65,7 @@ gd::PointKey NavMap::get_point_key(const Vector3 &p_pos) const { return p; } -Vector<Vector3> NavMap::get_path(Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_layers) const { +Vector<Vector3> NavMap::get_path(Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigation_layers) const { // Find the start poly and the end poly on this map. const gd::Polygon *begin_poly = nullptr; const gd::Polygon *end_poly = nullptr; @@ -78,7 +78,7 @@ Vector<Vector3> NavMap::get_path(Vector3 p_origin, Vector3 p_destination, bool p const gd::Polygon &p = polygons[i]; // Only consider the polygon if it in a region with compatible layers. - if ((p_layers & p.owner->get_layers()) == 0) { + if ((p_navigation_layers & p.owner->get_navigation_layers()) == 0) { continue; } @@ -154,7 +154,7 @@ Vector<Vector3> NavMap::get_path(Vector3 p_origin, Vector3 p_destination, bool p const gd::Edge::Connection &connection = edge.connections[connection_index]; // Only consider the connection to another polygon if this polygon is in a region with compatible layers. - if ((p_layers & connection.polygon->owner->get_layers()) == 0) { + if ((p_navigation_layers & connection.polygon->owner->get_navigation_layers()) == 0) { continue; } @@ -573,7 +573,7 @@ void NavMap::sync() { connections[ek].push_back(new_connection); } else { // The edge is already connected with another edge, skip. - ERR_PRINT("Attempted to merge a navigation mesh triangle edge with another already-merged edge. This happens when the current `cell_size` is different from the one used to generate the navigation mesh. This will cause navigation problem."); + ERR_PRINT_ONCE("Attempted to merge a navigation mesh triangle edge with another already-merged edge. This happens when the current `cell_size` is different from the one used to generate the navigation mesh. This will cause navigation problems."); } } } diff --git a/modules/navigation/nav_map.h b/modules/navigation/nav_map.h index 20115dd1b4..2036dbecd7 100644 --- a/modules/navigation/nav_map.h +++ b/modules/navigation/nav_map.h @@ -105,7 +105,7 @@ public: gd::PointKey get_point_key(const Vector3 &p_pos) const; - Vector<Vector3> get_path(Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_layers = 1) const; + Vector<Vector3> get_path(Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigation_layers = 1) const; Vector3 get_closest_point_to_segment(const Vector3 &p_from, const Vector3 &p_to, const bool p_use_collision) const; Vector3 get_closest_point(const Vector3 &p_point) const; Vector3 get_closest_point_normal(const Vector3 &p_point) const; diff --git a/modules/navigation/nav_region.cpp b/modules/navigation/nav_region.cpp index fea0ad519a..88740807eb 100644 --- a/modules/navigation/nav_region.cpp +++ b/modules/navigation/nav_region.cpp @@ -40,12 +40,12 @@ void NavRegion::set_map(NavMap *p_map) { } } -void NavRegion::set_layers(uint32_t p_layers) { - layers = p_layers; +void NavRegion::set_navigation_layers(uint32_t p_navigation_layers) { + navigation_layers = p_navigation_layers; } -uint32_t NavRegion::get_layers() const { - return layers; +uint32_t NavRegion::get_navigation_layers() const { + return navigation_layers; } void NavRegion::set_transform(Transform3D p_transform) { diff --git a/modules/navigation/nav_region.h b/modules/navigation/nav_region.h index acde5de834..484856ae36 100644 --- a/modules/navigation/nav_region.h +++ b/modules/navigation/nav_region.h @@ -45,7 +45,7 @@ class NavRegion : public NavRid { NavMap *map = nullptr; Transform3D transform; Ref<NavigationMesh> mesh; - uint32_t layers = 1; + uint32_t navigation_layers = 1; float enter_cost = 0.0; float travel_cost = 1.0; Vector<gd::Edge::Connection> connections; @@ -73,8 +73,8 @@ public: void set_travel_cost(float p_travel_cost) { travel_cost = MAX(p_travel_cost, 0.0); } float get_travel_cost() const { return travel_cost; } - void set_layers(uint32_t p_layers); - uint32_t get_layers() const; + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; void set_transform(Transform3D transform); const Transform3D &get_transform() const { diff --git a/modules/navigation/rvo_agent.cpp b/modules/navigation/rvo_agent.cpp index a6a5660c0c..4ec72ad43f 100644 --- a/modules/navigation/rvo_agent.cpp +++ b/modules/navigation/rvo_agent.cpp @@ -65,8 +65,9 @@ void RvoAgent::dispatch_callback() { return; } Object *obj = ObjectDB::get_instance(callback.id); - if (obj == nullptr) { + if (!obj) { callback.id = ObjectID(); + return; } Callable::CallError responseCallError; diff --git a/modules/noise/noise_texture.cpp b/modules/noise/noise_texture.cpp index e9d16e548c..ca55d3b96d 100644 --- a/modules/noise/noise_texture.cpp +++ b/modules/noise/noise_texture.cpp @@ -81,8 +81,8 @@ void NoiseTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("set_noise", "noise"), &NoiseTexture::set_noise); ClassDB::bind_method(D_METHOD("get_noise"), &NoiseTexture::get_noise); - ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,2048,1,or_greater"), "set_width", "get_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "height", PROPERTY_HINT_RANGE, "1,2048,1,or_greater"), "set_height", "get_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,2048,1,or_greater,suffix:px"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "height", PROPERTY_HINT_RANGE, "1,2048,1,or_greater,suffix:px"), "set_height", "get_height"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "invert"), "set_invert", "get_invert"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "in_3d_space"), "set_in_3d_space", "is_in_3d_space"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate_mipmaps"), "set_generate_mipmaps", "is_generating_mipmaps"); diff --git a/modules/openxr/SCsub b/modules/openxr/SCsub index ff320236a7..8783e061d2 100644 --- a/modules/openxr/SCsub +++ b/modules/openxr/SCsub @@ -81,6 +81,8 @@ if env["platform"] == "android": if env["vulkan"]: env_openxr.add_source_files(module_obj, "extensions/openxr_vulkan_extension.cpp") +env_openxr.add_source_files(module_obj, "extensions/openxr_htc_vive_tracker_extension.cpp") + env.modules_sources += module_obj if env["tools"]: diff --git a/modules/openxr/action_map/openxr_action_map.cpp b/modules/openxr/action_map/openxr_action_map.cpp index 366e131369..0eb5302442 100644 --- a/modules/openxr/action_map/openxr_action_map.cpp +++ b/modules/openxr/action_map/openxr_action_map.cpp @@ -182,10 +182,40 @@ void OpenXRActionMap::create_default_action_sets() { Ref<OpenXRAction> ax_touch = action_set->add_new_action("ax_touch", "A/X touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right"); Ref<OpenXRAction> by_button = action_set->add_new_action("by_button", "B/Y button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right"); Ref<OpenXRAction> by_touch = action_set->add_new_action("by_touch", "B/Y touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right"); - Ref<OpenXRAction> default_pose = action_set->add_new_action("default_pose", "Default pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right"); + Ref<OpenXRAction> default_pose = action_set->add_new_action("default_pose", "Default pose", OpenXRAction::OPENXR_ACTION_POSE, + "/user/hand/left," + "/user/hand/right," + // "/user/vive_tracker_htcx/role/handheld_object," <-- getting errors on this one + "/user/vive_tracker_htcx/role/left_foot," + "/user/vive_tracker_htcx/role/right_foot," + "/user/vive_tracker_htcx/role/left_shoulder," + "/user/vive_tracker_htcx/role/right_shoulder," + "/user/vive_tracker_htcx/role/left_elbow," + "/user/vive_tracker_htcx/role/right_elbow," + "/user/vive_tracker_htcx/role/left_knee," + "/user/vive_tracker_htcx/role/right_knee," + "/user/vive_tracker_htcx/role/waist," + "/user/vive_tracker_htcx/role/chest," + "/user/vive_tracker_htcx/role/camera," + "/user/vive_tracker_htcx/role/keyboard"); Ref<OpenXRAction> aim_pose = action_set->add_new_action("aim_pose", "Aim pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right"); Ref<OpenXRAction> grip_pose = action_set->add_new_action("grip_pose", "Grip pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right"); - Ref<OpenXRAction> haptic = action_set->add_new_action("haptic", "Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC, "/user/hand/left,/user/hand/right"); + Ref<OpenXRAction> haptic = action_set->add_new_action("haptic", "Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC, + "/user/hand/left," + "/user/hand/right," + // "/user/vive_tracker_htcx/role/handheld_object," <-- getting errors on this one + "/user/vive_tracker_htcx/role/left_foot," + "/user/vive_tracker_htcx/role/right_foot," + "/user/vive_tracker_htcx/role/left_shoulder," + "/user/vive_tracker_htcx/role/right_shoulder," + "/user/vive_tracker_htcx/role/left_elbow," + "/user/vive_tracker_htcx/role/right_elbow," + "/user/vive_tracker_htcx/role/left_knee," + "/user/vive_tracker_htcx/role/right_knee," + "/user/vive_tracker_htcx/role/waist," + "/user/vive_tracker_htcx/role/chest," + "/user/vive_tracker_htcx/role/camera," + "/user/vive_tracker_htcx/role/keyboard"); // Create our interaction profiles Ref<OpenXRInteractionProfile> profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/khr/simple_controller"); @@ -399,6 +429,37 @@ void OpenXRActionMap::create_default_action_sets() { profile->add_new_binding(primary_click, "/user/hand/left/input/trackpad/click,/user/hand/right/input/trackpad/click"); profile->add_new_binding(primary_touch, "/user/hand/left/input/trackpad/touch,/user/hand/right/input/trackpad/touch"); profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic"); + + // Create our HTC Vive tracker profile + profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/htc/vive_tracker_htcx"); + profile->add_new_binding(default_pose, + // "/user/vive_tracker_htcx/role/handheld_object/input/grip/pose," <-- getting errors on this one + "/user/vive_tracker_htcx/role/left_foot/input/grip/pose," + "/user/vive_tracker_htcx/role/right_foot/input/grip/pose," + "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose," + "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose," + "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose," + "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose," + "/user/vive_tracker_htcx/role/left_knee/input/grip/pose," + "/user/vive_tracker_htcx/role/right_knee/input/grip/pose," + "/user/vive_tracker_htcx/role/waist/input/grip/pose," + "/user/vive_tracker_htcx/role/chest/input/grip/pose," + "/user/vive_tracker_htcx/role/camera/input/grip/pose," + "/user/vive_tracker_htcx/role/keyboard/input/grip/pose"); + profile->add_new_binding(haptic, + // "/user/vive_tracker_htcx/role/handheld_object/output/haptic," <-- getting errors on this one + "/user/vive_tracker_htcx/role/left_foot/output/haptic," + "/user/vive_tracker_htcx/role/right_foot/output/haptic," + "/user/vive_tracker_htcx/role/left_shoulder/output/haptic," + "/user/vive_tracker_htcx/role/right_shoulder/output/haptic," + "/user/vive_tracker_htcx/role/left_elbow/output/haptic," + "/user/vive_tracker_htcx/role/right_elbow/output/haptic," + "/user/vive_tracker_htcx/role/left_knee/output/haptic," + "/user/vive_tracker_htcx/role/right_knee/output/haptic," + "/user/vive_tracker_htcx/role/waist/output/haptic," + "/user/vive_tracker_htcx/role/chest/output/haptic," + "/user/vive_tracker_htcx/role/camera/output/haptic," + "/user/vive_tracker_htcx/role/keyboard/output/haptic"); add_interaction_profile(profile); } diff --git a/modules/openxr/action_map/openxr_defs.cpp b/modules/openxr/action_map/openxr_defs.cpp index e10326449c..89860199be 100644 --- a/modules/openxr/action_map/openxr_defs.cpp +++ b/modules/openxr/action_map/openxr_defs.cpp @@ -32,8 +32,28 @@ // Our top level paths to which devices can be bound OpenXRDefs::TopLevelPath OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_TOP_LEVEL_PATH_MAX] = { + // Core OpenXR paths { "Left hand controller", "/user/hand/left" }, { "Right hand controller", "/user/hand/right" }, + { "Head", "/user/head" }, + { "Gamepad", "/user/gamepad" }, + { "Treadmill", "/user/treadmill" }, + + // Specific to HTC tracker extension + // { "Handheld object tracker", "/user/vive_tracker_htcx/role/handheld_object" }, + { "Left foot tracker", "/user/vive_tracker_htcx/role/left_foot" }, + { "Right foot tracker", "/user/vive_tracker_htcx/role/right_foot" }, + { "Left shoulder tracker", "/user/vive_tracker_htcx/role/left_shoulder" }, + { "Right shoulder tracker", "/user/vive_tracker_htcx/role/right_shoulder" }, + { "Left elbow tracker", "/user/vive_tracker_htcx/role/left_elbow" }, + { "Right elbow tracker", "/user/vive_tracker_htcx/role/right_elbow" }, + { "Left knee tracker", "/user/vive_tracker_htcx/role/left_knee" }, + { "Right knee tracker", "/user/vive_tracker_htcx/role/right_knee" }, + { "Waist tracker", "/user/vive_tracker_htcx/role/waist" }, + { "Chest tracker", "/user/vive_tracker_htcx/role/chest" }, + { "Camera tracker", "/user/vive_tracker_htcx/role/camera" }, + { "Keyboard tracker", "/user/vive_tracker_htcx/role/keyboard" }, + }; // Fallback Khronos simple controller @@ -378,6 +398,137 @@ OpenXRDefs::IOPath OpenXRDefs::huawei_controller_paths[] = { { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_RIGHT_HAND], "/user/hand/right/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, }; +// HTC Vive tracker +// Interestingly enough trackers don't have buttons or inputs, yet these are defined in the spec. +// I think this can be supported through attachments on the trackers. +OpenXRDefs::IOPath OpenXRDefs::vive_tracker_controller_paths[] = { + // { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL }, + + // { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT }, + + // { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL }, + + // { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL }, + + // { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 }, + + // { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL }, + + // { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL }, + + // { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE }, + + // { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, + { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC }, +}; + OpenXRDefs::InteractionProfile OpenXRDefs::available_interaction_profiles[] = { { "Simple controller", // display_name @@ -439,6 +590,13 @@ OpenXRDefs::InteractionProfile OpenXRDefs::available_interaction_profiles[] = { huawei_controller_paths, // io_paths sizeof(huawei_controller_paths) / sizeof(OpenXRDefs::IOPath) // io_path_count }, + + { + "HTC Vive tracker", // display_name + "/interaction_profiles/htc/vive_tracker_htcx", // openxr_path + vive_tracker_controller_paths, // io_paths + sizeof(vive_tracker_controller_paths) / sizeof(OpenXRDefs::IOPath) // io_path_count + }, }; int OpenXRDefs::available_interaction_profile_count = sizeof(OpenXRDefs::available_interaction_profiles) / sizeof(OpenXRDefs::InteractionProfile); diff --git a/modules/openxr/action_map/openxr_defs.h b/modules/openxr/action_map/openxr_defs.h index dbda4757f1..9bdd9a6ded 100644 --- a/modules/openxr/action_map/openxr_defs.h +++ b/modules/openxr/action_map/openxr_defs.h @@ -51,8 +51,28 @@ class OpenXRDefs { public: enum TOP_LEVEL_PATH { + // Core OpenXR toplevel paths OPENXR_LEFT_HAND, OPENXR_RIGHT_HAND, + OPENXR_HEAD, + OPENXR_GAMEPAD, + OPENXR_TREADMILL, + + // HTC tracker extension toplevel paths + // OPENXR_HTC_HANDHELD_TRACKER, + OPENXR_HTC_LEFT_FOOT_TRACKER, + OPENXR_HTC_RIGHT_FOOT_TRACKER, + OPENXR_HTC_LEFT_SHOULDER_TRACKER, + OPENXR_HTC_RIGHT_SHOULDER_TRACKER, + OPENXR_HTC_LEFT_ELBOW_TRACKER, + OPENXR_HTC_RIGHT_ELBOW_TRACKER, + OPENXR_HTC_LEFT_KNEE_TRACKER, + OPENXR_HTC_RIGHT_KNEE_TRACKER, + OPENXR_HTC_WAIST_TRACKER, + OPENXR_HTC_CHEST_TRACKER, + OPENXR_HTC_CAMERA_TRACKER, + OPENXR_HTC_KEYBOARD_TRACKER, + OPENXR_TOP_LEVEL_PATH_MAX }; @@ -89,6 +109,7 @@ private: static IOPath vive_cosmos_paths[]; static IOPath vive_focus3_paths[]; static IOPath huawei_controller_paths[]; + static IOPath vive_tracker_controller_paths[]; static InteractionProfile available_interaction_profiles[]; static int available_interaction_profile_count; diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp new file mode 100644 index 0000000000..302acf4e30 --- /dev/null +++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp @@ -0,0 +1,67 @@ +/*************************************************************************/ +/* openxr_htc_vive_tracker_extension.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "openxr_htc_vive_tracker_extension.h" +#include "core/string/print_string.h" + +OpenXRHTCViveTrackerExtension *OpenXRHTCViveTrackerExtension::singleton = nullptr; + +OpenXRHTCViveTrackerExtension *OpenXRHTCViveTrackerExtension::get_singleton() { + return singleton; +} + +OpenXRHTCViveTrackerExtension::OpenXRHTCViveTrackerExtension(OpenXRAPI *p_openxr_api) : + OpenXRExtensionWrapper(p_openxr_api) { + singleton = this; + + request_extensions[XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME] = &available; +} + +OpenXRHTCViveTrackerExtension::~OpenXRHTCViveTrackerExtension() { + singleton = nullptr; +} + +bool OpenXRHTCViveTrackerExtension::is_available() { + return available; +} + +bool OpenXRHTCViveTrackerExtension::on_event_polled(const XrEventDataBuffer &event) { + switch (event.type) { + case XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX: { + // Investigate if we need to do more here + print_verbose("OpenXR EVENT: VIVE tracker connected"); + + return true; + } break; + default: { + return false; + } break; + } +} diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h new file mode 100644 index 0000000000..7670bc074b --- /dev/null +++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h @@ -0,0 +1,52 @@ +/*************************************************************************/ +/* openxr_htc_vive_tracker_extension.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef OPENXR_HTC_VIVE_TRACKER_EXTENSION_H +#define OPENXR_HTC_VIVE_TRACKER_EXTENSION_H + +#include "openxr_extension_wrapper.h" + +class OpenXRHTCViveTrackerExtension : public OpenXRExtensionWrapper { +public: + static OpenXRHTCViveTrackerExtension *get_singleton(); + + OpenXRHTCViveTrackerExtension(OpenXRAPI *p_openxr_api); + virtual ~OpenXRHTCViveTrackerExtension() override; + + bool is_available(); + virtual bool on_event_polled(const XrEventDataBuffer &event) override; + +private: + static OpenXRHTCViveTrackerExtension *singleton; + + bool available = false; +}; + +#endif // !OPENXR_HTC_VIVE_TRACKER_EXTENSION_H diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp index f42af0492f..5e35942012 100644 --- a/modules/openxr/openxr_api.cpp +++ b/modules/openxr/openxr_api.cpp @@ -48,7 +48,9 @@ #include "extensions/openxr_vulkan_extension.h" #endif -#include "openxr_interface.h" +#include "extensions/openxr_htc_vive_tracker_extension.h" + +#include "modules/openxr/openxr_interface.h" OpenXRAPI *OpenXRAPI::singleton = nullptr; @@ -1102,7 +1104,7 @@ Size2 OpenXRAPI::get_recommended_target_size() { return target_size; } -XRPose::TrackingConfidence OpenXRAPI::get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, const Vector3 &r_angular_velocity) { +XRPose::TrackingConfidence OpenXRAPI::get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity) { XrResult result; ERR_FAIL_COND_V(!running, XRPose::XR_TRACKING_CONFIDENCE_NONE); @@ -1644,6 +1646,9 @@ OpenXRAPI::OpenXRAPI() { // our android wrapper will initialize our android loader at this point register_extension_wrapper(memnew(OpenXRAndroidExtension(this))); #endif + + // register our other extensions + register_extension_wrapper(memnew(OpenXRHTCViveTrackerExtension(this))); } OpenXRAPI::~OpenXRAPI() { @@ -1730,7 +1735,7 @@ XRPose::TrackingConfidence OpenXRAPI::transform_from_location(const XrHandJointL return _transform_from_location(p_location, r_transform); } -void OpenXRAPI::parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 r_angular_velocity) { +void OpenXRAPI::parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity) { if (p_velocity.velocityFlags & XR_SPACE_VELOCITY_LINEAR_VALID_BIT) { XrVector3f linear_velocity = p_velocity.linearVelocity; r_linear_velocity = Vector3(linear_velocity.x, linear_velocity.y, linear_velocity.z); @@ -2303,7 +2308,7 @@ Vector2 OpenXRAPI::get_action_vector2(RID p_action, RID p_tracker) { return result_state.isActive ? Vector2(result_state.currentState.x, result_state.currentState.y) : Vector2(); } -XRPose::TrackingConfidence OpenXRAPI::get_action_pose(RID p_action, RID p_tracker, Transform3D &r_transform, Vector3 &r_linear_velocity, const Vector3 &r_angular_velocity) { +XRPose::TrackingConfidence OpenXRAPI::get_action_pose(RID p_action, RID p_tracker, Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity) { ERR_FAIL_COND_V(session == XR_NULL_HANDLE, XRPose::XR_TRACKING_CONFIDENCE_NONE); Action *action = action_owner.get_or_null(p_action); ERR_FAIL_NULL_V(action, XRPose::XR_TRACKING_CONFIDENCE_NONE); diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h index bd71f0e1c2..fe9e2937b2 100644 --- a/modules/openxr/openxr_api.h +++ b/modules/openxr/openxr_api.h @@ -225,7 +225,7 @@ protected: // helper method to get a valid Transform3D from an openxr space location XRPose::TrackingConfidence transform_from_location(const XrSpaceLocation &p_location, Transform3D &r_transform); XRPose::TrackingConfidence transform_from_location(const XrHandJointLocationEXT &p_location, Transform3D &r_transform); - void parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 r_angular_velocity); + void parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity); public: static bool openxr_is_enabled(bool p_check_run_in_editor = true); @@ -247,7 +247,7 @@ public: bool can_render() { return instance != XR_NULL_HANDLE && session != XR_NULL_HANDLE && running && view_pose_valid && frame_state.shouldRender; }; Size2 get_recommended_target_size(); - XRPose::TrackingConfidence get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, const Vector3 &r_angular_velocity); + XRPose::TrackingConfidence get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity); bool get_view_transform(uint32_t p_view, Transform3D &r_transform); bool get_view_projection(uint32_t p_view, double p_z_near, double p_z_far, CameraMatrix &p_camera_matrix); bool process(); @@ -285,7 +285,7 @@ public: bool get_action_bool(RID p_action, RID p_tracker); float get_action_float(RID p_action, RID p_tracker); Vector2 get_action_vector2(RID p_action, RID p_tracker); - XRPose::TrackingConfidence get_action_pose(RID p_action, RID p_tracker, Transform3D &r_transform, Vector3 &r_linear_velocity, const Vector3 &r_angular_velocity); + XRPose::TrackingConfidence get_action_pose(RID p_action, RID p_tracker, Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity); bool trigger_haptic_pulse(RID p_action, RID p_tracker, float p_frequency, float p_amplitude, XrDuration p_duration_ns); OpenXRAPI(); diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp index ab06583932..9dfa005600 100644 --- a/modules/openxr/openxr_interface.cpp +++ b/modules/openxr/openxr_interface.cpp @@ -57,7 +57,24 @@ PackedStringArray OpenXRInterface::get_suggested_tracker_names() const { PackedStringArray arr = { "left_hand", // /user/hand/left is mapped to our defaults "right_hand", // /user/hand/right is mapped to our defaults - "/user/treadmill" + "/user/treadmill", + + // Even though these are only available if you have the tracker extension, + // we add these as we may be deploying on a different platform than our + // editor is running on. + "/user/vive_tracker_htcx/role/handheld_object", + "/user/vive_tracker_htcx/role/left_foot", + "/user/vive_tracker_htcx/role/right_foot", + "/user/vive_tracker_htcx/role/left_shoulder", + "/user/vive_tracker_htcx/role/right_shoulder", + "/user/vive_tracker_htcx/role/left_elbow", + "/user/vive_tracker_htcx/role/right_elbow", + "/user/vive_tracker_htcx/role/left_knee", + "/user/vive_tracker_htcx/role/right_knee", + "/user/vive_tracker_htcx/role/waist", + "/user/vive_tracker_htcx/role/chest", + "/user/vive_tracker_htcx/role/camera", + "/user/vive_tracker_htcx/role/keyboard" }; return arr; diff --git a/modules/raycast/raycast_occlusion_cull.h b/modules/raycast/raycast_occlusion_cull.h index 4474031991..6562c4e9c4 100644 --- a/modules/raycast/raycast_occlusion_cull.h +++ b/modules/raycast/raycast_occlusion_cull.h @@ -87,8 +87,8 @@ private: RID instance; static uint32_t hash(const InstanceID &p_ins) { - uint32_t h = hash_djb2_one_64(p_ins.scenario.get_id()); - return hash_djb2_one_64(p_ins.instance.get_id(), h); + uint32_t h = hash_murmur3_one_64(p_ins.scenario.get_id()); + return hash_fmix32(hash_murmur3_one_64(p_ins.instance.get_id(), h)); } bool operator==(const InstanceID &rhs) const { return instance == rhs.instance && rhs.scenario == scenario; diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index d18ed97def..c4269a53f4 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -1288,7 +1288,16 @@ _FORCE_INLINE_ bool TextServerAdvanced::_ensure_cache_for_size(FontDataAdvanced fargs.memory_size = p_font_data->data_size; fargs.flags = FT_OPEN_MEMORY; fargs.stream = &fd->stream; - error = FT_Open_Face(ft_library, &fargs, 0, &fd->face); + + int max_index = 0; + FT_Face tmp_face; + error = FT_Open_Face(ft_library, &fargs, -1, &tmp_face); + if (error == 0) { + max_index = tmp_face->num_faces - 1; + } + FT_Done_Face(tmp_face); + + error = FT_Open_Face(ft_library, &fargs, CLAMP(p_font_data->face_index, 0, max_index), &fd->face); if (error) { FT_Done_Face(fd->face); fd->face = nullptr; @@ -1720,6 +1729,69 @@ void TextServerAdvanced::font_set_data_ptr(const RID &p_font_rid, const uint8_t fd->data_size = p_data_size; } +void TextServerAdvanced::font_set_face_index(const RID &p_font_rid, int64_t p_face_index) { + ERR_FAIL_COND(p_face_index < 0); + ERR_FAIL_COND(p_face_index >= 0x7FFF); + + FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND(!fd); + + MutexLock lock(fd->mutex); + if (fd->face_index != p_face_index) { + fd->face_index = p_face_index; + _font_clear_cache(fd); + } +} + +int64_t TextServerAdvanced::font_get_face_index(const RID &p_font_rid) const { + FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND_V(!fd, 0); + + MutexLock lock(fd->mutex); + return fd->face_index; +} + +int64_t TextServerAdvanced::font_get_face_count(const RID &p_font_rid) const { + FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND_V(!fd, 0); + + MutexLock lock(fd->mutex); + int face_count = 0; + + if (fd->data_ptr && (fd->data_size > 0)) { + // Init dynamic font. +#ifdef MODULE_FREETYPE_ENABLED + int error = 0; + if (!ft_library) { + error = FT_Init_FreeType(&ft_library); + ERR_FAIL_COND_V_MSG(error != 0, false, "FreeType: Error initializing library: '" + String(FT_Error_String(error)) + "'."); + } + + FT_StreamRec stream; + memset(&stream, 0, sizeof(FT_StreamRec)); + stream.base = (unsigned char *)fd->data_ptr; + stream.size = fd->data_size; + stream.pos = 0; + + FT_Open_Args fargs; + memset(&fargs, 0, sizeof(FT_Open_Args)); + fargs.memory_base = (unsigned char *)fd->data_ptr; + fargs.memory_size = fd->data_size; + fargs.flags = FT_OPEN_MEMORY; + fargs.stream = &stream; + + FT_Face tmp_face; + error = FT_Open_Face(ft_library, &fargs, -1, &tmp_face); + if (error == 0) { + face_count = tmp_face->num_faces; + } + FT_Done_Face(tmp_face); +#endif + } + + return face_count; +} + void TextServerAdvanced::font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) { FontDataAdvanced *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND(!fd); @@ -2780,7 +2852,7 @@ Vector2 TextServerAdvanced::font_get_kerning(const RID &p_font_rid, int64_t p_si ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), Vector2()); - const HashMap<Vector2i, Vector2, VariantHasher, VariantComparator> &kern = fd->cache[size]->kerning_map; + const HashMap<Vector2i, Vector2> &kern = fd->cache[size]->kerning_map; if (kern.has(p_glyph_pair)) { if (fd->msdf) { @@ -4132,7 +4204,7 @@ void TextServerAdvanced::shaped_text_overrun_trim_to_width(const RID &p_shaped_l Glyph *sd_glyphs = sd->glyphs.ptrw(); - if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIMMING || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) { + if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIM || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) { sd->overrun_trim_data.trim_pos = -1; sd->overrun_trim_data.ellipsis_pos = -1; return; @@ -4780,6 +4852,9 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int64_t p_star RID f = p_fonts[p_fb_index]; FontDataAdvanced *fd = font_owner.get_or_null(f); + ERR_FAIL_COND(!fd); + MutexLock lock(fd->mutex); + Vector2i fss = _get_size(fd, fs); hb_font_t *hb_font = _font_get_hb_handle(f, fs); double scale = font_get_scale(f, fs); diff --git a/modules/text_server_adv/text_server_adv.h b/modules/text_server_adv/text_server_adv.h index 62f94472b5..e7690cb70d 100644 --- a/modules/text_server_adv/text_server_adv.h +++ b/modules/text_server_adv/text_server_adv.h @@ -191,7 +191,7 @@ class TextServerAdvanced : public TextServerExtension { Vector<FontTexture> textures; HashMap<int32_t, FontGlyph> glyph_map; - HashMap<Vector2i, Vector2, VariantHasher, VariantComparator> kerning_map; + HashMap<Vector2i, Vector2> kerning_map; hb_font_t *hb_handle = nullptr; #ifdef MODULE_FREETYPE_ENABLED @@ -247,6 +247,7 @@ class TextServerAdvanced : public TextServerExtension { PackedByteArray data; const uint8_t *data_ptr; size_t data_size; + int face_index = 0; mutable ThreadWorkPool work_pool; ~FontDataAdvanced() { @@ -473,6 +474,11 @@ public: virtual void font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) override; virtual void font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) override; + virtual void font_set_face_index(const RID &p_font_rid, int64_t p_index) override; + virtual int64_t font_get_face_index(const RID &p_font_rid) const override; + + virtual int64_t font_get_face_count(const RID &p_font_rid) const override; + virtual void font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) override; virtual int64_t /*FontStyle*/ font_get_style(const RID &p_font_rid) const override; diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index 498b58175e..f93c5909c9 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -733,7 +733,16 @@ _FORCE_INLINE_ bool TextServerFallback::_ensure_cache_for_size(FontDataFallback fargs.memory_size = p_font_data->data_size; fargs.flags = FT_OPEN_MEMORY; fargs.stream = &fd->stream; - error = FT_Open_Face(ft_library, &fargs, 0, &fd->face); + + int max_index = 0; + FT_Face tmp_face; + error = FT_Open_Face(ft_library, &fargs, -1, &tmp_face); + if (error == 0) { + max_index = tmp_face->num_faces - 1; + } + FT_Done_Face(tmp_face); + + error = FT_Open_Face(ft_library, &fargs, CLAMP(p_font_data->face_index, 0, max_index), &fd->face); if (error) { FT_Done_Face(fd->face); fd->face = nullptr; @@ -892,6 +901,69 @@ void TextServerFallback::font_set_style(const RID &p_font_rid, int64_t /*FontSty fd->style_flags = p_style; } +void TextServerFallback::font_set_face_index(const RID &p_font_rid, int64_t p_face_index) { + ERR_FAIL_COND(p_face_index < 0); + ERR_FAIL_COND(p_face_index >= 0x7FFF); + + FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND(!fd); + + MutexLock lock(fd->mutex); + if (fd->face_index != p_face_index) { + fd->face_index = p_face_index; + _font_clear_cache(fd); + } +} + +int64_t TextServerFallback::font_get_face_index(const RID &p_font_rid) const { + FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND_V(!fd, 0); + + MutexLock lock(fd->mutex); + return fd->face_index; +} + +int64_t TextServerFallback::font_get_face_count(const RID &p_font_rid) const { + FontDataFallback *fd = font_owner.get_or_null(p_font_rid); + ERR_FAIL_COND_V(!fd, 0); + + MutexLock lock(fd->mutex); + int face_count = 0; + + if (fd->data_ptr && (fd->data_size > 0)) { + // Init dynamic font. +#ifdef MODULE_FREETYPE_ENABLED + int error = 0; + if (!ft_library) { + error = FT_Init_FreeType(&ft_library); + ERR_FAIL_COND_V_MSG(error != 0, false, "FreeType: Error initializing library: '" + String(FT_Error_String(error)) + "'."); + } + + FT_StreamRec stream; + memset(&stream, 0, sizeof(FT_StreamRec)); + stream.base = (unsigned char *)fd->data_ptr; + stream.size = fd->data_size; + stream.pos = 0; + + FT_Open_Args fargs; + memset(&fargs, 0, sizeof(FT_Open_Args)); + fargs.memory_base = (unsigned char *)fd->data_ptr; + fargs.memory_size = fd->data_size; + fargs.flags = FT_OPEN_MEMORY; + fargs.stream = &stream; + + FT_Face tmp_face; + error = FT_Open_Face(ft_library, &fargs, -1, &tmp_face); + if (error == 0) { + face_count = tmp_face->num_faces; + } + FT_Done_Face(tmp_face); +#endif + } + + return face_count; +} + int64_t /*FontStyle*/ TextServerFallback::font_get_style(const RID &p_font_rid) const { FontDataFallback *fd = font_owner.get_or_null(p_font_rid); ERR_FAIL_COND_V(!fd, 0); @@ -1928,7 +2000,7 @@ Vector2 TextServerFallback::font_get_kerning(const RID &p_font_rid, int64_t p_si ERR_FAIL_COND_V(!_ensure_cache_for_size(fd, size), Vector2()); - const HashMap<Vector2i, Vector2, VariantHasher, VariantComparator> &kern = fd->cache[size]->kerning_map; + const HashMap<Vector2i, Vector2> &kern = fd->cache[size]->kerning_map; if (kern.has(p_glyph_pair)) { if (fd->msdf) { @@ -3164,7 +3236,7 @@ void TextServerFallback::shaped_text_overrun_trim_to_width(const RID &p_shaped_l Glyph *sd_glyphs = sd->glyphs.ptrw(); - if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIMMING || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) { + if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIM || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) { sd->overrun_trim_data.trim_pos = -1; sd->overrun_trim_data.ellipsis_pos = -1; return; diff --git a/modules/text_server_fb/text_server_fb.h b/modules/text_server_fb/text_server_fb.h index f3d516edea..e4c81aed5b 100644 --- a/modules/text_server_fb/text_server_fb.h +++ b/modules/text_server_fb/text_server_fb.h @@ -159,7 +159,7 @@ class TextServerFallback : public TextServerExtension { Vector<FontTexture> textures; HashMap<int32_t, FontGlyph> glyph_map; - HashMap<Vector2i, Vector2, VariantHasher, VariantComparator> kerning_map; + HashMap<Vector2i, Vector2> kerning_map; #ifdef MODULE_FREETYPE_ENABLED FT_Face face = nullptr; @@ -209,6 +209,7 @@ class TextServerFallback : public TextServerExtension { PackedByteArray data; const uint8_t *data_ptr; size_t data_size; + int face_index = 0; mutable ThreadWorkPool work_pool; @@ -364,6 +365,11 @@ public: virtual void font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) override; virtual void font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) override; + virtual void font_set_face_index(const RID &p_font_rid, int64_t p_index) override; + virtual int64_t font_get_face_index(const RID &p_font_rid) const override; + + virtual int64_t font_get_face_count(const RID &p_font_rid) const override; + virtual void font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) override; virtual int64_t /*FontStyle*/ font_get_style(const RID &p_font_rid) const override; diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index 30b64d0a7b..c4fafb6676 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -1582,7 +1582,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p if (!found) { r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; - error_str = RTR("Found sequence bit but not the node in the stack, report bug!"); + error_str = RTR("Found sequence bit but not the node in the stack (please report)."); error = true; break; } @@ -1594,7 +1594,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p // Check for stack overflow. if (flow_stack_pos + 1 >= flow_max) { r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD; - error_str = RTR("Stack overflow with stack depth:") + " " + itos(output); + error_str = vformat(RTR("Stack overflow (stack size: %s). Check for infinite recursion in your script."), output); error = true; break; } diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index 0f3b8de3fc..c2e4d0e597 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -522,7 +522,7 @@ public: if (_debug_call_stack_pos >= _debug_max_call_stack) { // Stack overflow. - _debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")"; + _debug_error = vformat("Stack overflow (stack size: %s). Check for infinite recursion in your script.", _debug_max_call_stack); EngineDebugger::get_script_debugger()->debug(this); return; } @@ -545,7 +545,7 @@ public: } if (_debug_call_stack_pos == 0) { - _debug_error = "Stack Underflow (Engine Bug)"; + _debug_error = "Stack underflow (engine bug), please report."; EngineDebugger::get_script_debugger()->debug(this); return; } diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp index b645a48c88..89a6b03ff8 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.cpp +++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp @@ -36,23 +36,22 @@ int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_frames) { ERR_FAIL_COND_V(!ready, 0); - ERR_FAIL_COND_V(!active, 0); + + if (!active) { + return 0; + } int todo = p_frames; int start_buffer = 0; - int frames_mixed_this_step = p_frames; - - while (todo && active) { + while (todo > 0 && active) { AudioFrame *buffer = p_buffer; if (start_buffer > 0) { buffer = buffer + start_buffer; } int mixed = _mix_frames_vorbis(buffer, todo); - if (mixed < 0) { - return 0; - } + ERR_FAIL_COND_V(mixed < 0, 0); todo -= mixed; frames_mixed += mixed; start_buffer += mixed; @@ -67,16 +66,14 @@ int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fram // we still have buffer to fill, start from this element in the next iteration. start_buffer = p_frames - todo; } else { - frames_mixed_this_step = p_frames - todo; for (int i = p_frames - todo; i < p_frames; i++) { p_buffer[i] = AudioFrame(0, 0); } active = false; - todo = 0; } } } - return frames_mixed_this_step; + return p_frames - todo; } int AudioStreamPlaybackOGGVorbis::_mix_frames_vorbis(AudioFrame *p_buffer, int p_frames) { diff --git a/modules/webp/image_loader_webp.cpp b/modules/webp/image_loader_webp.cpp index 0e41f6c973..778d562278 100644 --- a/modules/webp/image_loader_webp.cpp +++ b/modules/webp/image_loader_webp.cpp @@ -34,184 +34,21 @@ #include "core/io/marshalls.h" #include "core/os/os.h" #include "core/string/print_string.h" +#include "webp_common.h" #include <stdlib.h> #include <webp/decode.h> #include <webp/encode.h> -static Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) { - ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>()); - - Ref<Image> img = p_image->duplicate(); - if (img->detect_alpha()) { - img->convert(Image::FORMAT_RGBA8); - } else { - img->convert(Image::FORMAT_RGB8); - } - - Size2 s(img->get_width(), img->get_height()); - Vector<uint8_t> data = img->get_data(); - const uint8_t *r = data.ptr(); - - uint8_t *dst_buff = nullptr; - size_t dst_size = 0; - if (img->get_format() == Image::FORMAT_RGB8) { - dst_size = WebPEncodeRGB(r, s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff); - } else { - dst_size = WebPEncodeRGBA(r, s.width, s.height, 4 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff); - } - - ERR_FAIL_COND_V(dst_size == 0, Vector<uint8_t>()); - Vector<uint8_t> dst; - dst.resize(4 + dst_size); - uint8_t *w = dst.ptrw(); - w[0] = 'W'; - w[1] = 'E'; - w[2] = 'B'; - w[3] = 'P'; - memcpy(&w[4], dst_buff, dst_size); - WebPFree(dst_buff); - - return dst; -} - -static Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image) { - ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>()); - - int compression_level = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/webp_compression_level"); - compression_level = CLAMP(compression_level, 0, 9); - - Ref<Image> img = p_image->duplicate(); - if (img->detect_alpha()) { - img->convert(Image::FORMAT_RGBA8); - } else { - img->convert(Image::FORMAT_RGB8); - } - - Size2 s(img->get_width(), img->get_height()); - Vector<uint8_t> data = img->get_data(); - const uint8_t *r = data.ptr(); - - // we need to use the more complex API in order to access the 'exact' flag... - - WebPConfig config; - WebPPicture pic; - if (!WebPConfigInit(&config) || !WebPConfigLosslessPreset(&config, compression_level) || !WebPPictureInit(&pic)) { - ERR_FAIL_V(Vector<uint8_t>()); - } - - WebPMemoryWriter wrt; - config.exact = 1; - pic.use_argb = 1; - pic.width = s.width; - pic.height = s.height; - pic.writer = WebPMemoryWrite; - pic.custom_ptr = &wrt; - WebPMemoryWriterInit(&wrt); - - bool success_import = false; - if (img->get_format() == Image::FORMAT_RGB8) { - success_import = WebPPictureImportRGB(&pic, r, 3 * s.width); - } else { - success_import = WebPPictureImportRGBA(&pic, r, 4 * s.width); - } - bool success_encode = false; - if (success_import) { - success_encode = WebPEncode(&config, &pic); - } - WebPPictureFree(&pic); - - if (!success_encode) { - WebPMemoryWriterClear(&wrt); - ERR_FAIL_V_MSG(Vector<uint8_t>(), "WebP packing failed."); - } - - // copy from wrt - Vector<uint8_t> dst; - dst.resize(4 + wrt.size); - uint8_t *w = dst.ptrw(); - w[0] = 'W'; - w[1] = 'E'; - w[2] = 'B'; - w[3] = 'P'; - memcpy(&w[4], wrt.mem, wrt.size); - WebPMemoryWriterClear(&wrt); - - return dst; -} - -static Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer) { - int size = p_buffer.size() - 4; - ERR_FAIL_COND_V(size <= 0, Ref<Image>()); - const uint8_t *r = p_buffer.ptr(); - - ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Ref<Image>()); - WebPBitstreamFeatures features; - if (WebPGetFeatures(&r[4], size, &features) != VP8_STATUS_OK) { - ERR_FAIL_V_MSG(Ref<Image>(), "Error unpacking WEBP image."); - } - - /* - print_line("width: "+itos(features.width)); - print_line("height: "+itos(features.height)); - print_line("alpha: "+itos(features.has_alpha)); - */ - - Vector<uint8_t> dst_image; - int datasize = features.width * features.height * (features.has_alpha ? 4 : 3); - dst_image.resize(datasize); - - uint8_t *dst_w = dst_image.ptrw(); - - bool errdec = false; - if (features.has_alpha) { - errdec = WebPDecodeRGBAInto(&r[4], size, dst_w, datasize, 4 * features.width) == nullptr; - } else { - errdec = WebPDecodeRGBInto(&r[4], size, dst_w, datasize, 3 * features.width) == nullptr; - } - - ERR_FAIL_COND_V_MSG(errdec, Ref<Image>(), "Failed decoding WebP image."); - - Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image)); - return img; -} - -Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) { - ERR_FAIL_NULL_V(p_image, ERR_INVALID_PARAMETER); - - WebPBitstreamFeatures features; - if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) { - ERR_FAIL_V(ERR_FILE_CORRUPT); - } - - Vector<uint8_t> dst_image; - int datasize = features.width * features.height * (features.has_alpha ? 4 : 3); - dst_image.resize(datasize); - uint8_t *dst_w = dst_image.ptrw(); - - bool errdec = false; - if (features.has_alpha) { - errdec = WebPDecodeRGBAInto(p_buffer, p_buffer_len, dst_w, datasize, 4 * features.width) == nullptr; - } else { - errdec = WebPDecodeRGBInto(p_buffer, p_buffer_len, dst_w, datasize, 3 * features.width) == nullptr; - } - - ERR_FAIL_COND_V_MSG(errdec, ERR_FILE_CORRUPT, "Failed decoding WebP image."); - - p_image->create(features.width, features.height, false, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image); - - return OK; -} - static Ref<Image> _webp_mem_loader_func(const uint8_t *p_png, int p_size) { Ref<Image> img; img.instantiate(); - Error err = webp_load_image_from_buffer(img.ptr(), p_png, p_size); + Error err = WebPCommon::webp_load_image_from_buffer(img.ptr(), p_png, p_size); ERR_FAIL_COND_V(err, Ref<Image>()); return img; } -Error ImageLoaderWEBP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale) { +Error ImageLoaderWebP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale) { Vector<uint8_t> src_image; uint64_t src_image_len = f->get_length(); ERR_FAIL_COND_V(src_image_len == 0, ERR_FILE_CORRUPT); @@ -221,18 +58,18 @@ Error ImageLoaderWEBP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_ f->get_buffer(&w[0], src_image_len); - Error err = webp_load_image_from_buffer(p_image.ptr(), w, src_image_len); + Error err = WebPCommon::webp_load_image_from_buffer(p_image.ptr(), w, src_image_len); return err; } -void ImageLoaderWEBP::get_recognized_extensions(List<String> *p_extensions) const { +void ImageLoaderWebP::get_recognized_extensions(List<String> *p_extensions) const { p_extensions->push_back("webp"); } -ImageLoaderWEBP::ImageLoaderWEBP() { +ImageLoaderWebP::ImageLoaderWebP() { Image::_webp_mem_loader_func = _webp_mem_loader_func; - Image::webp_lossy_packer = _webp_lossy_pack; - Image::webp_lossless_packer = _webp_lossless_pack; - Image::webp_unpacker = _webp_unpack; + Image::webp_lossy_packer = WebPCommon::_webp_lossy_pack; + Image::webp_lossless_packer = WebPCommon::_webp_lossless_pack; + Image::webp_unpacker = WebPCommon::_webp_unpack; } diff --git a/modules/webp/image_loader_webp.h b/modules/webp/image_loader_webp.h index 1acd1459a0..448f683eb3 100644 --- a/modules/webp/image_loader_webp.h +++ b/modules/webp/image_loader_webp.h @@ -33,11 +33,11 @@ #include "core/io/image_loader.h" -class ImageLoaderWEBP : public ImageFormatLoader { +class ImageLoaderWebP : public ImageFormatLoader { public: virtual Error load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale); virtual void get_recognized_extensions(List<String> *p_extensions) const; - ImageLoaderWEBP(); + ImageLoaderWebP(); }; #endif diff --git a/modules/webp/register_types.cpp b/modules/webp/register_types.cpp index 148e325498..29f633743e 100644 --- a/modules/webp/register_types.cpp +++ b/modules/webp/register_types.cpp @@ -31,16 +31,20 @@ #include "register_types.h" #include "image_loader_webp.h" +#include "resource_saver_webp.h" -static ImageLoaderWEBP *image_loader_webp = nullptr; +static ImageLoaderWebP *image_loader_webp = nullptr; +static Ref<ResourceSaverWebP> resource_saver_webp; void initialize_webp_module(ModuleInitializationLevel p_level) { if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { return; } - image_loader_webp = memnew(ImageLoaderWEBP); + image_loader_webp = memnew(ImageLoaderWebP); + resource_saver_webp.instantiate(); ImageLoader::add_image_format_loader(image_loader_webp); + ResourceSaver::add_resource_format_saver(resource_saver_webp); } void uninitialize_webp_module(ModuleInitializationLevel p_level) { @@ -49,4 +53,6 @@ void uninitialize_webp_module(ModuleInitializationLevel p_level) { } memdelete(image_loader_webp); + ResourceSaver::remove_resource_format_saver(resource_saver_webp); + resource_saver_webp.unref(); } diff --git a/modules/webp/resource_saver_webp.cpp b/modules/webp/resource_saver_webp.cpp new file mode 100644 index 0000000000..d270d39163 --- /dev/null +++ b/modules/webp/resource_saver_webp.cpp @@ -0,0 +1,90 @@ +/*************************************************************************/ +/* resource_saver_webp.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "resource_saver_webp.h" + +#include "core/io/file_access.h" +#include "core/io/image.h" +#include "scene/resources/texture.h" +#include "webp_common.h" + +Error ResourceSaverWebP::save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags) { + Ref<ImageTexture> texture = p_resource; + + ERR_FAIL_COND_V_MSG(!texture.is_valid(), ERR_INVALID_PARAMETER, "Can't save invalid texture as WEBP."); + ERR_FAIL_COND_V_MSG(!texture->get_width(), ERR_INVALID_PARAMETER, "Can't save empty texture as WEBP."); + + Ref<Image> img = texture->get_image(); + + Error err = save_image(p_path, img); + + return err; +} + +Error ResourceSaverWebP::save_image(const String &p_path, const Ref<Image> &p_img, const bool p_lossy, const float p_quality) { + Vector<uint8_t> buffer = save_image_to_buffer(p_img, p_lossy, p_quality); + Error err; + Ref<FileAccess> file = FileAccess::open(p_path, FileAccess::WRITE, &err); + ERR_FAIL_COND_V_MSG(err, err, vformat("Can't save WEBP at path: '%s'.", p_path)); + + const uint8_t *reader = buffer.ptr(); + + file->store_buffer(reader, buffer.size()); + if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { + return ERR_CANT_CREATE; + } + + return OK; +} + +Vector<uint8_t> ResourceSaverWebP::save_image_to_buffer(const Ref<Image> &p_img, const bool p_lossy, const float p_quality) { + Vector<uint8_t> buffer; + if (p_lossy) { + buffer = WebPCommon::_webp_lossy_pack(p_img, p_quality); + } else { + buffer = WebPCommon::_webp_lossless_pack(p_img); + } + return buffer; +} + +bool ResourceSaverWebP::recognize(const Ref<Resource> &p_resource) const { + return (p_resource.is_valid() && p_resource->is_class("ImageTexture")); +} + +void ResourceSaverWebP::get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const { + if (Object::cast_to<ImageTexture>(*p_resource)) { + p_extensions->push_back("webp"); + } +} + +ResourceSaverWebP::ResourceSaverWebP() { + Image::save_webp_func = &save_image; + Image::save_webp_buffer_func = &save_image_to_buffer; +} diff --git a/modules/webp/resource_saver_webp.h b/modules/webp/resource_saver_webp.h new file mode 100644 index 0000000000..59e944efa0 --- /dev/null +++ b/modules/webp/resource_saver_webp.h @@ -0,0 +1,49 @@ +/*************************************************************************/ +/* resource_saver_webp.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef RESOURCE_SAVER_WEBP_H +#define RESOURCE_SAVER_WEBP_H + +#include "core/io/image.h" +#include "core/io/resource_saver.h" + +class ResourceSaverWebP : public ResourceFormatSaver { +public: + static Error save_image(const String &p_path, const Ref<Image> &p_img, const bool p_lossy = false, const float p_quality = 0.75f); + static Vector<uint8_t> save_image_to_buffer(const Ref<Image> &p_img, const bool p_lossy = false, const float p_quality = 0.75f); + + virtual Error save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags = 0); + virtual bool recognize(const Ref<Resource> &p_resource) const; + virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const; + + ResourceSaverWebP(); +}; + +#endif // RESOURCE_SAVER_WEBP_H diff --git a/modules/webp/webp_common.cpp b/modules/webp/webp_common.cpp new file mode 100644 index 0000000000..8657a98853 --- /dev/null +++ b/modules/webp/webp_common.cpp @@ -0,0 +1,190 @@ +/*************************************************************************/ +/* webp_common.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "webp_common.h" + +#include "core/config/project_settings.h" +#include "core/os/os.h" + +#include <string.h> +#include <webp/decode.h> +#include <webp/encode.h> + +namespace WebPCommon { +Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) { + ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>()); + + Ref<Image> img = p_image->duplicate(); + if (img->detect_alpha()) { + img->convert(Image::FORMAT_RGBA8); + } else { + img->convert(Image::FORMAT_RGB8); + } + + Size2 s(img->get_width(), img->get_height()); + Vector<uint8_t> data = img->get_data(); + const uint8_t *r = data.ptr(); + + uint8_t *dst_buff = nullptr; + size_t dst_size = 0; + if (img->get_format() == Image::FORMAT_RGB8) { + dst_size = WebPEncodeRGB(r, s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0f, 0.0f, 100.0f), &dst_buff); + } else { + dst_size = WebPEncodeRGBA(r, s.width, s.height, 4 * s.width, CLAMP(p_quality * 100.0f, 0.0f, 100.0f), &dst_buff); + } + + ERR_FAIL_COND_V(dst_size == 0, Vector<uint8_t>()); + Vector<uint8_t> dst; + dst.resize(dst_size); + uint8_t *w = dst.ptrw(); + memcpy(w, dst_buff, dst_size); + WebPFree(dst_buff); + + return dst; +} + +Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image) { + ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>()); + + int compression_level = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/webp_compression_level"); + compression_level = CLAMP(compression_level, 0, 9); + + Ref<Image> img = p_image->duplicate(); + if (img->detect_alpha()) { + img->convert(Image::FORMAT_RGBA8); + } else { + img->convert(Image::FORMAT_RGB8); + } + + Size2 s(img->get_width(), img->get_height()); + Vector<uint8_t> data = img->get_data(); + const uint8_t *r = data.ptr(); + + // we need to use the more complex API in order to access the 'exact' flag... + + WebPConfig config; + WebPPicture pic; + if (!WebPConfigInit(&config) || !WebPConfigLosslessPreset(&config, compression_level) || !WebPPictureInit(&pic)) { + ERR_FAIL_V(Vector<uint8_t>()); + } + + WebPMemoryWriter wrt; + config.exact = 1; + pic.use_argb = 1; + pic.width = s.width; + pic.height = s.height; + pic.writer = WebPMemoryWrite; + pic.custom_ptr = &wrt; + WebPMemoryWriterInit(&wrt); + + bool success_import = false; + if (img->get_format() == Image::FORMAT_RGB8) { + success_import = WebPPictureImportRGB(&pic, r, 3 * s.width); + } else { + success_import = WebPPictureImportRGBA(&pic, r, 4 * s.width); + } + bool success_encode = false; + if (success_import) { + success_encode = WebPEncode(&config, &pic); + } + WebPPictureFree(&pic); + + if (!success_encode) { + WebPMemoryWriterClear(&wrt); + ERR_FAIL_V_MSG(Vector<uint8_t>(), "WebP packing failed."); + } + + // copy from wrt + Vector<uint8_t> dst; + dst.resize(wrt.size); + uint8_t *w = dst.ptrw(); + memcpy(w, wrt.mem, wrt.size); + WebPMemoryWriterClear(&wrt); + return dst; +} + +Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer) { + int size = p_buffer.size(); + ERR_FAIL_COND_V(size <= 0, Ref<Image>()); + const uint8_t *r = p_buffer.ptr(); + + // A WebP file uses a RIFF header, which starts with "RIFF____WEBP". + ERR_FAIL_COND_V(r[0] != 'R' || r[1] != 'I' || r[2] != 'F' || r[3] != 'F' || r[8] != 'W' || r[9] != 'E' || r[10] != 'B' || r[11] != 'P', Ref<Image>()); + WebPBitstreamFeatures features; + if (WebPGetFeatures(r, size, &features) != VP8_STATUS_OK) { + ERR_FAIL_V_MSG(Ref<Image>(), "Error unpacking WEBP image."); + } + + Vector<uint8_t> dst_image; + int datasize = features.width * features.height * (features.has_alpha ? 4 : 3); + dst_image.resize(datasize); + + uint8_t *dst_w = dst_image.ptrw(); + + bool errdec = false; + if (features.has_alpha) { + errdec = WebPDecodeRGBAInto(r, size, dst_w, datasize, 4 * features.width) == nullptr; + } else { + errdec = WebPDecodeRGBInto(r, size, dst_w, datasize, 3 * features.width) == nullptr; + } + + ERR_FAIL_COND_V_MSG(errdec, Ref<Image>(), "Failed decoding WebP image."); + + Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image)); + return img; +} + +Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) { + ERR_FAIL_NULL_V(p_image, ERR_INVALID_PARAMETER); + + WebPBitstreamFeatures features; + if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) { + ERR_FAIL_V(ERR_FILE_CORRUPT); + } + + Vector<uint8_t> dst_image; + int datasize = features.width * features.height * (features.has_alpha ? 4 : 3); + dst_image.resize(datasize); + uint8_t *dst_w = dst_image.ptrw(); + + bool errdec = false; + if (features.has_alpha) { + errdec = WebPDecodeRGBAInto(p_buffer, p_buffer_len, dst_w, datasize, 4 * features.width) == nullptr; + } else { + errdec = WebPDecodeRGBInto(p_buffer, p_buffer_len, dst_w, datasize, 3 * features.width) == nullptr; + } + + ERR_FAIL_COND_V_MSG(errdec, ERR_FILE_CORRUPT, "Failed decoding WebP image."); + + p_image->create(features.width, features.height, false, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image); + + return OK; +} +} // namespace WebPCommon diff --git a/modules/webp/webp_common.h b/modules/webp/webp_common.h new file mode 100644 index 0000000000..11bef40256 --- /dev/null +++ b/modules/webp/webp_common.h @@ -0,0 +1,45 @@ +/*************************************************************************/ +/* webp_common.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef WEBP_COMMON_H +#define WEBP_COMMON_H + +#include "core/io/image.h" + +namespace WebPCommon { +// Given an image, pack this data into a WebP file. +Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality); +Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image); +// Given a WebP file, unpack it into an image. +Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer); +Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len); +} //namespace WebPCommon + +#endif // WEBP_COMMON_H diff --git a/modules/webrtc/doc_classes/WebRTCPeerConnection.xml b/modules/webrtc/doc_classes/WebRTCPeerConnection.xml index b4d97077e3..fed67397d1 100644 --- a/modules/webrtc/doc_classes/WebRTCPeerConnection.xml +++ b/modules/webrtc/doc_classes/WebRTCPeerConnection.xml @@ -95,6 +95,13 @@ Call this method frequently (e.g. in [method Node._process] or [method Node._physics_process]) to properly receive signals. </description> </method> + <method name="set_default_extension" qualifiers="static"> + <return type="void" /> + <argument index="0" name="extension_class" type="StringName" /> + <description> + Sets the [code]extension_class[/code] as the default [WebRTCPeerConnectionExtension] returned when creating a new [WebRTCPeerConnection]. + </description> + </method> <method name="set_local_description"> <return type="int" enum="Error" /> <argument index="0" name="type" type="String" /> diff --git a/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml b/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml index e88acdc845..163d939ac1 100644 --- a/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml +++ b/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml @@ -62,10 +62,5 @@ <description> </description> </method> - <method name="make_default"> - <return type="void" /> - <description> - </description> - </method> </methods> </class> diff --git a/modules/webrtc/webrtc_peer_connection.cpp b/modules/webrtc/webrtc_peer_connection.cpp index 7fdf26d3cd..75716017d7 100644 --- a/modules/webrtc/webrtc_peer_connection.cpp +++ b/modules/webrtc/webrtc_peer_connection.cpp @@ -32,13 +32,14 @@ #ifdef JAVASCRIPT_ENABLED #include "webrtc_peer_connection_js.h" -#else -#include "webrtc_peer_connection_extension.h" #endif +#include "webrtc_peer_connection_extension.h" + StringName WebRTCPeerConnection::default_extension; void WebRTCPeerConnection::set_default_extension(const StringName &p_extension) { + ERR_FAIL_COND_MSG(!ClassDB::is_parent_class(p_extension, WebRTCPeerConnectionExtension::get_class_static()), vformat("Can't make %s the default WebRTC extension since it does not extend WebRTCPeerConnectionExtension.", p_extension)); default_extension = p_extension; } @@ -56,6 +57,8 @@ WebRTCPeerConnection *WebRTCPeerConnection::create() { } void WebRTCPeerConnection::_bind_methods() { + ClassDB::bind_static_method(get_class_static(), D_METHOD("set_default_extension", "extension_class"), &WebRTCPeerConnectionExtension::set_default_extension); + ClassDB::bind_method(D_METHOD("initialize", "configuration"), &WebRTCPeerConnection::initialize, DEFVAL(Dictionary())); ClassDB::bind_method(D_METHOD("create_data_channel", "label", "options"), &WebRTCPeerConnection::create_data_channel, DEFVAL(Dictionary())); ClassDB::bind_method(D_METHOD("create_offer"), &WebRTCPeerConnection::create_offer); diff --git a/modules/webrtc/webrtc_peer_connection_extension.cpp b/modules/webrtc/webrtc_peer_connection_extension.cpp index 3bc7de217e..85c04b3b19 100644 --- a/modules/webrtc/webrtc_peer_connection_extension.cpp +++ b/modules/webrtc/webrtc_peer_connection_extension.cpp @@ -31,8 +31,6 @@ #include "webrtc_peer_connection_extension.h" void WebRTCPeerConnectionExtension::_bind_methods() { - ClassDB::bind_method(D_METHOD("make_default"), &WebRTCPeerConnectionExtension::make_default); - GDVIRTUAL_BIND(_get_connection_state); GDVIRTUAL_BIND(_initialize, "p_config"); GDVIRTUAL_BIND(_create_data_channel, "p_label", "p_config"); @@ -44,11 +42,6 @@ void WebRTCPeerConnectionExtension::_bind_methods() { GDVIRTUAL_BIND(_close); } -void WebRTCPeerConnectionExtension::make_default() { - ERR_FAIL_COND_MSG(!_get_extension(), vformat("Can't make %s the default without extending it.", get_class())); - WebRTCPeerConnection::set_default_extension(get_class()); -} - WebRTCPeerConnection::ConnectionState WebRTCPeerConnectionExtension::get_connection_state() const { int state; if (GDVIRTUAL_CALL(_get_connection_state, state)) { diff --git a/modules/webrtc/webrtc_peer_connection_extension.h b/modules/webrtc/webrtc_peer_connection_extension.h index 82e32b5602..bde19c173b 100644 --- a/modules/webrtc/webrtc_peer_connection_extension.h +++ b/modules/webrtc/webrtc_peer_connection_extension.h @@ -44,8 +44,6 @@ protected: static void _bind_methods(); public: - void make_default(); - virtual ConnectionState get_connection_state() const override; virtual Error initialize(Dictionary p_config = Dictionary()) override; diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java index 8694bb91e1..ccfb865b1a 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java @@ -186,6 +186,9 @@ public class GodotInputHandler implements InputManager.InputDeviceListener { if (mJoystickIds.indexOfKey(deviceId) >= 0) { final int godotJoyId = mJoystickIds.get(deviceId); Joystick joystick = mJoysticksDevices.get(deviceId); + if (joystick == null) { + return true; + } for (int i = 0; i < joystick.axes.size(); i++) { final int axis = joystick.axes.get(i); diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub index 8d9ba82fd4..4827dc4627 100644 --- a/platform/javascript/SCsub +++ b/platform/javascript/SCsub @@ -37,6 +37,8 @@ for ext in env["JS_EXTERNS"]: build = [] if env["gdnative_enabled"]: build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm"] + if env["threads_enabled"]: + build_targets.append("#bin/godot${PROGSUFFIX}.worker.js") # Reset libraries. The main runtime will only link emscripten libraries, not godot ones. sys_env["LIBS"] = [] # We use IDBFS. Since Emscripten 1.39.1 it needs to be linked explicitly. @@ -58,7 +60,7 @@ if env["gdnative_enabled"]: wasm_env.Append(CCFLAGS=["-s", "SIDE_MODULE=2"]) wasm_env.Append(LINKFLAGS=["-s", "SIDE_MODULE=2"]) wasm = wasm_env.add_program("#bin/godot.side${PROGSUFFIX}.wasm", javascript_files) - build = [sys[0], sys[1], wasm[0]] + build = sys + [wasm[0]] else: build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm"] if env["threads_enabled"]: @@ -87,5 +89,5 @@ wrap_list = [ js_wrapped = env.Textfile("#bin/godot", [env.File(f) for f in wrap_list], TEXTFILESUFFIX="${PROGSUFFIX}.wrapped.js") # Extra will be the thread worker, or the GDNative side, or None -extra = build[2] if len(build) > 2 else None +extra = build[2:] if len(build) > 2 else None env.CreateTemplateZip(js_wrapped, build[1], extra) diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py index 4a9652fc1c..a769260f01 100644 --- a/platform/javascript/detect.py +++ b/platform/javascript/detect.py @@ -185,10 +185,6 @@ def configure(env): if env["javascript_eval"]: env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"]) - if env["threads_enabled"] and env["gdnative_enabled"]: - print("Threads and GDNative support can't be both enabled due to WebAssembly limitations") - sys.exit(255) - # Thread support (via SharedArrayBuffer). if env["threads_enabled"]: env.Append(CPPDEFINES=["PTHREAD_NO_RENAME"]) @@ -201,9 +197,14 @@ def configure(env): env.Append(CPPDEFINES=["NO_THREADS"]) if env["gdnative_enabled"]: - major, minor, patch = get_compiler_version(env) - if major < 2 or (major == 2 and minor == 0 and patch < 10): - print("GDNative support requires emscripten >= 2.0.10, detected: %s.%s.%s" % (major, minor, patch)) + cc_version = get_compiler_version(env) + cc_semver = (int(cc_version["major"]), int(cc_version["minor"]), int(cc_version["patch"])) + if cc_semver < (2, 0, 10): + print("GDNative support requires emscripten >= 2.0.10, detected: %s.%s.%s" % cc_semver) + sys.exit(255) + + if env["threads_enabled"] and cc_semver < (3, 1, 14): + print("Threads and GDNative requires emscripten >= 3.1.14, detected: %s.%s.%s" % cc_semver) sys.exit(255) env.Append(CCFLAGS=["-s", "RELOCATABLE=1"]) env.Append(LINKFLAGS=["-s", "RELOCATABLE=1"]) diff --git a/platform/javascript/emscripten_helpers.py b/platform/javascript/emscripten_helpers.py index 4dad2d5204..3cb1d75e52 100644 --- a/platform/javascript/emscripten_helpers.py +++ b/platform/javascript/emscripten_helpers.py @@ -52,10 +52,10 @@ def create_template_zip(env, js, wasm, extra): ] # GDNative/Threads specific if env["gdnative_enabled"]: - in_files.append(extra) # Runtime + in_files.append(extra.pop()) # Runtime out_files.append(zip_dir.File(binary_name + ".side.wasm")) - elif env["threads_enabled"]: - in_files.append(extra) # Worker + if env["threads_enabled"]: + in_files.append(extra.pop()) # Worker out_files.append(zip_dir.File(binary_name + ".worker.js")) service_worker = "#misc/dist/html/service-worker.js" diff --git a/platform/javascript/export/export_plugin.cpp b/platform/javascript/export/export_plugin.cpp index 128834c90f..901580c140 100644 --- a/platform/javascript/export/export_plugin.cpp +++ b/platform/javascript/export/export_plugin.cpp @@ -215,7 +215,7 @@ Error EditorExportPlatformJavaScript::_build_pwa(const Ref<EditorExportPreset> & cache_files.push_back(name + ".icon.png"); cache_files.push_back(name + ".apple-touch-icon.png"); } - if (mode == EXPORT_MODE_THREADS) { + if (mode & EXPORT_MODE_THREADS) { cache_files.push_back(name + ".worker.js"); cache_files.push_back(name + ".audio.worklet.js"); } @@ -225,7 +225,7 @@ Error EditorExportPlatformJavaScript::_build_pwa(const Ref<EditorExportPreset> & Array opt_cache_files; opt_cache_files.push_back(name + ".wasm"); opt_cache_files.push_back(name + ".pck"); - if (mode == EXPORT_MODE_GDNATIVE) { + if (mode & EXPORT_MODE_GDNATIVE) { opt_cache_files.push_back(name + ".side.wasm"); for (int i = 0; i < p_shared_objects.size(); i++) { opt_cache_files.push_back(p_shared_objects[i].path.get_file()); @@ -317,9 +317,10 @@ void EditorExportPlatformJavaScript::get_preset_features(const Ref<EditorExportP } } ExportMode mode = (ExportMode)(int)p_preset->get("variant/export_type"); - if (mode == EXPORT_MODE_THREADS) { + if (mode & EXPORT_MODE_THREADS) { r_features->push_back("threads"); - } else if (mode == EXPORT_MODE_GDNATIVE) { + } + if (mode & EXPORT_MODE_GDNATIVE) { r_features->push_back("wasm32"); } } diff --git a/platform/javascript/export/export_plugin.h b/platform/javascript/export/export_plugin.h index 2d6cbfde38..1aaec5454d 100644 --- a/platform/javascript/export/export_plugin.h +++ b/platform/javascript/export/export_plugin.h @@ -61,19 +61,16 @@ class EditorExportPlatformJavaScript : public EditorExportPlatform { EXPORT_MODE_NORMAL = 0, EXPORT_MODE_THREADS = 1, EXPORT_MODE_GDNATIVE = 2, + EXPORT_MODE_THREADS_GDNATIVE = 3, }; String _get_template_name(ExportMode p_mode, bool p_debug) const { String name = "webassembly"; - switch (p_mode) { - case EXPORT_MODE_THREADS: - name += "_threads"; - break; - case EXPORT_MODE_GDNATIVE: - name += "_gdnative"; - break; - default: - break; + if (p_mode & EXPORT_MODE_GDNATIVE) { + name += "_gdnative"; + } + if (p_mode & EXPORT_MODE_THREADS) { + name += "_threads"; } if (p_debug) { name += "_debug.zip"; diff --git a/platform/linuxbsd/key_mapping_x11.cpp b/platform/linuxbsd/key_mapping_x11.cpp index afe965e038..047ee74671 100644 --- a/platform/linuxbsd/key_mapping_x11.cpp +++ b/platform/linuxbsd/key_mapping_x11.cpp @@ -135,6 +135,25 @@ static _XTranslatePair _xkeysym_to_keycode[] = { { XK_F14, Key::F14 }, { XK_F15, Key::F15 }, { XK_F16, Key::F16 }, + { XK_F17, Key::F17 }, + { XK_F18, Key::F18 }, + { XK_F19, Key::F19 }, + { XK_F20, Key::F20 }, + { XK_F21, Key::F21 }, + { XK_F22, Key::F22 }, + { XK_F23, Key::F23 }, + { XK_F24, Key::F24 }, + { XK_F25, Key::F25 }, + { XK_F26, Key::F26 }, + { XK_F27, Key::F27 }, + { XK_F28, Key::F28 }, + { XK_F29, Key::F29 }, + { XK_F30, Key::F30 }, + { XK_F31, Key::F31 }, + { XK_F32, Key::F32 }, + { XK_F33, Key::F33 }, + { XK_F34, Key::F34 }, + { XK_F35, Key::F35 }, // media keys { XF86XK_Back, Key::BACK }, @@ -294,6 +313,29 @@ static _TranslatePair _scancode_to_keycode[] = { { Key::SUPER_L, 0x85 }, { Key::SUPER_R, 0x86 }, { Key::MENU, 0x87 }, + { Key::F13, 0xBF }, + { Key::F14, 0xC0 }, + { Key::F15, 0xC1 }, + { Key::F16, 0xC2 }, + { Key::F17, 0xC3 }, + { Key::F18, 0xC4 }, + { Key::F19, 0xC5 }, + { Key::F20, 0xC6 }, + { Key::F21, 0xC7 }, + { Key::F22, 0xC8 }, + { Key::F23, 0xC9 }, + { Key::F24, 0xCA }, + { Key::F25, 0xCB }, + { Key::F26, 0xCC }, + { Key::F27, 0xCD }, + { Key::F28, 0xCE }, + { Key::F29, 0xCF }, + { Key::F30, 0xD0 }, + { Key::F31, 0xD1 }, + { Key::F32, 0xD2 }, + { Key::F33, 0xD3 }, + { Key::F34, 0xD4 }, + { Key::F35, 0xD5 }, { Key::UNKNOWN, 0 } }; diff --git a/platform/osx/key_mapping_osx.mm b/platform/osx/key_mapping_osx.mm index bfec45de58..0bf6bc7d1c 100644 --- a/platform/osx/key_mapping_osx.mm +++ b/platform/osx/key_mapping_osx.mm @@ -130,7 +130,7 @@ static const Key _osx_to_godot_table[128] = { /* 3d */ Key::ALT, /* 3e */ Key::CTRL, /* 3f */ Key::UNKNOWN, /* Function */ - /* 40 */ Key::UNKNOWN, /* F17 */ + /* 40 */ Key::F17, /* 41 */ Key::KP_PERIOD, /* 42 */ Key::UNKNOWN, /* 43 */ Key::KP_MULTIPLY, @@ -145,8 +145,8 @@ static const Key _osx_to_godot_table[128] = { /* 4c */ Key::KP_ENTER, /* 4d */ Key::UNKNOWN, /* 4e */ Key::KP_SUBTRACT, - /* 4f */ Key::UNKNOWN, /* F18 */ - /* 50 */ Key::UNKNOWN, /* F19 */ + /* 4f */ Key::F18, + /* 50 */ Key::F19, /* 51 */ Key::EQUAL, /* KeypadEqual */ /* 52 */ Key::KP_0, /* 53 */ Key::KP_1, @@ -156,7 +156,7 @@ static const Key _osx_to_godot_table[128] = { /* 57 */ Key::KP_5, /* 58 */ Key::KP_6, /* 59 */ Key::KP_7, - /* 5a */ Key::UNKNOWN, /* F20 */ + /* 5a */ Key::F20, /* 5b */ Key::KP_8, /* 5c */ Key::KP_9, /* 5d */ Key::YEN, /* JIS Yen */ @@ -366,7 +366,26 @@ static const _KeyCodeText _native_keycodes[] = { {Key::F13 ,NSF13FunctionKey}, {Key::F14 ,NSF14FunctionKey}, {Key::F15 ,NSF15FunctionKey}, - {Key::F16 ,NSF16FunctionKey}, //* ... NSF35FunctionKey */ + {Key::F16 ,NSF16FunctionKey}, + {Key::F17 ,NSF17FunctionKey}, + {Key::F18 ,NSF18FunctionKey}, + {Key::F19 ,NSF19FunctionKey}, + {Key::F20 ,NSF20FunctionKey}, + {Key::F21 ,NSF21FunctionKey}, + {Key::F22 ,NSF22FunctionKey}, + {Key::F23 ,NSF23FunctionKey}, + {Key::F24 ,NSF24FunctionKey}, + {Key::F25 ,NSF25FunctionKey}, + {Key::F26 ,NSF26FunctionKey}, + {Key::F27 ,NSF27FunctionKey}, + {Key::F28 ,NSF28FunctionKey}, + {Key::F29 ,NSF29FunctionKey}, + {Key::F30 ,NSF30FunctionKey}, + {Key::F31 ,NSF31FunctionKey}, + {Key::F32 ,NSF32FunctionKey}, + {Key::F33 ,NSF33FunctionKey}, + {Key::F34 ,NSF34FunctionKey}, + {Key::F35 ,NSF35FunctionKey}, {Key::MENU ,NSMenuFunctionKey}, {Key::HELP ,NSHelpFunctionKey}, {Key::STOP ,NSStopFunctionKey}, diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp index e32dc0d1a6..2d8d68a575 100644 --- a/platform/windows/key_mapping_windows.cpp +++ b/platform/windows/key_mapping_windows.cpp @@ -179,7 +179,14 @@ static _WinTranslatePair _vk_to_keycode[] = { { Key::F14, VK_F14 }, // (0x7D) { Key::F15, VK_F15 }, // (0x7E) { Key::F16, VK_F16 }, // (0x7F) - // We have no mappings for F17-F24. (0x80-87) + { Key::F17, VK_F17 }, // (0x80) + { Key::F18, VK_F18 }, // (0x81) + { Key::F19, VK_F19 }, // (0x82) + { Key::F20, VK_F20 }, // (0x83) + { Key::F21, VK_F21 }, // (0x84) + { Key::F22, VK_F22 }, // (0x85) + { Key::F23, VK_F23 }, // (0x86) + { Key::F24, VK_F24 }, // (0x87) // 0x88-8F are reserved for UI navigation. { Key::NUMLOCK, VK_NUMLOCK }, // (0x90) { Key::SCROLLLOCK, VK_SCROLL }, // (0x91) @@ -409,6 +416,14 @@ static _WinTranslatePair _scancode_to_keycode[] = { { Key::F14, 0x65 }, { Key::F15, 0x66 }, { Key::F16, 0x67 }, + { Key::F17, 0x68 }, + { Key::F18, 0x69 }, + { Key::F19, 0x6A }, + { Key::F20, 0x6B }, + { Key::F21, 0x6C }, + { Key::F22, 0x6D }, + { Key::F23, 0x6E }, + { Key::F24, 0x76 }, { Key::UNKNOWN, 0 } }; diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index 02d9198e43..dfc1016c84 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -605,7 +605,7 @@ void Area2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "gravity_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_space_override_mode", "get_gravity_space_override_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_is_point", "is_gravity_a_point"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_point_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_point_distance_scale", "get_gravity_point_distance_scale"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_point_center"), "set_gravity_point_center", "get_gravity_point_center"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_point_center", PROPERTY_HINT_NONE, "suffix:px"), "set_gravity_point_center", "get_gravity_point_center"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "gravity_direction"), "set_gravity_direction", "get_gravity_direction"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity", PROPERTY_HINT_RANGE, U"-4096,4096,0.001,or_lesser,or_greater,suffix:px/s\u00B2"), "set_gravity", "get_gravity"); diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index e7f1740f0b..eaab58c4ae 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -30,6 +30,7 @@ #include "audio_stream_player_2d.h" +#include "core/config/project_settings.h" #include "scene/2d/area_2d.h" #include "scene/2d/audio_listener_2d.h" #include "scene/main/window.h" @@ -186,7 +187,14 @@ void AudioStreamPlayer2D::_update_panning() { float multiplier = Math::pow(1.0f - dist / max_distance, attenuation); multiplier *= Math::db2linear(volume_db); //also apply player volume! - float pan = CLAMP((relative_to_listener.x + screen_size.x * 0.5) / screen_size.x, 0.0, 1.0); + float pan = relative_to_listener.x / screen_size.x; + // Don't let the panning effect extend (too far) beyond the screen. + pan = CLAMP(pan, -1, 1); + + // Bake in a constant factor here to allow the project setting defaults for 2d and 3d to be normalized to 1.0. + pan *= panning_strength * cached_global_panning_strength * 0.5f; + + pan = CLAMP(pan + 0.5, 0.0, 1.0); float l = 1.0 - pan; float r = pan; @@ -391,6 +399,15 @@ int AudioStreamPlayer2D::get_max_polyphony() const { return max_polyphony; } +void AudioStreamPlayer2D::set_panning_strength(float p_panning_strength) { + ERR_FAIL_COND_MSG(p_panning_strength < 0, "Panning strength must be a positive number."); + panning_strength = p_panning_strength; +} + +float AudioStreamPlayer2D::get_panning_strength() const { + return panning_strength; +} + void AudioStreamPlayer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer2D::set_stream); ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer2D::get_stream); @@ -432,6 +449,9 @@ void AudioStreamPlayer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_max_polyphony", "max_polyphony"), &AudioStreamPlayer2D::set_max_polyphony); ClassDB::bind_method(D_METHOD("get_max_polyphony"), &AudioStreamPlayer2D::get_max_polyphony); + ClassDB::bind_method(D_METHOD("set_panning_strength", "panning_strength"), &AudioStreamPlayer2D::set_panning_strength); + ClassDB::bind_method(D_METHOD("get_panning_strength"), &AudioStreamPlayer2D::get_panning_strength); + ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer2D::get_stream_playback); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); @@ -443,6 +463,7 @@ void AudioStreamPlayer2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "1,4096,1,or_greater,exp,suffix:px"), "set_max_distance", "get_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "attenuation", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_attenuation", "get_attenuation"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask"); @@ -451,6 +472,7 @@ void AudioStreamPlayer2D::_bind_methods() { AudioStreamPlayer2D::AudioStreamPlayer2D() { AudioServer::get_singleton()->connect("bus_layout_changed", callable_mp(this, &AudioStreamPlayer2D::_bus_layout_changed)); + cached_global_panning_strength = ProjectSettings::get_singleton()->get("audio/general/2d_panning_strength"); } AudioStreamPlayer2D::~AudioStreamPlayer2D() { diff --git a/scene/2d/audio_stream_player_2d.h b/scene/2d/audio_stream_player_2d.h index 73b09e432f..a22782fe44 100644 --- a/scene/2d/audio_stream_player_2d.h +++ b/scene/2d/audio_stream_player_2d.h @@ -81,6 +81,9 @@ private: float max_distance = 2000.0; float attenuation = 1.0; + float panning_strength = 1.0f; + float cached_global_panning_strength = 1.0f; + protected: void _validate_property(PropertyInfo &property) const override; void _notification(int p_what); @@ -123,6 +126,9 @@ public: void set_max_polyphony(int p_max_polyphony); int get_max_polyphony() const; + void set_panning_strength(float p_panning_strength); + float get_panning_strength() const; + Ref<AudioStreamPlayback> get_stream_playback(); AudioStreamPlayer2D(); diff --git a/scene/2d/back_buffer_copy.cpp b/scene/2d/back_buffer_copy.cpp index c411aaf411..aa4ae01fd9 100644 --- a/scene/2d/back_buffer_copy.cpp +++ b/scene/2d/back_buffer_copy.cpp @@ -85,7 +85,7 @@ void BackBufferCopy::_bind_methods() { ClassDB::bind_method(D_METHOD("get_copy_mode"), &BackBufferCopy::get_copy_mode); ADD_PROPERTY(PropertyInfo(Variant::INT, "copy_mode", PROPERTY_HINT_ENUM, "Disabled,Rect,Viewport"), "set_copy_mode", "get_copy_mode"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "rect"), "set_rect", "get_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "rect", PROPERTY_HINT_NONE, "suffix:px"), "set_rect", "get_rect"); BIND_ENUM_CONSTANT(COPY_MODE_DISABLED); BIND_ENUM_CONSTANT(COPY_MODE_RECT); diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index f61dbc071d..2616d1f09e 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -729,24 +729,24 @@ void Camera2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_margin_drawing_enabled", "margin_drawing_enabled"), &Camera2D::set_margin_drawing_enabled); ClassDB::bind_method(D_METHOD("is_margin_drawing_enabled"), &Camera2D::is_margin_drawing_enabled); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset", PROPERTY_HINT_NONE, "suffix:px"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::INT, "anchor_mode", PROPERTY_HINT_ENUM, "Fixed TopLeft,Drag Center"), "set_anchor_mode", "get_anchor_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rotating"), "set_rotating", "is_rotating"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "current"), "set_current", "is_current"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "zoom"), "set_zoom", "get_zoom"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "zoom", PROPERTY_HINT_LINK), "set_zoom", "get_zoom"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "custom_viewport", PROPERTY_HINT_RESOURCE_TYPE, "Viewport", PROPERTY_USAGE_NONE), "set_custom_viewport", "get_custom_viewport"); ADD_PROPERTY(PropertyInfo(Variant::INT, "process_callback", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_process_callback", "get_process_callback"); ADD_GROUP("Limit", "limit_"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_left"), "set_limit", "get_limit", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_top"), "set_limit", "get_limit", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_right"), "set_limit", "get_limit", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_bottom"), "set_limit", "get_limit", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_left", PROPERTY_HINT_NONE, "suffix:px"), "set_limit", "get_limit", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_top", PROPERTY_HINT_NONE, "suffix:px"), "set_limit", "get_limit", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_right", PROPERTY_HINT_NONE, "suffix:px"), "set_limit", "get_limit", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "limit_bottom", PROPERTY_HINT_NONE, "suffix:px"), "set_limit", "get_limit", SIDE_BOTTOM); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "limit_smoothed"), "set_limit_smoothing_enabled", "is_limit_smoothing_enabled"); ADD_GROUP("Smoothing", "smoothing_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smoothing_enabled"), "set_enable_follow_smoothing", "is_follow_smoothing_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "smoothing_speed"), "set_follow_smoothing", "get_follow_smoothing"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "smoothing_speed", PROPERTY_HINT_NONE, "suffix:px/s"), "set_follow_smoothing", "get_follow_smoothing"); ADD_GROUP("Drag", "drag_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "drag_horizontal_enabled"), "set_drag_horizontal_enabled", "is_drag_horizontal_enabled"); diff --git a/scene/2d/canvas_group.cpp b/scene/2d/canvas_group.cpp index 37a858330c..bbf3fff0ad 100644 --- a/scene/2d/canvas_group.cpp +++ b/scene/2d/canvas_group.cpp @@ -75,8 +75,8 @@ void CanvasGroup::_bind_methods() { ClassDB::bind_method(D_METHOD("is_using_mipmaps"), &CanvasGroup::is_using_mipmaps); ADD_GROUP("Tweaks", ""); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fit_margin", PROPERTY_HINT_RANGE, "0,1024,1.0,or_greater"), "set_fit_margin", "get_fit_margin"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "clear_margin", PROPERTY_HINT_RANGE, "0,1024,1.0,or_greater"), "set_clear_margin", "get_clear_margin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fit_margin", PROPERTY_HINT_RANGE, "0,1024,1.0,or_greater,suffix:px"), "set_fit_margin", "get_fit_margin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "clear_margin", PROPERTY_HINT_RANGE, "0,1024,1.0,or_greater,suffix:px"), "set_clear_margin", "get_clear_margin"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_mipmaps"), "set_use_mipmaps", "is_using_mipmaps"); } diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index 20840f5aea..8df29851e5 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -315,7 +315,7 @@ void CollisionPolygon2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "polygon"), "set_polygon", "get_polygon"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "one_way_collision"), "set_one_way_collision", "is_one_way_collision_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "one_way_collision_margin", PROPERTY_HINT_RANGE, "0,128,0.1"), "set_one_way_collision_margin", "get_one_way_collision_margin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "one_way_collision_margin", PROPERTY_HINT_RANGE, "0,128,0.1,suffix:px"), "set_one_way_collision_margin", "get_one_way_collision_margin"); BIND_ENUM_CONSTANT(BUILD_SOLIDS); BIND_ENUM_CONSTANT(BUILD_SEGMENTS); diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index 07b58e9721..913003c7e6 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -1362,9 +1362,9 @@ void CPUParticles2D::_bind_methods() { ClassDB::bind_method(D_METHOD("convert_from_particles", "particles"), &CPUParticles2D::convert_from_particles); ADD_GROUP("Emission Shape", "emission_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Sphere Surface,Box,Points,Directed Points", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Sphere Surface,Rectangle,Points,Directed Points", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "emission_sphere_radius", PROPERTY_HINT_RANGE, "0.01,128,0.01,suffix:px"), "set_emission_sphere_radius", "get_emission_sphere_radius"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "emission_rect_extents"), "set_emission_rect_extents", "get_emission_rect_extents"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "emission_rect_extents", PROPERTY_HINT_NONE, "suffix:px"), "set_emission_rect_extents", "get_emission_rect_extents"); ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "emission_points"), "set_emission_points", "get_emission_points"); ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "emission_normals"), "set_emission_normals", "get_emission_normals"); ADD_PROPERTY(PropertyInfo(Variant::PACKED_COLOR_ARRAY, "emission_colors"), "set_emission_colors", "get_emission_colors"); diff --git a/scene/2d/gpu_particles_2d.cpp b/scene/2d/gpu_particles_2d.cpp index d1b5f16e08..6edd75e62a 100644 --- a/scene/2d/gpu_particles_2d.cpp +++ b/scene/2d/gpu_particles_2d.cpp @@ -617,12 +617,12 @@ void GPUParticles2D::_bind_methods() { ADD_GROUP("Collision", "collision_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_base_size", PROPERTY_HINT_RANGE, "0,128,0.01,or_greater,suffix:px"), "set_collision_base_size", "get_collision_base_size"); ADD_GROUP("Drawing", ""); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "visibility_rect"), "set_visibility_rect", "get_visibility_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "visibility_rect", PROPERTY_HINT_NONE, "suffix:px"), "set_visibility_rect", "get_visibility_rect"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "local_coords"), "set_use_local_coordinates", "get_use_local_coordinates"); ADD_PROPERTY(PropertyInfo(Variant::INT, "draw_order", PROPERTY_HINT_ENUM, "Index,Lifetime,Reverse Lifetime"), "set_draw_order", "get_draw_order"); ADD_GROUP("Trails", "trail_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "trail_enabled"), "set_trail_enabled", "is_trail_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "trail_length_secs", PROPERTY_HINT_RANGE, "0.01,10,0.01"), "set_trail_length", "get_trail_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "trail_length_secs", PROPERTY_HINT_RANGE, "0.01,10,0.01,suffix:s"), "set_trail_length", "get_trail_length"); ADD_PROPERTY(PropertyInfo(Variant::INT, "trail_sections", PROPERTY_HINT_RANGE, "2,128,1"), "set_trail_sections", "get_trail_sections"); ADD_PROPERTY(PropertyInfo(Variant::INT, "trail_section_subdivisions", PROPERTY_HINT_RANGE, "1,1024,1"), "set_trail_section_subdivisions", "get_trail_section_subdivisions"); ADD_GROUP("Process Material", "process_"); diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp index 28d9b284e6..0481a58431 100644 --- a/scene/2d/light_2d.cpp +++ b/scene/2d/light_2d.cpp @@ -30,6 +30,11 @@ #include "light_2d.h" +void Light2D::owner_changed_notify() { + // For cases where owner changes _after_ entering tree (as example, editor editing). + _update_light_visibility(); +} + void Light2D::_update_light_visibility() { if (!is_inside_tree()) { return; diff --git a/scene/2d/light_2d.h b/scene/2d/light_2d.h index f7b1f420e3..a84b6516c0 100644 --- a/scene/2d/light_2d.h +++ b/scene/2d/light_2d.h @@ -73,6 +73,8 @@ private: void _update_light_visibility(); + virtual void owner_changed_notify() override; + protected: _FORCE_INLINE_ RID _get_light() const { return canvas_light; } void _notification(int p_what); diff --git a/scene/2d/navigation_agent_2d.cpp b/scene/2d/navigation_agent_2d.cpp index 80d60dca17..5a451a6dab 100644 --- a/scene/2d/navigation_agent_2d.cpp +++ b/scene/2d/navigation_agent_2d.cpp @@ -40,6 +40,9 @@ void NavigationAgent2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_avoidance_enabled", "enabled"), &NavigationAgent2D::set_avoidance_enabled); ClassDB::bind_method(D_METHOD("get_avoidance_enabled"), &NavigationAgent2D::get_avoidance_enabled); + ClassDB::bind_method(D_METHOD("set_path_desired_distance", "desired_distance"), &NavigationAgent2D::set_path_desired_distance); + ClassDB::bind_method(D_METHOD("get_path_desired_distance"), &NavigationAgent2D::get_path_desired_distance); + ClassDB::bind_method(D_METHOD("set_target_desired_distance", "desired_distance"), &NavigationAgent2D::set_target_desired_distance); ClassDB::bind_method(D_METHOD("get_target_desired_distance"), &NavigationAgent2D::get_target_desired_distance); @@ -61,8 +64,14 @@ void NavigationAgent2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_path_max_distance", "max_speed"), &NavigationAgent2D::set_path_max_distance); ClassDB::bind_method(D_METHOD("get_path_max_distance"), &NavigationAgent2D::get_path_max_distance); - ClassDB::bind_method(D_METHOD("set_navigable_layers", "navigable_layers"), &NavigationAgent2D::set_navigable_layers); - ClassDB::bind_method(D_METHOD("get_navigable_layers"), &NavigationAgent2D::get_navigable_layers); + ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationAgent2D::set_navigation_layers); + ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationAgent2D::get_navigation_layers); + + ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationAgent2D::set_navigation_layer_value); + ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationAgent2D::get_navigation_layer_value); + + ClassDB::bind_method(D_METHOD("set_navigation_map", "navigation_map"), &NavigationAgent2D::set_navigation_map); + ClassDB::bind_method(D_METHOD("get_navigation_map"), &NavigationAgent2D::get_navigation_map); ClassDB::bind_method(D_METHOD("set_target_location", "location"), &NavigationAgent2D::set_target_location); ClassDB::bind_method(D_METHOD("get_target_location"), &NavigationAgent2D::get_target_location); @@ -78,6 +87,7 @@ void NavigationAgent2D::_bind_methods() { ClassDB::bind_method(D_METHOD("_avoidance_done", "new_velocity"), &NavigationAgent2D::_avoidance_done); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:px"), "set_path_desired_distance", "get_path_desired_distance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:px"), "set_target_desired_distance", "get_target_desired_distance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,500,0.01,suffix:px"), "set_radius", "get_radius"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "neighbor_dist", PROPERTY_HINT_RANGE, "0.1,100000,0.01,suffix:px"), "set_neighbor_dist", "get_neighbor_dist"); @@ -86,7 +96,7 @@ void NavigationAgent2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_speed", PROPERTY_HINT_RANGE, "0.1,100000,0.01,suffix:px/s"), "set_max_speed", "get_max_speed"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_max_distance", PROPERTY_HINT_RANGE, "10,100,1,suffix:px"), "set_path_max_distance", "get_path_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "avoidance_enabled"), "set_avoidance_enabled", "get_avoidance_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "navigable_layers", PROPERTY_HINT_LAYERS_2D_NAVIGATION), "set_navigable_layers", "get_navigable_layers"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "navigation_layers", PROPERTY_HINT_LAYERS_2D_NAVIGATION), "set_navigation_layers", "get_navigation_layers"); ADD_SIGNAL(MethodInfo("path_changed")); ADD_SIGNAL(MethodInfo("target_reached")); @@ -191,7 +201,11 @@ void NavigationAgent2D::set_agent_parent(Node *p_agent_parent) { if (Object::cast_to<Node2D>(p_agent_parent) != nullptr) { // place agent on navigation map first or else the RVO agent callback creation fails silently later agent_parent = Object::cast_to<Node2D>(p_agent_parent); - NavigationServer2D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_2d()->get_navigation_map()); + if (map_override.is_valid()) { + NavigationServer2D::get_singleton()->agent_set_map(get_rid(), map_override); + } else { + NavigationServer2D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_2d()->get_navigation_map()); + } // create new avoidance callback if enabled set_avoidance_enabled(avoidance_enabled); } else { @@ -200,16 +214,53 @@ void NavigationAgent2D::set_agent_parent(Node *p_agent_parent) { } } -void NavigationAgent2D::set_navigable_layers(uint32_t p_layers) { - bool layers_changed = navigable_layers != p_layers; - navigable_layers = p_layers; - if (layers_changed) { +void NavigationAgent2D::set_navigation_layers(uint32_t p_navigation_layers) { + bool navigation_layers_changed = navigation_layers != p_navigation_layers; + navigation_layers = p_navigation_layers; + if (navigation_layers_changed) { _request_repath(); } } -uint32_t NavigationAgent2D::get_navigable_layers() const { - return navigable_layers; +uint32_t NavigationAgent2D::get_navigation_layers() const { + return navigation_layers; +} + +void NavigationAgent2D::set_navigation_layer_value(int p_layer_number, bool p_value) { + ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive."); + uint32_t _navigation_layers = get_navigation_layers(); + if (p_value) { + _navigation_layers |= 1 << (p_layer_number - 1); + } else { + _navigation_layers &= ~(1 << (p_layer_number - 1)); + } + set_navigation_layers(_navigation_layers); +} + +bool NavigationAgent2D::get_navigation_layer_value(int p_layer_number) const { + ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive."); + return get_navigation_layers() & (1 << (p_layer_number - 1)); +} + +void NavigationAgent2D::set_navigation_map(RID p_navigation_map) { + map_override = p_navigation_map; + NavigationServer2D::get_singleton()->agent_set_map(agent, map_override); + _request_repath(); +} + +RID NavigationAgent2D::get_navigation_map() const { + if (map_override.is_valid()) { + return map_override; + } else if (agent_parent != nullptr) { + return agent_parent->get_world_2d()->get_navigation_map(); + } + return RID(); +} + +void NavigationAgent2D::set_path_desired_distance(real_t p_dd) { + path_desired_distance = p_dd; } void NavigationAgent2D::set_target_desired_distance(real_t p_dd) { @@ -360,7 +411,11 @@ void NavigationAgent2D::update_navigation() { } if (reload_path) { - navigation_path = NavigationServer2D::get_singleton()->map_get_path(agent_parent->get_world_2d()->get_navigation_map(), o, target_location, true, navigable_layers); + if (map_override.is_valid()) { + navigation_path = NavigationServer2D::get_singleton()->map_get_path(map_override, o, target_location, true, navigation_layers); + } else { + navigation_path = NavigationServer2D::get_singleton()->map_get_path(agent_parent->get_world_2d()->get_navigation_map(), o, target_location, true, navigation_layers); + } navigation_finished = false; nav_path_index = 0; emit_signal(SNAME("path_changed")); @@ -373,7 +428,7 @@ void NavigationAgent2D::update_navigation() { // Check if we can advance the navigation path if (navigation_finished == false) { // Advances to the next far away location. - while (o.distance_to(navigation_path[nav_path_index]) < target_desired_distance) { + while (o.distance_to(navigation_path[nav_path_index]) < path_desired_distance) { nav_path_index += 1; if (nav_path_index == navigation_path.size()) { _check_distance_to_target(); diff --git a/scene/2d/navigation_agent_2d.h b/scene/2d/navigation_agent_2d.h index c9983119d0..032a15cad2 100644 --- a/scene/2d/navigation_agent_2d.h +++ b/scene/2d/navigation_agent_2d.h @@ -42,10 +42,12 @@ class NavigationAgent2D : public Node { RID agent; RID map_before_pause; + RID map_override; bool avoidance_enabled = false; - uint32_t navigable_layers = 1; + uint32_t navigation_layers = 1; + real_t path_desired_distance = 1.0; real_t target_desired_distance = 1.0; real_t radius = 0.0; real_t neighbor_dist = 0.0; @@ -84,8 +86,19 @@ public: void set_agent_parent(Node *p_agent_parent); - void set_navigable_layers(uint32_t p_layers); - uint32_t get_navigable_layers() const; + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; + + void set_navigation_layer_value(int p_layer_number, bool p_value); + bool get_navigation_layer_value(int p_layer_number) const; + + void set_navigation_map(RID p_navigation_map); + RID get_navigation_map() const; + + void set_path_desired_distance(real_t p_dd); + real_t get_path_desired_distance() const { + return path_desired_distance; + } void set_target_desired_distance(real_t p_dd); real_t get_target_desired_distance() const { diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp index 6f3222f27e..6e8fd891cb 100644 --- a/scene/2d/navigation_region_2d.cpp +++ b/scene/2d/navigation_region_2d.cpp @@ -380,12 +380,30 @@ bool NavigationRegion2D::is_enabled() const { return enabled; } -void NavigationRegion2D::set_layers(uint32_t p_layers) { - NavigationServer2D::get_singleton()->region_set_layers(region, p_layers); +void NavigationRegion2D::set_navigation_layers(uint32_t p_navigation_layers) { + NavigationServer2D::get_singleton()->region_set_navigation_layers(region, p_navigation_layers); } -uint32_t NavigationRegion2D::get_layers() const { - return NavigationServer2D::get_singleton()->region_get_layers(region); +uint32_t NavigationRegion2D::get_navigation_layers() const { + return NavigationServer2D::get_singleton()->region_get_navigation_layers(region); +} + +void NavigationRegion2D::set_navigation_layer_value(int p_layer_number, bool p_value) { + ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive."); + uint32_t _navigation_layers = get_navigation_layers(); + if (p_value) { + _navigation_layers |= 1 << (p_layer_number - 1); + } else { + _navigation_layers &= ~(1 << (p_layer_number - 1)); + } + set_navigation_layers(_navigation_layers); +} + +bool NavigationRegion2D::get_navigation_layer_value(int p_layer_number) const { + ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive."); + return get_navigation_layers() & (1 << (p_layer_number - 1)); } void NavigationRegion2D::set_enter_cost(real_t p_enter_cost) { @@ -559,8 +577,11 @@ void NavigationRegion2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &NavigationRegion2D::set_enabled); ClassDB::bind_method(D_METHOD("is_enabled"), &NavigationRegion2D::is_enabled); - ClassDB::bind_method(D_METHOD("set_layers", "layers"), &NavigationRegion2D::set_layers); - ClassDB::bind_method(D_METHOD("get_layers"), &NavigationRegion2D::get_layers); + ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationRegion2D::set_navigation_layers); + ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationRegion2D::get_navigation_layers); + + ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationRegion2D::set_navigation_layer_value); + ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationRegion2D::get_navigation_layer_value); ClassDB::bind_method(D_METHOD("get_region_rid"), &NavigationRegion2D::get_region_rid); @@ -574,7 +595,7 @@ void NavigationRegion2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "navpoly", PROPERTY_HINT_RESOURCE_TYPE, "NavigationPolygon"), "set_navigation_polygon", "get_navigation_polygon"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "layers", PROPERTY_HINT_LAYERS_2D_NAVIGATION), "set_layers", "get_layers"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "navigation_layers", PROPERTY_HINT_LAYERS_2D_NAVIGATION), "set_navigation_layers", "get_navigation_layers"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "enter_cost"), "set_enter_cost", "get_enter_cost"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "travel_cost"), "set_travel_cost", "get_travel_cost"); } diff --git a/scene/2d/navigation_region_2d.h b/scene/2d/navigation_region_2d.h index 31574749f7..3c9df91fe3 100644 --- a/scene/2d/navigation_region_2d.h +++ b/scene/2d/navigation_region_2d.h @@ -117,8 +117,11 @@ public: void set_enabled(bool p_enabled); bool is_enabled() const; - void set_layers(uint32_t p_layers); - uint32_t get_layers() const; + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; + + void set_navigation_layer_value(int p_layer_number, bool p_value); + bool get_navigation_layer_value(int p_layer_number) const; RID get_region_rid() const; diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 6fa18d393e..b2b848d380 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -439,7 +439,7 @@ void Node2D::_bind_methods() { ADD_GROUP("Transform", ""); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_lesser,or_greater,noslider,suffix:px"), "set_position", "get_position"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale", PROPERTY_HINT_LINK), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew", PROPERTY_HINT_RANGE, "-89.9,89.9,0.1,radians"), "set_skew", "get_skew"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "suffix:px", PROPERTY_USAGE_NONE), "set_transform", "get_transform"); diff --git a/scene/2d/parallax_background.cpp b/scene/2d/parallax_background.cpp index 506761d959..bd5a01f5a4 100644 --- a/scene/2d/parallax_background.cpp +++ b/scene/2d/parallax_background.cpp @@ -179,7 +179,7 @@ void ParallaxBackground::_bind_methods() { ADD_GROUP("Scroll", "scroll_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_scroll_offset", "get_scroll_offset"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_base_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_scroll_base_offset", "get_scroll_base_offset"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_base_scale"), "set_scroll_base_scale", "get_scroll_base_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_base_scale", PROPERTY_HINT_LINK), "set_scroll_base_scale", "get_scroll_base_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_limit_begin", PROPERTY_HINT_NONE, "suffix:px"), "set_limit_begin", "get_limit_begin"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_limit_end", PROPERTY_HINT_NONE, "suffix:px"), "set_limit_end", "get_limit_end"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_ignore_camera_zoom"), "set_ignore_camera_zoom", "is_ignore_camera_zoom"); diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp index d716f01a82..f0aad1b8a4 100644 --- a/scene/2d/parallax_layer.cpp +++ b/scene/2d/parallax_layer.cpp @@ -158,7 +158,7 @@ void ParallaxLayer::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mirroring"), &ParallaxLayer::get_mirroring); ADD_GROUP("Motion", "motion_"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_scale"), "set_motion_scale", "get_motion_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_scale", PROPERTY_HINT_LINK), "set_motion_scale", "get_motion_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_motion_offset", "get_motion_offset"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_mirroring"), "set_mirroring", "get_mirroring"); } diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index e7ac6432c6..e60a5ed034 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -222,8 +222,8 @@ void StaticBody2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_physics_material_override"), &StaticBody2D::get_physics_material_override); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "get_physics_material_override"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "constant_linear_velocity"), "set_constant_linear_velocity", "get_constant_linear_velocity"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "constant_angular_velocity"), "set_constant_angular_velocity", "get_constant_angular_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "constant_linear_velocity", PROPERTY_HINT_NONE, "suffix:px/s"), "set_constant_linear_velocity", "get_constant_linear_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "constant_angular_velocity", PROPERTY_HINT_NONE, U"radians,suffix:\u00B0/s"), "set_constant_angular_velocity", "get_constant_angular_velocity"); } StaticBody2D::StaticBody2D(PhysicsServer2D::BodyMode p_mode) : @@ -1761,7 +1761,7 @@ void CharacterBody2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "floor_constant_speed"), "set_floor_constant_speed_enabled", "is_floor_constant_speed_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "floor_block_on_wall"), "set_floor_block_on_wall_enabled", "is_floor_block_on_wall_enabled"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_max_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians"), "set_floor_max_angle", "get_floor_max_angle"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,32,0.1,or_greater"), "set_floor_snap_length", "get_floor_snap_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,32,0.1,or_greater,suffix:px"), "set_floor_snap_length", "get_floor_snap_length"); ADD_GROUP("Moving Platform", "moving_platform"); ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_apply_velocity_on_leave", PROPERTY_HINT_ENUM, "Always,Upward Only,Never", PROPERTY_USAGE_DEFAULT), "set_moving_platform_apply_velocity_on_leave", "get_moving_platform_apply_velocity_on_leave"); ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_floor_layers", "get_moving_platform_floor_layers"); diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp index 4752d3148b..ba62941d3a 100644 --- a/scene/2d/polygon_2d.cpp +++ b/scene/2d/polygon_2d.cpp @@ -635,18 +635,19 @@ void Polygon2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased"), "set_antialiased", "get_antialiased"); - ADD_GROUP("Texture2D", ""); + + ADD_GROUP("Texture", "texture_"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_texture", "get_texture"); - ADD_GROUP("Texture2D", "texture_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_texture_offset", "get_texture_offset"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_scale"), "set_texture_scale", "get_texture_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_scale", PROPERTY_HINT_LINK), "set_texture_scale", "get_texture_scale"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "texture_rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_texture_rotation", "get_texture_rotation"); + ADD_GROUP("Skeleton", ""); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton2D"), "set_skeleton", "get_skeleton"); ADD_GROUP("Invert", "invert_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "invert_enable"), "set_invert", "get_invert"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "invert_border", PROPERTY_HINT_RANGE, "0.1,16384,0.1"), "set_invert_border", "get_invert_border"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "invert_border", PROPERTY_HINT_RANGE, "0.1,16384,0.1,suffix:px"), "set_invert_border", "get_invert_border"); ADD_GROUP("Data", ""); ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "polygon"), "set_polygon", "get_polygon"); diff --git a/scene/2d/shape_cast_2d.cpp b/scene/2d/shape_cast_2d.cpp index a2f4b16ed3..ae810156a2 100644 --- a/scene/2d/shape_cast_2d.cpp +++ b/scene/2d/shape_cast_2d.cpp @@ -444,8 +444,8 @@ void ShapeCast2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "exclude_parent"), "set_exclude_parent_body", "get_exclude_parent_body"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "target_position"), "set_target_position", "get_target_position"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01"), "set_margin", "get_margin"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "target_position", PROPERTY_HINT_NONE, "suffix:px"), "set_target_position", "get_target_position"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "margin", PROPERTY_HINT_RANGE, "0,100,0.01,suffix:px"), "set_margin", "get_margin"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_results"), "set_max_results", "get_max_results"); ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_collision_mask", "get_collision_mask"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "collision_result", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "", "_get_collision_result"); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index c4b923ff34..9c4b0feea2 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -36,43 +36,34 @@ HashMap<Vector2i, TileSet::CellNeighbor> TileMap::TerrainConstraint::get_overlapping_coords_and_peering_bits() const { HashMap<Vector2i, TileSet::CellNeighbor> output; + + ERR_FAIL_COND_V(is_center_bit(), output); + Ref<TileSet> tile_set = tile_map->get_tileset(); ERR_FAIL_COND_V(!tile_set.is_valid(), output); TileSet::TileShape shape = tile_set->get_tile_shape(); if (shape == TileSet::TILE_SHAPE_SQUARE) { switch (bit) { - case 0: + case 1: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_RIGHT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_LEFT_SIDE; break; - case 1: + case 2: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER; break; - case 2: + case 3: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_SIDE; break; - case 3: - output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER)] = TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_LEFT_SIDE)] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER; - break; default: ERR_FAIL_V(output); } } else if (shape == TileSet::TILE_SHAPE_ISOMETRIC) { switch (bit) { - case 0: - output[base_cell_coords] = TileSet::CELL_NEIGHBOR_RIGHT_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_BOTTOM_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_RIGHT_CORNER)] = TileSet::CELL_NEIGHBOR_LEFT_CORNER; - output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_CORNER; - break; case 1: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE; @@ -95,25 +86,25 @@ HashMap<Vector2i, TileSet::CellNeighbor> TileMap::TerrainConstraint::get_overlap TileSet::TileOffsetAxis offset_axis = tile_set->get_tile_offset_axis(); if (offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { switch (bit) { - case 0: + case 1: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_RIGHT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_LEFT_SIDE; break; - case 1: + case 2: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_CORNER; break; - case 2: + case 3: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE; break; - case 3: + case 4: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER; break; - case 4: + case 5: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE; break; @@ -122,25 +113,25 @@ HashMap<Vector2i, TileSet::CellNeighbor> TileMap::TerrainConstraint::get_overlap } } else { switch (bit) { - case 0: + case 1: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_RIGHT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER; break; - case 1: + case 2: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE; break; - case 2: + case 3: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE)] = TileSet::CELL_NEIGHBOR_LEFT_CORNER; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER; break; - case 3: + case 4: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_SIDE; break; - case 4: + case 5: output[base_cell_coords] = TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE; output[tile_map->get_neighbor_cell(base_cell_coords, TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE)] = TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE; break; @@ -152,6 +143,17 @@ HashMap<Vector2i, TileSet::CellNeighbor> TileMap::TerrainConstraint::get_overlap return output; } +TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const Vector2i &p_position, int p_terrain) { + tile_map = p_tile_map; + + Ref<TileSet> tile_set = tile_map->get_tileset(); + ERR_FAIL_COND(!tile_set.is_valid()); + + bit = 0; + base_cell_coords = p_position; + terrain = p_terrain; +} + TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const Vector2i &p_position, const TileSet::CellNeighbor &p_bit, int p_terrain) { // The way we build the constraint make it easy to detect conflicting constraints. tile_map = p_tile_map; @@ -163,35 +165,35 @@ TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const V if (shape == TileSet::TILE_SHAPE_SQUARE) { switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_LEFT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER); break; case TileSet::CELL_NEIGHBOR_TOP_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_SIDE); break; default: @@ -201,35 +203,35 @@ TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const V } else if (shape == TileSet::TILE_SHAPE_ISOMETRIC) { switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE); break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_LEFT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_CORNER); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE); break; default: @@ -242,51 +244,51 @@ TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const V if (offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_CORNER: - bit = 3; + bit = 4; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE: - bit = 4; + bit = 5; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_LEFT_SIDE: - bit = 0; + bit = 1; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER: - bit = 3; + bit = 4; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE: - bit = 2; + bit = 3; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_CORNER: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE: - bit = 4; + bit = 5; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER: - bit = 3; + bit = 4; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE); break; default: @@ -296,51 +298,51 @@ TileMap::TerrainConstraint::TerrainConstraint(const TileMap *p_tile_map, const V } else { switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_CORNER: - bit = 0; + bit = 1; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: - bit = 1; + bit = 2; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER: - bit = 2; + bit = 3; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_SIDE: - bit = 3; + bit = 4; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_CORNER: - bit = 0; + bit = 1; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_BOTTOM_LEFT_SIDE: - bit = 4; + bit = 5; base_cell_coords = p_position; break; case TileSet::CELL_NEIGHBOR_LEFT_CORNER: - bit = 2; + bit = 3; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE: - bit = 1; + bit = 2; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_LEFT_CORNER: - bit = 0; + bit = 1; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_LEFT_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_SIDE: - bit = 3; + bit = 4; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_CORNER: - bit = 2; + bit = 3; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_SIDE); break; case TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE: - bit = 4; + bit = 5; base_cell_coords = p_tile_map->get_neighbor_cell(p_position, TileSet::CELL_NEIGHBOR_TOP_RIGHT_SIDE); break; default: @@ -1088,7 +1090,7 @@ void TileMap::_rendering_update_dirty_quadrants(SelfList<TileMapQuadrant>::List q.occluders.clear(); // Those allow to group cell per material or z-index. - Ref<ShaderMaterial> prev_material; + Ref<Material> prev_material; int prev_z_index = 0; RID prev_canvas_item; @@ -1127,7 +1129,7 @@ void TileMap::_rendering_update_dirty_quadrants(SelfList<TileMapQuadrant>::List tile_data = atlas_source->get_tile_data(c.get_atlas_coords(), c.alternative_tile); } - Ref<ShaderMaterial> mat = tile_data->get_material(); + Ref<Material> mat = tile_data->get_material(); int z_index = tile_data->get_z_index(); // Quandrant pos. @@ -2149,37 +2151,75 @@ void TileMap::set_pattern(int p_layer, Vector2i p_position, const Ref<TileMapPat } } -RBSet<TileSet::TerrainsPattern> TileMap::_get_valid_terrains_patterns_for_constraints(int p_terrain_set, const Vector2i &p_position, RBSet<TerrainConstraint> p_constraints) { +TileSet::TerrainsPattern TileMap::_get_best_terrain_pattern_for_constraints(int p_terrain_set, const Vector2i &p_position, RBSet<TerrainConstraint> p_constraints) { if (!tile_set.is_valid()) { - return RBSet<TileSet::TerrainsPattern>(); + return TileSet::TerrainsPattern(); } // Returns all tiles compatible with the given constraints. - RBSet<TileSet::TerrainsPattern> compatible_terrain_tile_patterns; - for (TileSet::TerrainsPattern &terrain_pattern : tile_set->get_terrains_pattern_set(p_terrain_set)) { - int valid = true; + RBMap<TileSet::TerrainsPattern, int> terrain_pattern_score; + RBSet<TileSet::TerrainsPattern> pattern_set = tile_set->get_terrains_pattern_set(p_terrain_set); + ERR_FAIL_COND_V(pattern_set.is_empty(), TileSet::TerrainsPattern()); + for (TileSet::TerrainsPattern &terrain_pattern : pattern_set) { + int score = 0; + + // Check the center bit constraint + TerrainConstraint terrain_constraint = TerrainConstraint(this, p_position, terrain_pattern.get_terrain()); + RBSet<TerrainConstraint>::Element *in_set_constraint_element = p_constraints.find(terrain_constraint); + if (in_set_constraint_element && in_set_constraint_element->get().get_terrain() != terrain_constraint.get_terrain()) { + score += in_set_constraint_element->get().get_priority(); + } + + // Check the surrounding bits for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, bit)) { + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { // Check if the bit is compatible with the constraints. - TerrainConstraint terrain_bit_constraint = TerrainConstraint(this, p_position, bit, terrain_pattern.get_terrain(bit)); - RBSet<TerrainConstraint>::Element *in_set_constraint_element = p_constraints.find(terrain_bit_constraint); + TerrainConstraint terrain_bit_constraint = TerrainConstraint(this, p_position, bit, terrain_pattern.get_terrain_peering_bit(bit)); + in_set_constraint_element = p_constraints.find(terrain_bit_constraint); if (in_set_constraint_element && in_set_constraint_element->get().get_terrain() != terrain_bit_constraint.get_terrain()) { - valid = false; - break; + score += in_set_constraint_element->get().get_priority(); } } } - if (valid) { - compatible_terrain_tile_patterns.insert(terrain_pattern); + terrain_pattern_score[terrain_pattern] = score; + } + + // Compute the minimum score + TileSet::TerrainsPattern min_score_pattern; + int min_score = INT32_MAX; + for (KeyValue<TileSet::TerrainsPattern, int> E : terrain_pattern_score) { + if (E.value < min_score) { + min_score_pattern = E.key; + min_score = E.value; } } - return compatible_terrain_tile_patterns; + return min_score_pattern; } -RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_removed_cells_list(int p_layer, const RBSet<Vector2i> &p_to_replace, int p_terrain_set, bool p_ignore_empty_terrains) const { +RBSet<TileMap::TerrainConstraint> TileMap::_get_terrain_constraints_from_added_pattern(Vector2i p_position, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const { + if (!tile_set.is_valid()) { + return RBSet<TerrainConstraint>(); + } + + // Compute the constraints needed from the surrounding tiles. + RBSet<TerrainConstraint> output; + output.insert(TerrainConstraint(this, p_position, p_terrains_pattern.get_terrain())); + + for (uint32_t i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { + TileSet::CellNeighbor side = TileSet::CellNeighbor(i); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, side)) { + TerrainConstraint c = TerrainConstraint(this, p_position, side, p_terrains_pattern.get_terrain_peering_bit(side)); + output.insert(c); + } + } + + return output; +} + +RBSet<TileMap::TerrainConstraint> TileMap::_get_terrain_constraints_from_cells_list(int p_layer, const RBSet<Vector2i> &p_cell_list, int p_terrain_set, bool p_ignore_empty_terrains) const { if (!tile_set.is_valid()) { return RBSet<TerrainConstraint>(); } @@ -2187,12 +2227,12 @@ RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_removed_ ERR_FAIL_INDEX_V(p_terrain_set, tile_set->get_terrain_sets_count(), RBSet<TerrainConstraint>()); ERR_FAIL_INDEX_V(p_layer, (int)layers.size(), RBSet<TerrainConstraint>()); - // Build a set of dummy constraints get the constrained points. + // Build a set of dummy constraints to get the constrained points. RBSet<TerrainConstraint> dummy_constraints; - for (const Vector2i &E : p_to_replace) { + for (const Vector2i &E : p_cell_list) { for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { // Iterates over sides. TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, bit)) { + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { dummy_constraints.insert(TerrainConstraint(this, E, bit, -1)); } } @@ -2200,35 +2240,31 @@ RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_removed_ // For each constrained point, we get all overlapping tiles, and select the most adequate terrain for it. RBSet<TerrainConstraint> constraints; - for (const TerrainConstraint &E : dummy_constraints) { - TerrainConstraint c = E; - + for (const TerrainConstraint &E_constraint : dummy_constraints) { HashMap<int, int> terrain_count; // Count the number of occurrences per terrain. - HashMap<Vector2i, TileSet::CellNeighbor> overlapping_terrain_bits = c.get_overlapping_coords_and_peering_bits(); + HashMap<Vector2i, TileSet::CellNeighbor> overlapping_terrain_bits = E_constraint.get_overlapping_coords_and_peering_bits(); for (const KeyValue<Vector2i, TileSet::CellNeighbor> &E_overlapping : overlapping_terrain_bits) { - if (!p_to_replace.has(E_overlapping.key)) { - TileData *neighbor_tile_data = nullptr; - TileMapCell neighbor_cell = get_cell(p_layer, E_overlapping.key); - if (neighbor_cell.source_id != TileSet::INVALID_SOURCE) { - Ref<TileSetSource> source = tile_set->get_source(neighbor_cell.source_id); - Ref<TileSetAtlasSource> atlas_source = source; - if (atlas_source.is_valid()) { - TileData *tile_data = atlas_source->get_tile_data(neighbor_cell.get_atlas_coords(), neighbor_cell.alternative_tile); - if (tile_data && tile_data->get_terrain_set() == p_terrain_set) { - neighbor_tile_data = tile_data; - } + TileData *neighbor_tile_data = nullptr; + TileMapCell neighbor_cell = get_cell(p_layer, E_overlapping.key); + if (neighbor_cell.source_id != TileSet::INVALID_SOURCE) { + Ref<TileSetSource> source = tile_set->get_source(neighbor_cell.source_id); + Ref<TileSetAtlasSource> atlas_source = source; + if (atlas_source.is_valid()) { + TileData *tile_data = atlas_source->get_tile_data(neighbor_cell.get_atlas_coords(), neighbor_cell.alternative_tile); + if (tile_data && tile_data->get_terrain_set() == p_terrain_set) { + neighbor_tile_data = tile_data; } } + } - int terrain = neighbor_tile_data ? neighbor_tile_data->get_peering_bit_terrain(TileSet::CellNeighbor(E_overlapping.value)) : -1; - if (!p_ignore_empty_terrains || terrain >= 0) { - if (!terrain_count.has(terrain)) { - terrain_count[terrain] = 0; - } - terrain_count[terrain] += 1; + int terrain = neighbor_tile_data ? neighbor_tile_data->get_terrain_peering_bit(TileSet::CellNeighbor(E_overlapping.value)) : -1; + if (!p_ignore_empty_terrains || terrain >= 0) { + if (!terrain_count.has(terrain)) { + terrain_count[terrain] = 0; } + terrain_count[terrain] += 1; } } @@ -2244,33 +2280,34 @@ RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_removed_ // Set the adequate terrain. if (max > 0) { + TerrainConstraint c = E_constraint; c.set_terrain(max_terrain); constraints.insert(c); } } - return constraints; -} - -RBSet<TileMap::TerrainConstraint> TileMap::get_terrain_constraints_from_added_tile(Vector2i p_position, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const { - if (!tile_set.is_valid()) { - return RBSet<TerrainConstraint>(); - } + // Add the centers as constraints + for (Vector2i E_coords : p_cell_list) { + TileData *tile_data = nullptr; + TileMapCell cell = get_cell(p_layer, E_coords); + if (cell.source_id != TileSet::INVALID_SOURCE) { + Ref<TileSetSource> source = tile_set->get_source(cell.source_id); + Ref<TileSetAtlasSource> atlas_source = source; + if (atlas_source.is_valid()) { + tile_data = atlas_source->get_tile_data(cell.get_atlas_coords(), cell.alternative_tile); + } + } - // Compute the constraints needed from the surrounding tiles. - RBSet<TerrainConstraint> output; - for (uint32_t i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - TileSet::CellNeighbor side = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, side)) { - TerrainConstraint c = TerrainConstraint(this, p_position, side, p_terrains_pattern.get_terrain(side)); - output.insert(c); + int terrain = (tile_data && tile_data->get_terrain_set() == p_terrain_set) ? tile_data->get_terrain() : -1; + if (!p_ignore_empty_terrains || terrain >= 0) { + constraints.insert(TerrainConstraint(this, E_coords, terrain)); } } - return output; + return constraints; } -HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_wave_function_collapse(const RBSet<Vector2i> &p_to_replace, int p_terrain_set, const RBSet<TerrainConstraint> p_constraints) { +HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_fill_constraints(const Vector<Vector2i> &p_to_replace, int p_terrain_set, const RBSet<TerrainConstraint> p_constraints) { if (!tile_set.is_valid()) { return HashMap<Vector2i, TileSet::TerrainsPattern>(); } @@ -2278,110 +2315,287 @@ HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_wave_function_colla // Copy the constraints set. RBSet<TerrainConstraint> constraints = p_constraints; - // Compute all acceptable patterns for each cell. - HashMap<Vector2i, RBSet<TileSet::TerrainsPattern>> per_cell_acceptable_tiles; - for (Vector2i cell : p_to_replace) { - per_cell_acceptable_tiles[cell] = _get_valid_terrains_patterns_for_constraints(p_terrain_set, cell, constraints); - } - // Output map. HashMap<Vector2i, TileSet::TerrainsPattern> output; // Add all positions to a set. - RBSet<Vector2i> to_replace = RBSet<Vector2i>(p_to_replace); - while (!to_replace.is_empty()) { - // Compute the minimum number of tile possibilities for each cell. - int min_nb_possibilities = 100000000; - for (const KeyValue<Vector2i, RBSet<TileSet::TerrainsPattern>> &E : per_cell_acceptable_tiles) { - min_nb_possibilities = MIN(min_nb_possibilities, E.value.size()); - } - - // Get the set of possible cells to fill, out of the most constrained ones. - LocalVector<Vector2i> to_choose_from; - for (const KeyValue<Vector2i, RBSet<TileSet::TerrainsPattern>> &E : per_cell_acceptable_tiles) { - if (E.value.size() == min_nb_possibilities) { - to_choose_from.push_back(E.key); - } - } - - // Randomly a cell to fill out of the most constrained. - Vector2i selected_cell_to_replace = to_choose_from[Math::random(0, to_choose_from.size() - 1)]; - - // Get the list of acceptable patterns for the given cell. - RBSet<TileSet::TerrainsPattern> valid_tiles = per_cell_acceptable_tiles[selected_cell_to_replace]; - if (valid_tiles.is_empty()) { - break; // No possibilities :/ - } - - // Out of the possible patterns, prioritize the one which have the least amount of different terrains. - LocalVector<TileSet::TerrainsPattern> valid_tiles_with_least_amount_of_terrains; - int min_terrain_count = 10000; - LocalVector<int> terrains_counts; - int pattern_index = 0; - for (const TileSet::TerrainsPattern &pattern : valid_tiles) { - RBSet<int> terrains; - for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - TileSet::CellNeighbor side = TileSet::CellNeighbor(i); - if (tile_set->is_valid_peering_bit_terrain(p_terrain_set, side)) { - terrains.insert(pattern.get_terrain(side)); + for (int i = 0; i < p_to_replace.size(); i++) { + const Vector2i &coords = p_to_replace[i]; + + // Select the best pattern for the given constraints + TileSet::TerrainsPattern pattern = _get_best_terrain_pattern_for_constraints(p_terrain_set, coords, constraints); + + // Update the constraint set with the new ones + RBSet<TerrainConstraint> new_constraints = _get_terrain_constraints_from_added_pattern(coords, p_terrain_set, pattern); + for (const TerrainConstraint &E_constraint : new_constraints) { + if (constraints.has(E_constraint)) { + constraints.erase(E_constraint); + } + TerrainConstraint c = E_constraint; + c.set_priority(5); + constraints.insert(c); + } + + output[coords] = pattern; + } + return output; +} + +HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_fill_connect(int p_layer, const Vector<Vector2i> &p_coords_array, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains) { + HashMap<Vector2i, TileSet::TerrainsPattern> output; + ERR_FAIL_COND_V(!tile_set.is_valid(), output); + ERR_FAIL_INDEX_V(p_terrain_set, tile_set->get_terrain_sets_count(), output); + + // Build list and set of tiles that can be modified (painted and their surroundings) + Vector<Vector2i> can_modify_list; + RBSet<Vector2i> can_modify_set; + RBSet<Vector2i> painted_set; + for (int i = p_coords_array.size() - 1; i >= 0; i--) { + const Vector2i &coords = p_coords_array[i]; + can_modify_list.push_back(coords); + can_modify_set.insert(coords); + painted_set.insert(coords); + } + for (Vector2i coords : p_coords_array) { + // Find the adequate neighbor + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { + TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { + Vector2i neighbor = get_neighbor_cell(coords, bit); + if (!can_modify_set.has(neighbor)) { + can_modify_list.push_back(neighbor); + can_modify_set.insert(neighbor); } } - min_terrain_count = MIN(min_terrain_count, terrains.size()); - terrains_counts.push_back(terrains.size()); - pattern_index++; } - pattern_index = 0; - for (const TileSet::TerrainsPattern &pattern : valid_tiles) { - if (terrains_counts[pattern_index] == min_terrain_count) { - valid_tiles_with_least_amount_of_terrains.push_back(pattern); + } + + // Build a set, out of the possibly modified tiles, of the one with a center bit that is set (or will be) to the painted terrain + RBSet<Vector2i> cells_with_terrain_center_bit; + for (Vector2i coords : can_modify_set) { + bool connect = false; + if (painted_set.has(coords)) { + connect = true; + } else { + // Get the center bit of the cell + TileData *tile_data = nullptr; + TileMapCell cell = get_cell(p_layer, coords); + if (cell.source_id != TileSet::INVALID_SOURCE) { + Ref<TileSetSource> source = tile_set->get_source(cell.source_id); + Ref<TileSetAtlasSource> atlas_source = source; + if (atlas_source.is_valid()) { + tile_data = atlas_source->get_tile_data(cell.get_atlas_coords(), cell.alternative_tile); + } + } + + if (tile_data && tile_data->get_terrain_set() == p_terrain_set && tile_data->get_terrain() == p_terrain) { + connect = true; + } + } + if (connect) { + cells_with_terrain_center_bit.insert(coords); + } + } + + RBSet<TerrainConstraint> constraints; + + // Add new constraints from the path drawn. + for (Vector2i coords : p_coords_array) { + // Constraints on the center bit. + TerrainConstraint c = TerrainConstraint(this, coords, p_terrain); + c.set_priority(10); + constraints.insert(c); + + // Constraints on the connecting bits. + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { + TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { + c = TerrainConstraint(this, coords, bit, p_terrain); + c.set_priority(10); + if ((int(bit) % 2) == 0) { + // Side peering bits: add the constraint if the center is of the same terrain + Vector2i neighbor = get_neighbor_cell(coords, bit); + if (cells_with_terrain_center_bit.has(neighbor)) { + constraints.insert(c); + } + } else { + // Corner peering bits: add the constraint if all tiles on the constraint has the same center bit + HashMap<Vector2i, TileSet::CellNeighbor> overlapping_terrain_bits = c.get_overlapping_coords_and_peering_bits(); + bool valid = true; + for (KeyValue<Vector2i, TileSet::CellNeighbor> kv : overlapping_terrain_bits) { + if (!cells_with_terrain_center_bit.has(kv.key)) { + valid = false; + break; + } + } + if (valid) { + constraints.insert(c); + } + } } - pattern_index++; } + } - // Randomly select a pattern out of the remaining ones. - TileSet::TerrainsPattern selected_terrain_tile_pattern = valid_tiles_with_least_amount_of_terrains[Math::random(0, valid_tiles_with_least_amount_of_terrains.size() - 1)]; + // Fills in the constraint list from existing tiles. + for (TerrainConstraint c : _get_terrain_constraints_from_cells_list(p_layer, can_modify_set, p_terrain_set, p_ignore_empty_terrains)) { + constraints.insert(c); + } - // Set the selected cell into the output. - output[selected_cell_to_replace] = selected_terrain_tile_pattern; - to_replace.erase(selected_cell_to_replace); - per_cell_acceptable_tiles.erase(selected_cell_to_replace); + // Fill the terrains. + output = terrain_fill_constraints(can_modify_list, p_terrain_set, constraints); + return output; +} - // Add the new constraints from the added tiles. - RBSet<TerrainConstraint> new_constraints = get_terrain_constraints_from_added_tile(selected_cell_to_replace, p_terrain_set, selected_terrain_tile_pattern); - for (const TerrainConstraint &E_constraint : new_constraints) { - constraints.insert(E_constraint); +HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_fill_path(int p_layer, const Vector<Vector2i> &p_path, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains) { + HashMap<Vector2i, TileSet::TerrainsPattern> output; + ERR_FAIL_COND_V(!tile_set.is_valid(), output); + ERR_FAIL_INDEX_V(p_terrain_set, tile_set->get_terrain_sets_count(), output); + + // Make sure the path is correct and build the peering bit list while doing it. + Vector<TileSet::CellNeighbor> neighbor_list; + for (int i = 0; i < p_path.size() - 1; i++) { + // Find the adequate neighbor + TileSet::CellNeighbor found_bit = TileSet::CELL_NEIGHBOR_MAX; + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { + TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { + if (get_neighbor_cell(p_path[i], bit) == p_path[i + 1]) { + found_bit = bit; + break; + } + } } + ERR_FAIL_COND_V_MSG(found_bit == TileSet::CELL_NEIGHBOR_MAX, output, vformat("Invalid terrain path, %s is not a neighbouring tile of %s", p_path[i + 1], p_path[i])); + neighbor_list.push_back(found_bit); + } + + // Build list and set of tiles that can be modified (painted and their surroundings) + Vector<Vector2i> can_modify_list; + RBSet<Vector2i> can_modify_set; + for (int i = p_path.size() - 1; i >= 0; i--) { + const Vector2i &coords = p_path[i]; + can_modify_list.push_back(coords); + can_modify_set.insert(coords); + } + for (Vector2i coords : p_path) { + // Find the adequate neighbor + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { + TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { + Vector2i neighbor = get_neighbor_cell(coords, bit); + if (!can_modify_set.has(neighbor)) { + can_modify_list.push_back(neighbor); + can_modify_set.insert(neighbor); + } + } + } + } + + RBSet<TerrainConstraint> constraints; + + // Add new constraints from the path drawn. + for (Vector2i coords : p_path) { + // Constraints on the center bit + TerrainConstraint c = TerrainConstraint(this, coords, p_terrain); + c.set_priority(10); + constraints.insert(c); + } + for (int i = 0; i < p_path.size() - 1; i++) { + // Constraints on the peering bits. + TerrainConstraint c = TerrainConstraint(this, p_path[i], neighbor_list[i], p_terrain); + c.set_priority(10); + constraints.insert(c); + } + + // Fills in the constraint list from existing tiles. + for (TerrainConstraint c : _get_terrain_constraints_from_cells_list(p_layer, can_modify_set, p_terrain_set, p_ignore_empty_terrains)) { + constraints.insert(c); + } + + // Fill the terrains. + output = terrain_fill_constraints(can_modify_list, p_terrain_set, constraints); + return output; +} - // Compute valid tiles again for neighbors. - for (uint32_t i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - TileSet::CellNeighbor side = TileSet::CellNeighbor(i); - if (is_existing_neighbor(side)) { - Vector2i neighbor = get_neighbor_cell(selected_cell_to_replace, side); - if (to_replace.has(neighbor)) { - per_cell_acceptable_tiles[neighbor] = _get_valid_terrains_patterns_for_constraints(p_terrain_set, neighbor, constraints); +HashMap<Vector2i, TileSet::TerrainsPattern> TileMap::terrain_fill_pattern(int p_layer, const Vector<Vector2i> &p_coords_array, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern, bool p_ignore_empty_terrains) { + HashMap<Vector2i, TileSet::TerrainsPattern> output; + ERR_FAIL_COND_V(!tile_set.is_valid(), output); + ERR_FAIL_INDEX_V(p_terrain_set, tile_set->get_terrain_sets_count(), output); + + // Build list and set of tiles that can be modified (painted and their surroundings). + Vector<Vector2i> can_modify_list; + RBSet<Vector2i> can_modify_set; + for (int i = p_coords_array.size() - 1; i >= 0; i--) { + const Vector2i &coords = p_coords_array[i]; + can_modify_list.push_back(coords); + can_modify_set.insert(coords); + } + for (Vector2i coords : p_coords_array) { + // Find the adequate neighbor + for (int j = 0; j < TileSet::CELL_NEIGHBOR_MAX; j++) { + TileSet::CellNeighbor bit = TileSet::CellNeighbor(j); + if (tile_set->is_valid_terrain_peering_bit(p_terrain_set, bit)) { + Vector2i neighbor = get_neighbor_cell(coords, bit); + if (!can_modify_set.has(neighbor)) { + can_modify_list.push_back(neighbor); + can_modify_set.insert(neighbor); } } } } + + // Add constraint by the new ones. + RBSet<TerrainConstraint> constraints; + + // Add new constraints from the path drawn. + for (Vector2i coords : p_coords_array) { + // Constraints on the center bit + RBSet<TerrainConstraint> added_constraints = _get_terrain_constraints_from_added_pattern(coords, p_terrain_set, p_terrains_pattern); + for (TerrainConstraint c : added_constraints) { + c.set_priority(10); + constraints.insert(c); + } + } + + // Fills in the constraint list from modified tiles border. + for (TerrainConstraint c : _get_terrain_constraints_from_cells_list(p_layer, can_modify_set, p_terrain_set, p_ignore_empty_terrains)) { + constraints.insert(c); + } + + // Fill the terrains. + output = terrain_fill_constraints(can_modify_list, p_terrain_set, constraints); return output; } -void TileMap::set_cells_from_surrounding_terrains(int p_layer, TypedArray<Vector2i> p_coords_array, int p_terrain_set, bool p_ignore_empty_terrains) { +void TileMap::set_cells_terrain_connect(int p_layer, TypedArray<Vector2i> p_cells, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains) { ERR_FAIL_COND(!tile_set.is_valid()); ERR_FAIL_INDEX(p_layer, (int)layers.size()); ERR_FAIL_INDEX(p_terrain_set, tile_set->get_terrain_sets_count()); - RBSet<Vector2i> coords_set; - for (int i = 0; i < p_coords_array.size(); i++) { - coords_set.insert(p_coords_array[i]); + Vector<Vector2i> vector_cells; + for (int i = 0; i < p_cells.size(); i++) { + vector_cells.push_back(p_cells[i]); } + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_output = terrain_fill_connect(p_layer, vector_cells, p_terrain_set, p_terrain, p_ignore_empty_terrains); + for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : terrain_fill_output) { + TileMapCell c = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + set_cell(p_layer, E.key, c.source_id, c.get_atlas_coords(), c.alternative_tile); + } +} - RBSet<TileMap::TerrainConstraint> constraints = get_terrain_constraints_from_removed_cells_list(p_layer, coords_set, p_terrain_set, p_ignore_empty_terrains); +void TileMap::set_cells_terrain_path(int p_layer, TypedArray<Vector2i> p_path, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains) { + ERR_FAIL_COND(!tile_set.is_valid()); + ERR_FAIL_INDEX(p_layer, (int)layers.size()); + ERR_FAIL_INDEX(p_terrain_set, tile_set->get_terrain_sets_count()); - HashMap<Vector2i, TileSet::TerrainsPattern> wfc_output = terrain_wave_function_collapse(coords_set, p_terrain_set, constraints); - for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &kv : wfc_output) { - TileMapCell cell = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, kv.value); - set_cell(p_layer, kv.key, cell.source_id, cell.get_atlas_coords(), cell.alternative_tile); + Vector<Vector2i> vector_path; + for (int i = 0; i < p_path.size(); i++) { + vector_path.push_back(p_path[i]); + } + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_output = terrain_fill_path(p_layer, vector_path, p_terrain_set, p_terrain, p_ignore_empty_terrains); + for (const KeyValue<Vector2i, TileSet::TerrainsPattern> &E : terrain_fill_output) { + TileMapCell c = tile_set->get_random_tile_from_terrains_pattern(p_terrain_set, E.value); + set_cell(p_layer, E.key, c.source_id, c.get_atlas_coords(), c.alternative_tile); } } @@ -2729,7 +2943,7 @@ void TileMap::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::BOOL, vformat("layer_%d/enabled", i), PROPERTY_HINT_NONE)); p_list->push_back(PropertyInfo(Variant::COLOR, vformat("layer_%d/modulate", i), PROPERTY_HINT_NONE)); p_list->push_back(PropertyInfo(Variant::BOOL, vformat("layer_%d/y_sort_enabled", i), PROPERTY_HINT_NONE)); - p_list->push_back(PropertyInfo(Variant::INT, vformat("layer_%d/y_sort_origin", i), PROPERTY_HINT_NONE)); + p_list->push_back(PropertyInfo(Variant::INT, vformat("layer_%d/y_sort_origin", i), PROPERTY_HINT_NONE, "suffix:px")); p_list->push_back(PropertyInfo(Variant::INT, vformat("layer_%d/z_index", i), PROPERTY_HINT_NONE)); p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("layer_%d/tile_data", i), PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR)); } @@ -3640,7 +3854,8 @@ void TileMap::_bind_methods() { ClassDB::bind_method(D_METHOD("map_pattern", "position_in_tilemap", "coords_in_pattern", "pattern"), &TileMap::map_pattern); ClassDB::bind_method(D_METHOD("set_pattern", "layer", "position", "pattern"), &TileMap::set_pattern); - ClassDB::bind_method(D_METHOD("set_cells_from_surrounding_terrains", "layer", "cells", "terrain_set", "ignore_empty_terrains"), &TileMap::set_cells_from_surrounding_terrains, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("set_cells_terrain_connect", "layer", "cells", "terrain_set", "terrain", "ignore_empty_terrains"), &TileMap::set_cells_terrain_connect, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("set_cells_terrain_path", "layer", "path", "terrain_set", "terrain", "ignore_empty_terrains"), &TileMap::set_cells_terrain_path, DEFVAL(true)); ClassDB::bind_method(D_METHOD("fix_invalid_tiles"), &TileMap::fix_invalid_tiles); ClassDB::bind_method(D_METHOD("clear_layer", "layer"), &TileMap::clear_layer); diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 02a2b3a1c6..0ac94b9d45 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -119,6 +119,8 @@ public: int bit = -1; int terrain = -1; + int priority = 1; + public: bool operator<(const TerrainConstraint &p_other) const { if (base_cell_coords == p_other.base_cell_coords) { @@ -128,13 +130,17 @@ public: } String to_string() const { - return vformat("Constraint {pos:%s, bit:%d, terrain:%d}", base_cell_coords, bit, terrain); + return vformat("Constraint {pos:%s, bit:%d, terrain:%d, priotity:%d}", base_cell_coords, bit, terrain, priority); } Vector2i get_base_cell_coords() const { return base_cell_coords; } + bool is_center_bit() const { + return bit == 0; + } + HashMap<Vector2i, TileSet::CellNeighbor> get_overlapping_coords_and_peering_bits() const; void set_terrain(int p_terrain) { @@ -145,8 +151,17 @@ public: return terrain; } - TerrainConstraint(const TileMap *p_tile_map, const Vector2i &p_position, const TileSet::CellNeighbor &p_bit, int p_terrain); - TerrainConstraint() {} + void set_priority(int p_priority) { + priority = p_priority; + } + + int get_priority() { + return priority; + } + + TerrainConstraint(const TileMap *p_tile_map, const Vector2i &p_position, int p_terrain); // For the center terrain bit + TerrainConstraint(const TileMap *p_tile_map, const Vector2i &p_position, const TileSet::CellNeighbor &p_bit, int p_terrain); // For peering bits + TerrainConstraint(){}; }; enum VisibilityMode { @@ -251,7 +266,9 @@ private: void _scenes_draw_quadrant_debug(TileMapQuadrant *p_quadrant); // Terrains. - RBSet<TileSet::TerrainsPattern> _get_valid_terrains_patterns_for_constraints(int p_terrain_set, const Vector2i &p_position, RBSet<TerrainConstraint> p_constraints); + TileSet::TerrainsPattern _get_best_terrain_pattern_for_constraints(int p_terrain_set, const Vector2i &p_position, RBSet<TerrainConstraint> p_constraints); + RBSet<TerrainConstraint> _get_terrain_constraints_from_added_pattern(Vector2i p_position, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const; + RBSet<TerrainConstraint> _get_terrain_constraints_from_cells_list(int p_layer, const RBSet<Vector2i> &p_on_map, int p_terrain_set, bool p_ignore_empty_terrains) const; // Set and get tiles from data arrays. void _set_tile_data(int p_layer, const Vector<int> &p_data); @@ -333,10 +350,13 @@ public: void set_pattern(int p_layer, Vector2i p_position, const Ref<TileMapPattern> p_pattern); // Terrains. - RBSet<TerrainConstraint> get_terrain_constraints_from_removed_cells_list(int p_layer, const RBSet<Vector2i> &p_to_replace, int p_terrain_set, bool p_ignore_empty_terrains = true) const; // Not exposed. - RBSet<TerrainConstraint> get_terrain_constraints_from_added_tile(Vector2i p_position, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const; // Not exposed. - HashMap<Vector2i, TileSet::TerrainsPattern> terrain_wave_function_collapse(const RBSet<Vector2i> &p_to_replace, int p_terrain_set, const RBSet<TerrainConstraint> p_constraints); // Not exposed. - void set_cells_from_surrounding_terrains(int p_layer, TypedArray<Vector2i> p_coords_array, int p_terrain_set, bool p_ignore_empty_terrains = true); + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_constraints(const Vector<Vector2i> &p_to_replace, int p_terrain_set, const RBSet<TerrainConstraint> p_constraints); // Not exposed. + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_connect(int p_layer, const Vector<Vector2i> &p_coords_array, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); // Not exposed. + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_path(int p_layer, const Vector<Vector2i> &p_coords_array, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); // Not exposed. + HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_pattern(int p_layer, const Vector<Vector2i> &p_coords_array, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern, bool p_ignore_empty_terrains = true); // Not exposed. + + void set_cells_terrain_connect(int p_layer, TypedArray<Vector2i> p_cells, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); + void set_cells_terrain_path(int p_layer, TypedArray<Vector2i> p_path, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); // Not exposed to users TileMapCell get_cell(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const; @@ -365,7 +385,7 @@ public: // For finding tiles from collision. Vector2i get_coords_for_body_rid(RID p_physics_body); - // Fixing a nclearing methods. + // Fixing and clearing methods. void fix_invalid_tiles(); // Clears tiles from a given layer diff --git a/scene/3d/area_3d.cpp b/scene/3d/area_3d.cpp index c8c8c6a4e5..fb0c59daa1 100644 --- a/scene/3d/area_3d.cpp +++ b/scene/3d/area_3d.cpp @@ -728,7 +728,7 @@ void Area3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "gravity_space_override", PROPERTY_HINT_ENUM, "Disabled,Combine,Combine-Replace,Replace,Replace-Combine", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_space_override_mode", "get_gravity_space_override_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gravity_point", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_gravity_is_point", "is_gravity_a_point"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_point_distance_scale", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,exp"), "set_gravity_point_distance_scale", "get_gravity_point_distance_scale"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_point_center"), "set_gravity_point_center", "get_gravity_point_center"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_point_center", PROPERTY_HINT_NONE, "suffix:m"), "set_gravity_point_center", "get_gravity_point_center"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "gravity_direction"), "set_gravity_direction", "get_gravity_direction"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity", PROPERTY_HINT_RANGE, U"-32,32,0.001,or_lesser,or_greater,suffix:m/s\u00B2"), "set_gravity", "get_gravity"); diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 7c1fb3779f..824ea0407e 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -30,6 +30,7 @@ #include "audio_stream_player_3d.h" +#include "core/config/project_settings.h" #include "scene/3d/area_3d.h" #include "scene/3d/audio_listener_3d.h" #include "scene/3d/camera_3d.h" @@ -462,9 +463,10 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() { for (Ref<AudioStreamPlayback> &playback : stream_playbacks) { AudioServer::get_singleton()->set_playback_highshelf_params(playback, linear_attenuation, attenuation_filter_cutoff_hz); } - //TODO: The lower the second parameter (tightness) the more the sound will "enclose" the listener (more undirected / playing from - // speakers not facing the source) - this could be made distance dependent. - _calc_output_vol(local_pos.normalized(), 4.0, output_volume_vector); + // Bake in a constant factor here to allow the project setting defaults for 2d and 3d to be normalized to 1.0. + float tightness = cached_global_panning_strength * 2.0f; + tightness *= panning_strength; + _calc_output_vol(local_pos.normalized(), tightness, output_volume_vector); for (unsigned int k = 0; k < 4; k++) { output_volume_vector.write[k] = multiplier * output_volume_vector[k]; @@ -792,6 +794,15 @@ int AudioStreamPlayer3D::get_max_polyphony() const { return max_polyphony; } +void AudioStreamPlayer3D::set_panning_strength(float p_panning_strength) { + ERR_FAIL_COND_MSG(p_panning_strength < 0, "Panning strength must be a positive number."); + panning_strength = p_panning_strength; +} + +float AudioStreamPlayer3D::get_panning_strength() const { + return panning_strength; +} + void AudioStreamPlayer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer3D::set_stream); ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer3D::get_stream); @@ -857,6 +868,9 @@ void AudioStreamPlayer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_max_polyphony", "max_polyphony"), &AudioStreamPlayer3D::set_max_polyphony); ClassDB::bind_method(D_METHOD("get_max_polyphony"), &AudioStreamPlayer3D::get_max_polyphony); + ClassDB::bind_method(D_METHOD("set_panning_strength", "panning_strength"), &AudioStreamPlayer3D::set_panning_strength); + ClassDB::bind_method(D_METHOD("get_panning_strength"), &AudioStreamPlayer3D::get_panning_strength); + ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer3D::get_stream_playback); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); @@ -870,6 +884,7 @@ void AudioStreamPlayer3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "stream_paused", PROPERTY_HINT_NONE, ""), "set_stream_paused", "get_stream_paused"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "0,4096,0.01,or_greater,suffix:m"), "set_max_distance", "get_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask"); ADD_GROUP("Emission Angle", "emission_angle"); @@ -898,6 +913,7 @@ AudioStreamPlayer3D::AudioStreamPlayer3D() { velocity_tracker.instantiate(); AudioServer::get_singleton()->connect("bus_layout_changed", callable_mp(this, &AudioStreamPlayer3D::_bus_layout_changed)); set_disable_scale(true); + cached_global_panning_strength = ProjectSettings::get_singleton()->get("audio/general/3d_panning_strength"); } AudioStreamPlayer3D::~AudioStreamPlayer3D() { diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h index bc47a8de93..85ece6d8d5 100644 --- a/scene/3d/audio_stream_player_3d.h +++ b/scene/3d/audio_stream_player_3d.h @@ -116,6 +116,9 @@ private: float _get_attenuation_db(float p_distance) const; + float panning_strength = 1.0f; + float cached_global_panning_strength = 1.0f; + protected: void _validate_property(PropertyInfo &property) const override; void _notification(int p_what); @@ -182,6 +185,9 @@ public: void set_stream_paused(bool p_pause); bool get_stream_paused() const; + void set_panning_strength(float p_panning_strength); + float get_panning_strength() const; + Ref<AudioStreamPlayback> get_stream_playback(); AudioStreamPlayer3D(); diff --git a/scene/3d/fog_volume.cpp b/scene/3d/fog_volume.cpp index 8fbadb4b7b..1b329143b6 100644 --- a/scene/3d/fog_volume.cpp +++ b/scene/3d/fog_volume.cpp @@ -40,7 +40,7 @@ void FogVolume::_bind_methods() { ClassDB::bind_method(D_METHOD("set_material", "material"), &FogVolume::set_material); ClassDB::bind_method(D_METHOD("get_material"), &FogVolume::get_material); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater"), "set_extents", "get_extents"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents"); ADD_PROPERTY(PropertyInfo(Variant::INT, "shape", PROPERTY_HINT_ENUM, "Ellipsoid (Local),Cone (Local),Cylinder (Local),Box (Local),World (Global)"), "set_shape", "get_shape"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "FogMaterial,ShaderMaterial"), "set_material", "get_material"); } diff --git a/scene/3d/gpu_particles_3d.cpp b/scene/3d/gpu_particles_3d.cpp index 8008512546..d18c452ca7 100644 --- a/scene/3d/gpu_particles_3d.cpp +++ b/scene/3d/gpu_particles_3d.cpp @@ -579,7 +579,7 @@ void GPUParticles3D::_bind_methods() { ADD_GROUP("Collision", "collision_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_base_size", PROPERTY_HINT_RANGE, "0,128,0.01,or_greater,suffix:m"), "set_collision_base_size", "get_collision_base_size"); ADD_GROUP("Drawing", ""); - ADD_PROPERTY(PropertyInfo(Variant::AABB, "visibility_aabb"), "set_visibility_aabb", "get_visibility_aabb"); + ADD_PROPERTY(PropertyInfo(Variant::AABB, "visibility_aabb", PROPERTY_HINT_NONE, "suffix:m"), "set_visibility_aabb", "get_visibility_aabb"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "local_coords"), "set_use_local_coordinates", "get_use_local_coordinates"); ADD_PROPERTY(PropertyInfo(Variant::INT, "draw_order", PROPERTY_HINT_ENUM, "Index,Lifetime,Reverse Lifetime,View Depth"), "set_draw_order", "get_draw_order"); ADD_PROPERTY(PropertyInfo(Variant::INT, "transform_align", PROPERTY_HINT_ENUM, "Disabled,Z-Billboard,Y to Velocity,Z-Billboard + Y to Velocity"), "set_transform_align", "get_transform_align"); diff --git a/scene/3d/gpu_particles_collision_3d.cpp b/scene/3d/gpu_particles_collision_3d.cpp index c1c5a2a631..da0789ccd5 100644 --- a/scene/3d/gpu_particles_collision_3d.cpp +++ b/scene/3d/gpu_particles_collision_3d.cpp @@ -516,7 +516,7 @@ void GPUParticlesCollisionSDF3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents"); ADD_PROPERTY(PropertyInfo(Variant::INT, "resolution", PROPERTY_HINT_ENUM, "16,32,64,128,256,512,suffix:px"), "set_resolution", "get_resolution"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "thickness", PROPERTY_HINT_RANGE, "0.0,2.0,0.01"), "set_thickness", "get_thickness"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "thickness", PROPERTY_HINT_RANGE, "0.0,2.0,0.01,suffix:m"), "set_thickness", "get_thickness"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture3D"), "set_texture", "get_texture"); BIND_ENUM_CONSTANT(RESOLUTION_16); diff --git a/scene/3d/joint_3d.cpp b/scene/3d/joint_3d.cpp index b6fc83e599..0b824ef28b 100644 --- a/scene/3d/joint_3d.cpp +++ b/scene/3d/joint_3d.cpp @@ -331,7 +331,7 @@ void HingeJoint3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit/relaxation", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param", "get_param", PARAM_LIMIT_RELAXATION); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "motor/enable"), "set_flag", "get_flag", FLAG_ENABLE_MOTOR); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "motor/target_velocity", PROPERTY_HINT_RANGE, "-200,200,0.01,or_greater,or_lesser"), "set_param", "get_param", PARAM_MOTOR_TARGET_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "motor/target_velocity", PROPERTY_HINT_RANGE, "-200,200,0.01,or_greater,or_lesser,suffix:m/s"), "set_param", "get_param", PARAM_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "motor/max_impulse", PROPERTY_HINT_RANGE, "0.01,1024,0.01"), "set_param", "get_param", PARAM_MOTOR_MAX_IMPULSE); BIND_ENUM_CONSTANT(PARAM_BIAS); @@ -448,8 +448,8 @@ void SliderJoint3D::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_lower_limit_angular", "lower_limit_angular"), &SliderJoint3D::_set_lower_limit_angular); ClassDB::bind_method(D_METHOD("_get_lower_limit_angular"), &SliderJoint3D::_get_lower_limit_angular); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/upper_distance", PROPERTY_HINT_RANGE, "-1024,1024,0.01"), "set_param", "get_param", PARAM_LINEAR_LIMIT_UPPER); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/lower_distance", PROPERTY_HINT_RANGE, "-1024,1024,0.01"), "set_param", "get_param", PARAM_LINEAR_LIMIT_LOWER); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/upper_distance", PROPERTY_HINT_RANGE, "-1024,1024,0.01,suffix:m"), "set_param", "get_param", PARAM_LINEAR_LIMIT_UPPER); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/lower_distance", PROPERTY_HINT_RANGE, "-1024,1024,0.01,suffix:m"), "set_param", "get_param", PARAM_LINEAR_LIMIT_LOWER); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/softness", PROPERTY_HINT_RANGE, "0.01,16.0,0.01"), "set_param", "get_param", PARAM_LINEAR_LIMIT_SOFTNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/restitution", PROPERTY_HINT_RANGE, "0.01,16.0,0.01"), "set_param", "get_param", PARAM_LINEAR_LIMIT_RESTITUTION); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit/damping", PROPERTY_HINT_RANGE, "0,16.0,0.01"), "set_param", "get_param", PARAM_LINEAR_LIMIT_DAMPING); @@ -737,15 +737,18 @@ void Generic6DOFJoint3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_flag_z", "flag", "value"), &Generic6DOFJoint3D::set_flag_z); ClassDB::bind_method(D_METHOD("get_flag_z", "flag"), &Generic6DOFJoint3D::get_flag_z); + // X ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/upper_distance"), "set_param_x", "get_param_x", PARAM_LINEAR_UPPER_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/lower_distance"), "set_param_x", "get_param_x", PARAM_LINEAR_LOWER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_x", "get_param_x", PARAM_LINEAR_UPPER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_x", "get_param_x", PARAM_LINEAR_LOWER_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_LINEAR_LIMIT_SOFTNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_LINEAR_RESTITUTION); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_x/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_LINEAR_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_MOTOR); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_x/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_x/force_limit"), "set_param_x", "get_param_x", PARAM_LINEAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_LINEAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_x/damping"), "set_param_x", "get_param_x", PARAM_LINEAR_SPRING_DAMPING); @@ -759,56 +762,69 @@ void Generic6DOFJoint3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_x/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_x", "get_param_x", PARAM_ANGULAR_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_x/force_limit"), "set_param_x", "get_param_x", PARAM_ANGULAR_FORCE_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_x/erp"), "set_param_x", "get_param_x", PARAM_ANGULAR_ERP); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/target_velocity"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_x/force_limit"), "set_param_x", "get_param_x", PARAM_ANGULAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_x/enabled"), "set_flag_x", "get_flag_x", FLAG_ENABLE_ANGULAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/stiffness"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/damping"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_x/equilibrium_point"), "set_param_x", "get_param_x", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT); + // Y ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/upper_distance"), "set_param_y", "get_param_y", PARAM_LINEAR_UPPER_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/lower_distance"), "set_param_y", "get_param_y", PARAM_LINEAR_LOWER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_UPPER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_y", "get_param_y", PARAM_LINEAR_LOWER_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_LIMIT_SOFTNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_RESTITUTION); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_y/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_LINEAR_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_MOTOR); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_LINEAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_LINEAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/damping"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_ANGULAR_LIMIT); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_y/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_y", "_get_angular_hi_limit_y"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_y/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_y", "_get_angular_lo_limit_y"); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_LIMIT_SOFTNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_RESTITUTION); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_y", "get_param_y", PARAM_ANGULAR_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/force_limit"), "set_param_y", "get_param_y", PARAM_ANGULAR_FORCE_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_y/erp"), "set_param_y", "get_param_y", PARAM_ANGULAR_ERP); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/target_velocity"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_y/force_limit"), "set_param_y", "get_param_y", PARAM_ANGULAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_y/enabled"), "set_flag_y", "get_flag_y", FLAG_ENABLE_ANGULAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/stiffness"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/damping"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_y/equilibrium_point"), "set_param_y", "get_param_y", PARAM_ANGULAR_SPRING_EQUILIBRIUM_POINT); + // Z ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/upper_distance"), "set_param_z", "get_param_z", PARAM_LINEAR_UPPER_LIMIT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/lower_distance"), "set_param_z", "get_param_z", PARAM_LINEAR_LOWER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/upper_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_UPPER_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/lower_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_param_z", "get_param_z", PARAM_LINEAR_LOWER_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_LIMIT_SOFTNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_RESTITUTION); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_limit_z/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_LINEAR_DAMPING); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_MOTOR); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/target_velocity"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/target_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_motor_z/force_limit"), "set_param_z", "get_param_z", PARAM_LINEAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "linear_spring_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_LINEAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/damping"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "linear_spring_z/equilibrium_point"), "set_param_z", "get_param_z", PARAM_LINEAR_SPRING_EQUILIBRIUM_POINT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_limit_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_ANGULAR_LIMIT); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_z/upper_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_hi_limit_z", "_get_angular_hi_limit_z"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_limit_z/lower_angle", PROPERTY_HINT_RANGE, "-180,180,0.01"), "_set_angular_lo_limit_z", "_get_angular_lo_limit_z"); @@ -817,9 +833,11 @@ void Generic6DOFJoint3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_z/damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"), "set_param_z", "get_param_z", PARAM_ANGULAR_DAMPING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_z/force_limit"), "set_param_z", "get_param_z", PARAM_ANGULAR_FORCE_LIMIT); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_limit_z/erp"), "set_param_z", "get_param_z", PARAM_ANGULAR_ERP); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_motor_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_MOTOR); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_z/target_velocity"), "set_param_z", "get_param_z", PARAM_ANGULAR_MOTOR_TARGET_VELOCITY); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_motor_z/force_limit"), "set_param_z", "get_param_z", PARAM_ANGULAR_MOTOR_FORCE_LIMIT); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "angular_spring_z/enabled"), "set_flag_z", "get_flag_z", FLAG_ENABLE_ANGULAR_SPRING); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_z/stiffness"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_STIFFNESS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "angular_spring_z/damping"), "set_param_z", "get_param_z", PARAM_ANGULAR_SPRING_DAMPING); diff --git a/scene/3d/label_3d.cpp b/scene/3d/label_3d.cpp index 78da22a0c3..0849b2c631 100644 --- a/scene/3d/label_3d.cpp +++ b/scene/3d/label_3d.cpp @@ -120,8 +120,8 @@ void Label3D::_bind_methods() { ClassDB::bind_method(D_METHOD("_font_changed"), &Label3D::_font_changed); ClassDB::bind_method(D_METHOD("_im_update"), &Label3D::_im_update); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001"), "set_pixel_size", "get_pixel_size"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001,suffix:m"), "set_pixel_size", "get_pixel_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset", PROPERTY_HINT_NONE, "suffix:px"), "set_offset", "get_offset"); ADD_GROUP("Flags", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "billboard", PROPERTY_HINT_ENUM, "Disabled,Enabled,Y-Billboard"), "set_billboard_mode", "get_billboard_mode"); @@ -140,14 +140,14 @@ void Label3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::COLOR, "outline_modulate"), "set_outline_modulate", "get_outline_modulate"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT, ""), "set_text", "get_text"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "font", PROPERTY_HINT_RESOURCE_TYPE, "Font"), "set_font", "get_font"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "font_size", PROPERTY_HINT_RANGE, "1,127,1"), "set_font_size", "get_font_size"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "outline_size", PROPERTY_HINT_RANGE, "0,127,1"), "set_outline_size", "get_outline_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "font_size", PROPERTY_HINT_RANGE, "1,127,1,suffix:px"), "set_font_size", "get_font_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "outline_size", PROPERTY_HINT_RANGE, "0,127,1,suffix:px"), "set_outline_size", "get_outline_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "horizontal_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_horizontal_alignment", "get_horizontal_alignment"); ADD_PROPERTY(PropertyInfo(Variant::INT, "vertical_alignment", PROPERTY_HINT_ENUM, "Top,Center,Bottom"), "set_vertical_alignment", "get_vertical_alignment"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "line_spacing"), "set_line_spacing", "get_line_spacing"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "line_spacing", PROPERTY_HINT_NONE, "suffix:px"), "set_line_spacing", "get_line_spacing"); ADD_PROPERTY(PropertyInfo(Variant::INT, "autowrap_mode", PROPERTY_HINT_ENUM, "Off,Arbitrary,Word,Word (Smart)"), "set_autowrap_mode", "get_autowrap_mode"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width", PROPERTY_HINT_NONE, "suffix:px"), "set_width", "get_width"); ADD_PROPERTY(PropertyInfo(Variant::INT, "structured_text_bidi_override", PROPERTY_HINT_ENUM, "Default,URI,File,Email,List,None,Custom"), "set_structured_text_bidi_override", "get_structured_text_bidi_override"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "structured_text_bidi_override_options"), "set_structured_text_bidi_override_options", "get_structured_text_bidi_override_options"); @@ -155,11 +155,6 @@ void Label3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left"), "set_text_direction", "get_text_direction"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "language", PROPERTY_HINT_LOCALE_ID, ""), "set_language", "get_language"); - BIND_ENUM_CONSTANT(AUTOWRAP_OFF); - BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART); - BIND_ENUM_CONSTANT(FLAG_SHADED); BIND_ENUM_CONSTANT(FLAG_DOUBLE_SIDED); BIND_ENUM_CONSTANT(FLAG_DISABLE_DEPTH_TEST); @@ -381,7 +376,7 @@ void Label3D::_generate_glyph_surfaces(const Glyph &p_glyph, Vector2 &r_offset, } else { mat_hash = hash_one_uint64(0); } - mat_hash = hash_djb2_one_64(p_priority | (p_outline_size << 31), mat_hash); + mat_hash = hash_fmix32(hash_murmur3_one_64(p_priority | (p_outline_size << 31), mat_hash)); if (!surfaces.has(mat_hash)) { SurfaceData surf; @@ -514,16 +509,16 @@ void Label3D::_shape() { uint16_t autowrap_flags = TextServer::BREAK_MANDATORY; switch (autowrap_mode) { - case AUTOWRAP_WORD_SMART: + case TextServer::AUTOWRAP_WORD_SMART: autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_WORD: + case TextServer::AUTOWRAP_WORD: autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_ARBITRARY: + case TextServer::AUTOWRAP_ARBITRARY: autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_OFF: + case TextServer::AUTOWRAP_OFF: break; } PackedInt32Array line_breaks = TS->shaped_text_get_line_breaks(text_rid, width, 0, autowrap_flags); @@ -885,7 +880,7 @@ Color Label3D::get_outline_modulate() const { return outline_modulate; } -void Label3D::set_autowrap_mode(Label3D::AutowrapMode p_mode) { +void Label3D::set_autowrap_mode(TextServer::AutowrapMode p_mode) { if (autowrap_mode != p_mode) { autowrap_mode = p_mode; dirty_lines = true; @@ -893,7 +888,7 @@ void Label3D::set_autowrap_mode(Label3D::AutowrapMode p_mode) { } } -Label3D::AutowrapMode Label3D::get_autowrap_mode() const { +TextServer::AutowrapMode Label3D::get_autowrap_mode() const { return autowrap_mode; } diff --git a/scene/3d/label_3d.h b/scene/3d/label_3d.h index 62f4c3fe96..7766bca068 100644 --- a/scene/3d/label_3d.h +++ b/scene/3d/label_3d.h @@ -54,13 +54,6 @@ public: ALPHA_CUT_OPAQUE_PREPASS }; - enum AutowrapMode { - AUTOWRAP_OFF, - AUTOWRAP_ARBITRARY, - AUTOWRAP_WORD, - AUTOWRAP_WORD_SMART - }; - private: real_t pixel_size = 0.01; bool flags[FLAG_MAX] = {}; @@ -91,7 +84,7 @@ private: String xl_text; bool uppercase = false; - AutowrapMode autowrap_mode = AUTOWRAP_OFF; + TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_OFF; float width = 500.0; int font_size = 16; @@ -200,8 +193,8 @@ public: void set_outline_modulate(const Color &p_color); Color get_outline_modulate() const; - void set_autowrap_mode(AutowrapMode p_mode); - AutowrapMode get_autowrap_mode() const; + void set_autowrap_mode(TextServer::AutowrapMode p_mode); + TextServer::AutowrapMode get_autowrap_mode() const; void set_width(float p_width); float get_width() const; @@ -234,7 +227,6 @@ public: ~Label3D(); }; -VARIANT_ENUM_CAST(Label3D::AutowrapMode); VARIANT_ENUM_CAST(Label3D::DrawFlags); VARIANT_ENUM_CAST(Label3D::AlphaCutMode); diff --git a/scene/3d/light_3d.cpp b/scene/3d/light_3d.cpp index 2568defe0f..6c999d85e2 100644 --- a/scene/3d/light_3d.cpp +++ b/scene/3d/light_3d.cpp @@ -176,6 +176,11 @@ Ref<Texture2D> Light3D::get_projector() const { return projector; } +void Light3D::owner_changed_notify() { + // For cases where owner changes _after_ entering tree (as example, editor editing). + _update_visibility(); +} + void Light3D::_update_visibility() { if (!is_inside_tree()) { return; @@ -277,13 +282,13 @@ void Light3D::_bind_methods() { ADD_GROUP("Light", "light_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "light_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_color", "get_color"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_energy", PROPERTY_HINT_RANGE, "0,16,0.01,or_greater"), "set_param", "get_param", PARAM_ENERGY); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_indirect_energy", PROPERTY_HINT_RANGE, "0,16,0.01,or_greater"), "set_param", "get_param", PARAM_INDIRECT_ENERGY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_ENERGY); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_indirect_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_INDIRECT_ENERGY); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_projector", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_projector", "get_projector"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_size", PROPERTY_HINT_RANGE, "0,1,0.01,or_greater"), "set_param", "get_param", PARAM_SIZE); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,radians"), "set_param", "get_param", PARAM_SIZE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_size", PROPERTY_HINT_RANGE, "0,1,0.001,or_greater,suffix:m"), "set_param", "get_param", PARAM_SIZE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,degrees"), "set_param", "get_param", PARAM_SIZE); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "light_negative"), "set_negative", "is_negative"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_specular", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_SPECULAR); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_specular", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_SPECULAR); ADD_PROPERTY(PropertyInfo(Variant::INT, "light_bake_mode", PROPERTY_HINT_ENUM, "Disabled,Static (VoxelGI/SDFGI/LightmapGI),Dynamic (VoxelGI/SDFGI only)"), "set_bake_mode", "get_bake_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "light_cull_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_cull_mask", "get_cull_mask"); ADD_GROUP("Shadow", "shadow_"); @@ -291,14 +296,13 @@ void Light3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_bias", PROPERTY_HINT_RANGE, "0,10,0.001"), "set_param", "get_param", PARAM_SHADOW_BIAS); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_normal_bias", PROPERTY_HINT_RANGE, "0,10,0.001"), "set_param", "get_param", PARAM_SHADOW_NORMAL_BIAS); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shadow_reverse_cull_face"), "set_shadow_reverse_cull_face", "get_shadow_reverse_cull_face"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_transmittance_bias", PROPERTY_HINT_RANGE, "-16,16,0.01"), "set_param", "get_param", PARAM_TRANSMITTANCE_BIAS); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_fog_fade", PROPERTY_HINT_RANGE, "0.01,10,0.01"), "set_param", "get_param", PARAM_SHADOW_VOLUMETRIC_FOG_FADE); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_blur", PROPERTY_HINT_RANGE, "0.1,8,0.01"), "set_param", "get_param", PARAM_SHADOW_BLUR); - ADD_GROUP("Distance Fade", "distance_fade_"); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_transmittance_bias", PROPERTY_HINT_RANGE, "-16,16,0.001"), "set_param", "get_param", PARAM_TRANSMITTANCE_BIAS); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_fog_fade", PROPERTY_HINT_RANGE, "0.001,10,0.001"), "set_param", "get_param", PARAM_SHADOW_VOLUMETRIC_FOG_FADE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "shadow_blur", PROPERTY_HINT_RANGE, "0,10,0.001"), "set_param", "get_param", PARAM_SHADOW_BLUR); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "distance_fade_enabled"), "set_enable_distance_fade", "is_distance_fade_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater"), "set_distance_fade_begin", "get_distance_fade_begin"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_shadow", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater"), "set_distance_fade_shadow", "get_distance_fade_shadow"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_length", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater"), "set_distance_fade_length", "get_distance_fade_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_distance_fade_begin", "get_distance_fade_begin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_shadow", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_distance_fade_shadow", "get_distance_fade_shadow"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_length", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_distance_fade_length", "get_distance_fade_length"); ADD_GROUP("Editor", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_only"), "set_editor_only", "is_editor_only"); ADD_GROUP("", ""); @@ -458,7 +462,7 @@ void DirectionalLight3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_split_2", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_param", "get_param", PARAM_SHADOW_SPLIT_2_OFFSET); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_split_3", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_param", "get_param", PARAM_SHADOW_SPLIT_3_OFFSET); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "directional_shadow_blend_splits"), "set_blend_splits", "is_blend_splits_enabled"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_fade_start", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_SHADOW_FADE_START); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_fade_start", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_param", "get_param", PARAM_SHADOW_FADE_START); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_max_distance", PROPERTY_HINT_RANGE, "0,8192,0.1,or_greater,exp"), "set_param", "get_param", PARAM_SHADOW_MAX_DISTANCE); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "directional_shadow_pancake_size", PROPERTY_HINT_RANGE, "0,1024,0.1,or_greater,exp"), "set_param", "get_param", PARAM_SHADOW_PANCAKE_SIZE); @@ -508,7 +512,7 @@ void OmniLight3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_shadow_mode"), &OmniLight3D::get_shadow_mode); ADD_GROUP("Omni", "omni_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "omni_range", PROPERTY_HINT_RANGE, "0,4096,0.1,or_greater,exp"), "set_param", "get_param", PARAM_RANGE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "omni_range", PROPERTY_HINT_RANGE, "0,4096,0.001,or_greater,exp"), "set_param", "get_param", PARAM_RANGE); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "omni_attenuation", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_param", "get_param", PARAM_ATTENUATION); ADD_PROPERTY(PropertyInfo(Variant::INT, "omni_shadow_mode", PROPERTY_HINT_ENUM, "Dual Paraboloid,Cube"), "set_shadow_mode", "get_shadow_mode"); @@ -539,8 +543,8 @@ TypedArray<String> SpotLight3D::get_configuration_warnings() const { void SpotLight3D::_bind_methods() { ADD_GROUP("Spot", "spot_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_range", PROPERTY_HINT_RANGE, "0,4096,0.1,or_greater,exp,suffix:m"), "set_param", "get_param", PARAM_RANGE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_range", PROPERTY_HINT_RANGE, "0,4096,0.001,or_greater,exp,suffix:m"), "set_param", "get_param", PARAM_RANGE); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_attenuation", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_param", "get_param", PARAM_ATTENUATION); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_angle", PROPERTY_HINT_RANGE, "0,180,0.1,degrees"), "set_param", "get_param", PARAM_SPOT_ANGLE); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_angle", PROPERTY_HINT_RANGE, "0,180,0.01,degrees"), "set_param", "get_param", PARAM_SPOT_ANGLE); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "spot_angle_attenuation", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_param", "get_param", PARAM_SPOT_ATTENUATION); } diff --git a/scene/3d/light_3d.h b/scene/3d/light_3d.h index 383fa644e5..6ff332df5a 100644 --- a/scene/3d/light_3d.h +++ b/scene/3d/light_3d.h @@ -85,6 +85,8 @@ private: // bind helpers + virtual void owner_changed_notify() override; + protected: RID light; diff --git a/scene/3d/lightmap_gi.cpp b/scene/3d/lightmap_gi.cpp index 5c63bdcf1d..a8eec4b1f3 100644 --- a/scene/3d/lightmap_gi.cpp +++ b/scene/3d/lightmap_gi.cpp @@ -73,7 +73,7 @@ void LightmapGIData::clear_users() { } void LightmapGIData::_set_user_data(const Array &p_data) { - ERR_FAIL_COND(p_data.size() <= 0); + ERR_FAIL_COND(p_data.is_empty()); ERR_FAIL_COND((p_data.size() % 4) != 0); for (int i = 0; i < p_data.size(); i += 4) { @@ -92,6 +92,95 @@ Array LightmapGIData::_get_user_data() const { return ret; } +void LightmapGIData::_set_light_textures_data(const Array &p_data) { + ERR_FAIL_COND(p_data.is_empty()); + + if (p_data.size() == 1) { + set_light_texture(p_data[0]); + } else { + Vector<Ref<Image>> images; + for (int i = 0; i < p_data.size(); i++) { + Ref<TextureLayered> texture = p_data[i]; + for (int j = 0; j < texture->get_layers(); j++) { + images.push_back(texture->get_layer_data(j)); + } + } + + Ref<Texture2DArray> combined_texture; + combined_texture.instantiate(); + + combined_texture->create_from_images(images); + set_light_texture(combined_texture); + } +} + +Array LightmapGIData::_get_light_textures_data() const { + Array ret; + if (light_texture.is_null()) { + return ret; + } + + Vector<Ref<Image>> images; + for (int i = 0; i < light_texture->get_layers(); i++) { + images.push_back(light_texture->get_layer_data(i)); + } + + int slice_count = images.size(); + int slice_width = images[0]->get_width(); + int slice_height = images[0]->get_height(); + + int slices_per_texture = Image::MAX_HEIGHT / slice_height; + int texture_count = Math::ceil(slice_count / (float)slices_per_texture); + + ret.resize(texture_count); + + String base_name = get_path().get_basename(); + + int last_count = slice_count % slices_per_texture; + for (int i = 0; i < texture_count; i++) { + int texture_slice_count = (i == texture_count - 1 && last_count != 0) ? last_count : slices_per_texture; + + Ref<Image> texture_image; + texture_image.instantiate(); + + texture_image->create(slice_width, slice_height * texture_slice_count, false, images[0]->get_format()); + + for (int j = 0; j < texture_slice_count; j++) { + texture_image->blit_rect(images[i * slices_per_texture + j], Rect2(0, 0, slice_width, slice_height), Point2(0, slice_height * j)); + } + + String texture_path = texture_count > 1 ? base_name + "_" + itos(i) + ".exr" : base_name + ".exr"; + + Ref<ConfigFile> config; + config.instantiate(); + + if (FileAccess::exists(texture_path + ".import")) { + config->load(texture_path + ".import"); + } + + config->set_value("remap", "importer", "2d_array_texture"); + config->set_value("remap", "type", "CompressedTexture2DArray"); + if (!config->has_section_key("params", "compress/mode")) { + config->set_value("params", "compress/mode", 2); //user may want another compression, so leave it be + } + config->set_value("params", "compress/channel_pack", 1); + config->set_value("params", "mipmaps/generate", false); + config->set_value("params", "slices/horizontal", 1); + config->set_value("params", "slices/vertical", texture_slice_count); + + config->save(texture_path + ".import"); + + Error err = texture_image->save_exr(texture_path, false); + ERR_FAIL_COND_V(err, ret); + ResourceLoader::import(texture_path); + Ref<TextureLayered> t = ResourceLoader::load(texture_path); //if already loaded, it will be updated on refocus? + ERR_FAIL_COND_V(t.is_null(), ret); + ret[i] = t; + } + + return ret; +} + RID LightmapGIData::get_rid() const { return lightmap; } @@ -188,6 +277,9 @@ void LightmapGIData::_bind_methods() { ClassDB::bind_method(D_METHOD("set_light_texture", "light_texture"), &LightmapGIData::set_light_texture); ClassDB::bind_method(D_METHOD("get_light_texture"), &LightmapGIData::get_light_texture); + ClassDB::bind_method(D_METHOD("_set_light_textures_data", "data"), &LightmapGIData::_set_light_textures_data); + ClassDB::bind_method(D_METHOD("_get_light_textures_data"), &LightmapGIData::_get_light_textures_data); + ClassDB::bind_method(D_METHOD("set_uses_spherical_harmonics", "uses_spherical_harmonics"), &LightmapGIData::set_uses_spherical_harmonics); ClassDB::bind_method(D_METHOD("is_using_spherical_harmonics"), &LightmapGIData::is_using_spherical_harmonics); @@ -199,7 +291,8 @@ void LightmapGIData::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_probe_data", "data"), &LightmapGIData::_set_probe_data); ClassDB::bind_method(D_METHOD("_get_probe_data"), &LightmapGIData::_get_probe_data); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_texture", PROPERTY_HINT_RESOURCE_TYPE, "TextureLayered"), "set_light_texture", "get_light_texture"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_texture", PROPERTY_HINT_RESOURCE_TYPE, "TextureLayered", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK), "set_light_texture", "get_light_texture"); // property usage default but no save + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "light_textures", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_light_textures_data", "_get_light_textures_data"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uses_spherical_harmonics", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "set_uses_spherical_harmonics", "is_using_spherical_harmonics"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "user_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_user_data", "_get_user_data"); ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "probe_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_probe_data", "_get_probe_data"); @@ -572,7 +665,7 @@ void LightmapGI::_plot_triangle_into_octree(GenProbesOctree *p_cell, float p_cel } } -void LightmapGI::_gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool, Vector3iHash> &positions_used, const AABB &p_bounds) { +void LightmapGI::_gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool> &positions_used, const AABB &p_bounds) { for (int i = 0; i < 8; i++) { Vector3i pos = p_cell->offset; if (i & 1) { @@ -841,7 +934,7 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa } LocalVector<Vector3> new_probe_positions; - HashMap<Vector3i, bool, Vector3iHash> positions_used; + HashMap<Vector3i, bool> positions_used; for (uint32_t i = 0; i < 8; i++) { //insert bounding endpoints Vector3i pos; if (i & 1) { @@ -953,53 +1046,6 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa return BAKE_ERROR_MESHES_INVALID; } - /* POSTBAKE: Save Textures */ - - Ref<TextureLayered> texture; - { - Vector<Ref<Image>> images; - for (int i = 0; i < lightmapper->get_bake_texture_count(); i++) { - images.push_back(lightmapper->get_bake_texture(i)); - } - //we assume they are all the same, so let's create a large one for saving - Ref<Image> large_image; - large_image.instantiate(); - - large_image->create(images[0]->get_width(), images[0]->get_height() * images.size(), false, images[0]->get_format()); - - for (int i = 0; i < lightmapper->get_bake_texture_count(); i++) { - large_image->blit_rect(images[i], Rect2(0, 0, images[i]->get_width(), images[i]->get_height()), Point2(0, images[i]->get_height() * i)); - } - - String base_path = p_image_data_path.get_basename() + ".exr"; - - Ref<ConfigFile> config; - - config.instantiate(); - if (FileAccess::exists(base_path + ".import")) { - config->load(base_path + ".import"); - } - - config->set_value("remap", "importer", "2d_array_texture"); - config->set_value("remap", "type", "CompressedTexture2DArray"); - if (!config->has_section_key("params", "compress/mode")) { - config->set_value("params", "compress/mode", 2); //user may want another compression, so leave it be - } - config->set_value("params", "compress/channel_pack", 1); - config->set_value("params", "mipmaps/generate", false); - config->set_value("params", "slices/horizontal", 1); - config->set_value("params", "slices/vertical", images.size()); - - config->save(base_path + ".import"); - - Error err = large_image->save_exr(base_path, false); - ERR_FAIL_COND_V(err, BAKE_ERROR_CANT_CREATE_IMAGE); - ResourceLoader::import(base_path); - Ref<Texture> t = ResourceLoader::load(base_path); //if already loaded, it will be updated on refocus? - ERR_FAIL_COND_V(t.is_null(), BAKE_ERROR_CANT_CREATE_IMAGE); - texture = t; - } - /* POSTBAKE: Save Light Data */ Ref<LightmapGIData> data; @@ -1011,6 +1057,17 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa data.instantiate(); } + Ref<Texture2DArray> texture; + { + Vector<Ref<Image>> images; + for (int i = 0; i < lightmapper->get_bake_texture_count(); i++) { + images.push_back(lightmapper->get_bake_texture(i)); + } + + texture.instantiate(); + texture->create_from_images(images); + } + data->set_light_texture(texture); data->set_uses_spherical_harmonics(directional); @@ -1161,8 +1218,8 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa /* Compute a BSP tree of the simplices, so it's easy to find the exact one */ } - Error err = ResourceSaver::save(p_image_data_path, data); data->set_path(p_image_data_path); + Error err = ResourceSaver::save(p_image_data_path, data); if (err != OK) { return BAKE_ERROR_CANT_CREATE_IMAGE; diff --git a/scene/3d/lightmap_gi.h b/scene/3d/lightmap_gi.h index d29d7a7c28..f7a23c776a 100644 --- a/scene/3d/lightmap_gi.h +++ b/scene/3d/lightmap_gi.h @@ -61,6 +61,8 @@ class LightmapGIData : public Resource { Array _get_user_data() const; void _set_probe_data(const Dictionary &p_data); Dictionary _get_probe_data() const; + void _set_light_textures_data(const Array &p_data); + Array _get_light_textures_data() const; protected: static void _bind_methods(); @@ -210,16 +212,8 @@ private: } }; - struct Vector3iHash { - _FORCE_INLINE_ static uint32_t hash(const Vector3i &p_vtx) { - uint32_t h = hash_djb2_one_32(p_vtx.x); - h = hash_djb2_one_32(p_vtx.y, h); - return hash_djb2_one_32(p_vtx.z, h); - } - }; - void _plot_triangle_into_octree(GenProbesOctree *p_cell, float p_cell_size, const Vector3 *p_triangle); - void _gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool, Vector3iHash> &positions_used, const AABB &p_bounds); + void _gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool> &positions_used, const AABB &p_bounds); protected: void _validate_property(PropertyInfo &property) const override; diff --git a/scene/3d/navigation_agent_3d.cpp b/scene/3d/navigation_agent_3d.cpp index 947d6012d5..e5ec444335 100644 --- a/scene/3d/navigation_agent_3d.cpp +++ b/scene/3d/navigation_agent_3d.cpp @@ -38,6 +38,9 @@ void NavigationAgent3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_avoidance_enabled", "enabled"), &NavigationAgent3D::set_avoidance_enabled); ClassDB::bind_method(D_METHOD("get_avoidance_enabled"), &NavigationAgent3D::get_avoidance_enabled); + ClassDB::bind_method(D_METHOD("set_path_desired_distance", "desired_distance"), &NavigationAgent3D::set_path_desired_distance); + ClassDB::bind_method(D_METHOD("get_path_desired_distance"), &NavigationAgent3D::get_path_desired_distance); + ClassDB::bind_method(D_METHOD("set_target_desired_distance", "desired_distance"), &NavigationAgent3D::set_target_desired_distance); ClassDB::bind_method(D_METHOD("get_target_desired_distance"), &NavigationAgent3D::get_target_desired_distance); @@ -65,8 +68,14 @@ void NavigationAgent3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_path_max_distance", "max_speed"), &NavigationAgent3D::set_path_max_distance); ClassDB::bind_method(D_METHOD("get_path_max_distance"), &NavigationAgent3D::get_path_max_distance); - ClassDB::bind_method(D_METHOD("set_navigable_layers", "navigable_layers"), &NavigationAgent3D::set_navigable_layers); - ClassDB::bind_method(D_METHOD("get_navigable_layers"), &NavigationAgent3D::get_navigable_layers); + ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationAgent3D::set_navigation_layers); + ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationAgent3D::get_navigation_layers); + + ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationAgent3D::set_navigation_layer_value); + ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationAgent3D::get_navigation_layer_value); + + ClassDB::bind_method(D_METHOD("set_navigation_map", "navigation_map"), &NavigationAgent3D::set_navigation_map); + ClassDB::bind_method(D_METHOD("get_navigation_map"), &NavigationAgent3D::get_navigation_map); ClassDB::bind_method(D_METHOD("set_target_location", "location"), &NavigationAgent3D::set_target_location); ClassDB::bind_method(D_METHOD("get_target_location"), &NavigationAgent3D::get_target_location); @@ -82,6 +91,7 @@ void NavigationAgent3D::_bind_methods() { ClassDB::bind_method(D_METHOD("_avoidance_done", "new_velocity"), &NavigationAgent3D::_avoidance_done); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_path_desired_distance", "get_path_desired_distance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_target_desired_distance", "get_target_desired_distance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_radius", "get_radius"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_height_offset", PROPERTY_HINT_RANGE, "-100.0,100,0.01,suffix:m"), "set_agent_height_offset", "get_agent_height_offset"); @@ -92,7 +102,7 @@ void NavigationAgent3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_max_distance", PROPERTY_HINT_RANGE, "0.01,100,0.1,suffix:m"), "set_path_max_distance", "get_path_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ignore_y"), "set_ignore_y", "get_ignore_y"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "avoidance_enabled"), "set_avoidance_enabled", "get_avoidance_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "navigable_layers", PROPERTY_HINT_LAYERS_3D_NAVIGATION), "set_navigable_layers", "get_navigable_layers"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "navigation_layers", PROPERTY_HINT_LAYERS_3D_NAVIGATION), "set_navigation_layers", "get_navigation_layers"); ADD_SIGNAL(MethodInfo("path_changed")); ADD_SIGNAL(MethodInfo("target_reached")); @@ -198,7 +208,11 @@ void NavigationAgent3D::set_agent_parent(Node *p_agent_parent) { if (Object::cast_to<Node3D>(p_agent_parent) != nullptr) { // place agent on navigation map first or else the RVO agent callback creation fails silently later agent_parent = Object::cast_to<Node3D>(p_agent_parent); - NavigationServer3D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_3d()->get_navigation_map()); + if (map_override.is_valid()) { + NavigationServer3D::get_singleton()->agent_set_map(get_rid(), map_override); + } else { + NavigationServer3D::get_singleton()->agent_set_map(get_rid(), agent_parent->get_world_3d()->get_navigation_map()); + } // create new avoidance callback if enabled set_avoidance_enabled(avoidance_enabled); } else { @@ -207,16 +221,53 @@ void NavigationAgent3D::set_agent_parent(Node *p_agent_parent) { } } -void NavigationAgent3D::set_navigable_layers(uint32_t p_layers) { - bool layers_changed = navigable_layers != p_layers; - navigable_layers = p_layers; - if (layers_changed) { +void NavigationAgent3D::set_navigation_layers(uint32_t p_navigation_layers) { + bool navigation_layers_changed = navigation_layers != p_navigation_layers; + navigation_layers = p_navigation_layers; + if (navigation_layers_changed) { _request_repath(); } } -uint32_t NavigationAgent3D::get_navigable_layers() const { - return navigable_layers; +uint32_t NavigationAgent3D::get_navigation_layers() const { + return navigation_layers; +} + +void NavigationAgent3D::set_navigation_layer_value(int p_layer_number, bool p_value) { + ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive."); + uint32_t _navigation_layers = get_navigation_layers(); + if (p_value) { + _navigation_layers |= 1 << (p_layer_number - 1); + } else { + _navigation_layers &= ~(1 << (p_layer_number - 1)); + } + set_navigation_layers(_navigation_layers); +} + +bool NavigationAgent3D::get_navigation_layer_value(int p_layer_number) const { + ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive."); + return get_navigation_layers() & (1 << (p_layer_number - 1)); +} + +void NavigationAgent3D::set_navigation_map(RID p_navigation_map) { + map_override = p_navigation_map; + NavigationServer3D::get_singleton()->agent_set_map(agent, map_override); + _request_repath(); +} + +RID NavigationAgent3D::get_navigation_map() const { + if (map_override.is_valid()) { + return map_override; + } else if (agent_parent != nullptr) { + return agent_parent->get_world_3d()->get_navigation_map(); + } + return RID(); +} + +void NavigationAgent3D::set_path_desired_distance(real_t p_dd) { + path_desired_distance = p_dd; } void NavigationAgent3D::set_target_desired_distance(real_t p_dd) { @@ -377,7 +428,11 @@ void NavigationAgent3D::update_navigation() { } if (reload_path) { - navigation_path = NavigationServer3D::get_singleton()->map_get_path(agent_parent->get_world_3d()->get_navigation_map(), o, target_location, true, navigable_layers); + if (map_override.is_valid()) { + navigation_path = NavigationServer3D::get_singleton()->map_get_path(map_override, o, target_location, true, navigation_layers); + } else { + navigation_path = NavigationServer3D::get_singleton()->map_get_path(agent_parent->get_world_3d()->get_navigation_map(), o, target_location, true, navigation_layers); + } navigation_finished = false; nav_path_index = 0; emit_signal(SNAME("path_changed")); @@ -390,7 +445,7 @@ void NavigationAgent3D::update_navigation() { // Check if we can advance the navigation path if (navigation_finished == false) { // Advances to the next far away location. - while (o.distance_to(navigation_path[nav_path_index] - Vector3(0, navigation_height_offset, 0)) < target_desired_distance) { + while (o.distance_to(navigation_path[nav_path_index] - Vector3(0, navigation_height_offset, 0)) < path_desired_distance) { nav_path_index += 1; if (nav_path_index == navigation_path.size()) { _check_distance_to_target(); diff --git a/scene/3d/navigation_agent_3d.h b/scene/3d/navigation_agent_3d.h index 633bf091d1..0a00d769c3 100644 --- a/scene/3d/navigation_agent_3d.h +++ b/scene/3d/navigation_agent_3d.h @@ -42,10 +42,12 @@ class NavigationAgent3D : public Node { RID agent; RID map_before_pause; + RID map_override; bool avoidance_enabled = false; - uint32_t navigable_layers = 1; + uint32_t navigation_layers = 1; + real_t path_desired_distance = 1.0; real_t target_desired_distance = 1.0; real_t radius = 0.0; real_t navigation_height_offset = 0.0; @@ -86,8 +88,19 @@ public: void set_agent_parent(Node *p_agent_parent); - void set_navigable_layers(uint32_t p_layers); - uint32_t get_navigable_layers() const; + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; + + void set_navigation_layer_value(int p_layer_number, bool p_value); + bool get_navigation_layer_value(int p_layer_number) const; + + void set_navigation_map(RID p_navigation_map); + RID get_navigation_map() const; + + void set_path_desired_distance(real_t p_dd); + real_t get_path_desired_distance() const { + return path_desired_distance; + } void set_target_desired_distance(real_t p_dd); real_t get_target_desired_distance() const { diff --git a/scene/3d/navigation_region_3d.cpp b/scene/3d/navigation_region_3d.cpp index dda1382814..2a8149c6f6 100644 --- a/scene/3d/navigation_region_3d.cpp +++ b/scene/3d/navigation_region_3d.cpp @@ -65,12 +65,30 @@ bool NavigationRegion3D::is_enabled() const { return enabled; } -void NavigationRegion3D::set_layers(uint32_t p_layers) { - NavigationServer3D::get_singleton()->region_set_layers(region, p_layers); +void NavigationRegion3D::set_navigation_layers(uint32_t p_navigation_layers) { + NavigationServer3D::get_singleton()->region_set_navigation_layers(region, p_navigation_layers); } -uint32_t NavigationRegion3D::get_layers() const { - return NavigationServer3D::get_singleton()->region_get_layers(region); +uint32_t NavigationRegion3D::get_navigation_layers() const { + return NavigationServer3D::get_singleton()->region_get_navigation_layers(region); +} + +void NavigationRegion3D::set_navigation_layer_value(int p_layer_number, bool p_value) { + ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive."); + uint32_t _navigation_layers = get_navigation_layers(); + if (p_value) { + _navigation_layers |= 1 << (p_layer_number - 1); + } else { + _navigation_layers &= ~(1 << (p_layer_number - 1)); + } + set_navigation_layers(_navigation_layers); +} + +bool NavigationRegion3D::get_navigation_layer_value(int p_layer_number) const { + ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive."); + ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive."); + return get_navigation_layers() & (1 << (p_layer_number - 1)); } void NavigationRegion3D::set_enter_cost(real_t p_enter_cost) { @@ -239,8 +257,11 @@ void NavigationRegion3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &NavigationRegion3D::set_enabled); ClassDB::bind_method(D_METHOD("is_enabled"), &NavigationRegion3D::is_enabled); - ClassDB::bind_method(D_METHOD("set_layers", "layers"), &NavigationRegion3D::set_layers); - ClassDB::bind_method(D_METHOD("get_layers"), &NavigationRegion3D::get_layers); + ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationRegion3D::set_navigation_layers); + ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationRegion3D::get_navigation_layers); + + ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationRegion3D::set_navigation_layer_value); + ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationRegion3D::get_navigation_layer_value); ClassDB::bind_method(D_METHOD("get_region_rid"), &NavigationRegion3D::get_region_rid); @@ -255,7 +276,7 @@ void NavigationRegion3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "navmesh", PROPERTY_HINT_RESOURCE_TYPE, "NavigationMesh"), "set_navigation_mesh", "get_navigation_mesh"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "layers", PROPERTY_HINT_LAYERS_3D_NAVIGATION), "set_layers", "get_layers"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "navigation_layers", PROPERTY_HINT_LAYERS_3D_NAVIGATION), "set_navigation_layers", "get_navigation_layers"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "enter_cost"), "set_enter_cost", "get_enter_cost"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "travel_cost"), "set_travel_cost", "get_travel_cost"); diff --git a/scene/3d/navigation_region_3d.h b/scene/3d/navigation_region_3d.h index 042684c5b7..aaaf5dd3b8 100644 --- a/scene/3d/navigation_region_3d.h +++ b/scene/3d/navigation_region_3d.h @@ -57,8 +57,11 @@ public: void set_enabled(bool p_enabled); bool is_enabled() const; - void set_layers(uint32_t p_layers); - uint32_t get_layers() const; + void set_navigation_layers(uint32_t p_navigation_layers); + uint32_t get_navigation_layers() const; + + void set_navigation_layer_value(int p_layer_number, bool p_value); + bool get_navigation_layer_value(int p_layer_number) const; RID get_region_rid() const; diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index a76d57a09f..6e36815f2b 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -984,7 +984,7 @@ void Node3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians", PROPERTY_USAGE_EDITOR), "set_rotation", "get_rotation"); ADD_PROPERTY(PropertyInfo(Variant::QUATERNION, "quaternion", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_quaternion", "get_quaternion"); ADD_PROPERTY(PropertyInfo(Variant::BASIS, "basis", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_basis", "get_basis"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale", PROPERTY_HINT_LINK, "", PROPERTY_USAGE_EDITOR), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::INT, "rotation_edit_mode", PROPERTY_HINT_ENUM, "Euler,Quaternion,Basis"), "set_rotation_edit_mode", "get_rotation_edit_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "rotation_order", PROPERTY_HINT_ENUM, "XYZ,XZY,YXZ,YZX,ZXY,ZYX"), "set_rotation_order", "get_rotation_order"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "top_level"), "set_as_top_level", "is_set_as_top_level"); diff --git a/scene/3d/occluder_instance_3d.cpp b/scene/3d/occluder_instance_3d.cpp index f848eaab2e..66d0a8c4e2 100644 --- a/scene/3d/occluder_instance_3d.cpp +++ b/scene/3d/occluder_instance_3d.cpp @@ -219,7 +219,7 @@ void QuadOccluder3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &QuadOccluder3D::set_size); ClassDB::bind_method(D_METHOD("get_size"), &QuadOccluder3D::get_size); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size"); } QuadOccluder3D::QuadOccluder3D() { @@ -285,7 +285,7 @@ void BoxOccluder3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &BoxOccluder3D::set_size); ClassDB::bind_method(D_METHOD("get_size"), &BoxOccluder3D::get_size); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size"); } BoxOccluder3D::BoxOccluder3D() { @@ -354,7 +354,7 @@ void SphereOccluder3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_radius", "radius"), &SphereOccluder3D::set_radius); ClassDB::bind_method(D_METHOD("get_radius"), &SphereOccluder3D::get_radius); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius"), "set_radius", "get_radius"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_NONE, "suffix:m"), "set_radius", "get_radius"); } SphereOccluder3D::SphereOccluder3D() { @@ -736,7 +736,7 @@ void OccluderInstance3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "occluder", PROPERTY_HINT_RESOURCE_TYPE, "Occluder3D"), "set_occluder", "get_occluder"); ADD_GROUP("Bake", "bake_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "bake_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_bake_mask", "get_bake_mask"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_simplification_distance", PROPERTY_HINT_RANGE, "0.0,2.0,0.01"), "set_bake_simplification_distance", "get_bake_simplification_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "bake_simplification_distance", PROPERTY_HINT_RANGE, "0.0,2.0,0.01,suffix:m"), "set_bake_simplification_distance", "get_bake_simplification_distance"); } OccluderInstance3D::OccluderInstance3D() { diff --git a/scene/3d/path_3d.cpp b/scene/3d/path_3d.cpp index 8c2b1c6889..e13cf6f9c8 100644 --- a/scene/3d/path_3d.cpp +++ b/scene/3d/path_3d.cpp @@ -157,10 +157,14 @@ void PathFollow3D::_update_transform(bool p_update_xyz_rot) { // for a discussion about why not Frenet frame. t.origin = pos; - - if (p_update_xyz_rot && delta_offset != 0) { // Only update rotation if some parameter has changed - i.e. not on addition to scene tree. - Vector3 t_prev = (pos - c->interpolate_baked(offset - delta_offset, cubic)).normalized(); - Vector3 t_cur = (c->interpolate_baked(offset + delta_offset, cubic) - pos).normalized(); + if (p_update_xyz_rot && prev_offset != offset) { // Only update rotation if some parameter has changed - i.e. not on addition to scene tree. + real_t sample_distance = bi * 0.01; + Vector3 t_prev_pos_a = c->interpolate_baked(prev_offset - sample_distance, cubic); + Vector3 t_prev_pos_b = c->interpolate_baked(prev_offset + sample_distance, cubic); + Vector3 t_cur_pos_a = c->interpolate_baked(offset - sample_distance, cubic); + Vector3 t_cur_pos_b = c->interpolate_baked(offset + sample_distance, cubic); + Vector3 t_prev = (t_prev_pos_a - t_prev_pos_b).normalized(); + Vector3 t_cur = (t_cur_pos_a - t_cur_pos_b).normalized(); Vector3 axis = t_prev.cross(t_cur); real_t dot = t_prev.dot(t_cur); @@ -303,7 +307,7 @@ void PathFollow3D::_bind_methods() { } void PathFollow3D::set_offset(real_t p_offset) { - delta_offset = p_offset - offset; + prev_offset = offset; offset = p_offset; if (path) { diff --git a/scene/3d/path_3d.h b/scene/3d/path_3d.h index e9ab557693..cb67a044d1 100644 --- a/scene/3d/path_3d.h +++ b/scene/3d/path_3d.h @@ -65,7 +65,7 @@ public: private: Path3D *path = nullptr; - real_t delta_offset = 0.0; // Change in offset since last _update_transform. + real_t prev_offset = 0.0; // Offset during the last _update_transform. real_t offset = 0.0; real_t h_offset = 0.0; real_t v_offset = 0.0; diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp index 982254c94d..30f7a025fa 100644 --- a/scene/3d/physics_body_3d.cpp +++ b/scene/3d/physics_body_3d.cpp @@ -261,8 +261,8 @@ void StaticBody3D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_physics_material_override"), &StaticBody3D::get_physics_material_override); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "get_physics_material_override"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "constant_linear_velocity"), "set_constant_linear_velocity", "get_constant_linear_velocity"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "constant_angular_velocity"), "set_constant_angular_velocity", "get_constant_angular_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "constant_linear_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_constant_linear_velocity", "get_constant_linear_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "constant_angular_velocity", PROPERTY_HINT_NONE, U"radians,suffix:\u00B0/s"), "set_constant_angular_velocity", "get_constant_angular_velocity"); } StaticBody3D::StaticBody3D(PhysicsServer3D::BodyMode p_mode) : @@ -1101,7 +1101,7 @@ void RigidDynamicBody3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp"); ADD_GROUP("Angular", "angular_"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity", PROPERTY_HINT_NONE, "suffix:rad/s"), "set_angular_velocity", "get_angular_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity", PROPERTY_HINT_NONE, U"radians,suffix:\u00B0/s"), "set_angular_velocity", "get_angular_velocity"); ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_angular_damp_mode", "get_angular_damp_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp"); ADD_GROUP("Constant Forces", "constant_"); @@ -2007,7 +2007,7 @@ void CharacterBody3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "floor_constant_speed"), "set_floor_constant_speed_enabled", "is_floor_constant_speed_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "floor_block_on_wall"), "set_floor_block_on_wall_enabled", "is_floor_block_on_wall_enabled"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_max_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians"), "set_floor_max_angle", "get_floor_max_angle"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,1,0.01,or_greater"), "set_floor_snap_length", "get_floor_snap_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "floor_snap_length", PROPERTY_HINT_RANGE, "0,1,0.01,or_greater,suffix:m"), "set_floor_snap_length", "get_floor_snap_length"); ADD_GROUP("Moving Platform", "moving_platform"); ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_apply_velocity_on_leave", PROPERTY_HINT_ENUM, "Always,Upward Only,Never", PROPERTY_USAGE_DEFAULT), "set_moving_platform_apply_velocity_on_leave", "get_moving_platform_apply_velocity_on_leave"); ADD_PROPERTY(PropertyInfo(Variant::INT, "moving_platform_floor_layers", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_moving_platform_floor_layers", "get_moving_platform_floor_layers"); @@ -2998,8 +2998,8 @@ void PhysicalBone3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_linear_damp", "get_linear_damp"); ADD_PROPERTY(PropertyInfo(Variant::INT, "angular_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_angular_damp_mode", "get_angular_damp_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), "set_angular_damp", "get_angular_damp"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_linear_velocity", "get_linear_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity", PROPERTY_HINT_NONE, U"radians,suffix:\u00B0/s"), "set_angular_velocity", "get_angular_velocity"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "can_sleep"), "set_can_sleep", "is_able_to_sleep"); BIND_ENUM_CONSTANT(DAMP_MODE_COMBINE); diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index ba2029788e..fbd5f31dd5 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -326,13 +326,11 @@ void Skeleton3D::_notification(int p_what) { case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { // This is active only if the skeleton animates the physical bones // and the state of the bone is not active. - if (Engine::get_singleton()->is_editor_hint()) { - if (animate_physical_bones) { - for (int i = 0; i < bones.size(); i += 1) { - if (bones[i].physical_bone) { - if (bones[i].physical_bone->is_simulating_physics() == false) { - bones[i].physical_bone->reset_to_rest_position(); - } + if (animate_physical_bones) { + for (int i = 0; i < bones.size(); i += 1) { + if (bones[i].physical_bone) { + if (bones[i].physical_bone->is_simulating_physics() == false) { + bones[i].physical_bone->reset_to_rest_position(); } } } diff --git a/scene/3d/skeleton_ik_3d.cpp b/scene/3d/skeleton_ik_3d.cpp index 55bbba26c3..2182c5ba11 100644 --- a/scene/3d/skeleton_ik_3d.cpp +++ b/scene/3d/skeleton_ik_3d.cpp @@ -396,7 +396,7 @@ void SkeletonIK3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_magnet"), "set_use_magnet", "is_using_magnet"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "magnet", PROPERTY_HINT_NONE, "suffix:m"), "set_magnet_position", "get_magnet_position"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "target_node"), "set_target_node", "get_target_node"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min_distance"), "set_min_distance", "get_min_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "min_distance", PROPERTY_HINT_NONE, "suffix:m"), "set_min_distance", "get_min_distance"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_iterations"), "set_max_iterations", "get_max_iterations"); } diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 8cb5081047..55b55d924c 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -333,11 +333,11 @@ void SpriteBase3D::_bind_methods() { ClassDB::bind_method(D_METHOD("_im_update"), &SpriteBase3D::_im_update); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "centered"), "set_centered", "is_centered"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset", PROPERTY_HINT_NONE, "suffix:px"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flip_h"), "set_flip_h", "is_flipped_h"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flip_v"), "set_flip_v", "is_flipped_v"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001"), "set_pixel_size", "get_pixel_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001,suffix:m"), "set_pixel_size", "get_pixel_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "axis", PROPERTY_HINT_ENUM, "X-Axis,Y-Axis,Z-Axis"), "set_axis", "get_axis"); ADD_GROUP("Flags", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "billboard", PROPERTY_HINT_ENUM, "Disabled,Enabled,Y-Billboard"), "set_billboard_mode", "get_billboard_mode"); @@ -792,10 +792,10 @@ void Sprite3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "hframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_hframes", "get_hframes"); ADD_PROPERTY(PropertyInfo(Variant::INT, "vframes", PROPERTY_HINT_RANGE, "1,16384,1"), "set_vframes", "get_vframes"); ADD_PROPERTY(PropertyInfo(Variant::INT, "frame"), "set_frame", "get_frame"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "frame_coords", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_frame_coords", "get_frame_coords"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "frame_coords", PROPERTY_HINT_NONE, "suffix:px", PROPERTY_USAGE_EDITOR), "set_frame_coords", "get_frame_coords"); ADD_GROUP("Region", "region_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "region_enabled"), "set_region_enabled", "is_region_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect", PROPERTY_HINT_NONE, "suffix:px"), "set_region_rect", "get_region_rect"); ADD_SIGNAL(MethodInfo("frame_changed")); ADD_SIGNAL(MethodInfo("texture_changed")); diff --git a/scene/3d/visual_instance_3d.cpp b/scene/3d/visual_instance_3d.cpp index e40c8bfa2b..6df50bc491 100644 --- a/scene/3d/visual_instance_3d.cpp +++ b/scene/3d/visual_instance_3d.cpp @@ -466,10 +466,10 @@ void GeometryInstance3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "gi_lightmap_scale", PROPERTY_HINT_ENUM, String::utf8("1×,2×,4×,8×")), "set_lightmap_scale", "get_lightmap_scale"); ADD_GROUP("Visibility Range", "visibility_range_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01"), "set_visibility_range_begin", "get_visibility_range_begin"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01"), "set_visibility_range_begin_margin", "get_visibility_range_begin_margin"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01"), "set_visibility_range_end", "get_visibility_range_end"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01"), "set_visibility_range_end_margin", "get_visibility_range_end_margin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_begin", "get_visibility_range_begin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_begin_margin", "get_visibility_range_begin_margin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end", "get_visibility_range_end"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end_margin", "get_visibility_range_end_margin"); ADD_PROPERTY(PropertyInfo(Variant::INT, "visibility_range_fade_mode", PROPERTY_HINT_ENUM, "Disabled,Self,Dependencies"), "set_visibility_range_fade_mode", "get_visibility_range_fade_mode"); //ADD_SIGNAL( MethodInfo("visibility_changed")); diff --git a/scene/3d/voxel_gi.cpp b/scene/3d/voxel_gi.cpp index 29e495ce1b..d81b59b3fc 100644 --- a/scene/3d/voxel_gi.cpp +++ b/scene/3d/voxel_gi.cpp @@ -476,7 +476,7 @@ void VoxelGI::_bind_methods() { ClassDB::set_method_flags(get_class_static(), _scs_create("debug_bake"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR); ADD_PROPERTY(PropertyInfo(Variant::INT, "subdiv", PROPERTY_HINT_ENUM, "64,128,256,512"), "set_subdiv", "get_subdiv"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents"), "set_extents", "get_extents"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_NONE, "suffix:m"), "set_extents", "get_extents"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "VoxelGIData", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE), "set_probe_data", "get_probe_data"); BIND_ENUM_CONSTANT(SUBDIV_64); diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index 17a99ed034..1d537837bd 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -375,14 +375,14 @@ void AnimationNodeOneShot::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_mode", PROPERTY_HINT_ENUM, "Blend,Add"), "set_mix_mode", "get_mix_mode"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fadein_time", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater"), "set_fadein_time", "get_fadein_time"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fadeout_time", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater"), "set_fadeout_time", "get_fadeout_time"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fadein_time", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater,suffix:s"), "set_fadein_time", "get_fadein_time"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fadeout_time", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater,suffix:s"), "set_fadeout_time", "get_fadeout_time"); ADD_GROUP("Auto Restart", "autorestart_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autorestart"), "set_autorestart", "has_autorestart"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "autorestart_delay", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater"), "set_autorestart_delay", "get_autorestart_delay"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "autorestart_random_delay", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater"), "set_autorestart_random_delay", "get_autorestart_random_delay"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "autorestart_delay", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater,suffix:s"), "set_autorestart_delay", "get_autorestart_delay"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "autorestart_random_delay", PROPERTY_HINT_RANGE, "0,60,0.01,or_greater,suffix:s"), "set_autorestart_random_delay", "get_autorestart_random_delay"); ADD_GROUP("", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sync"), "set_use_sync", "is_using_sync"); @@ -825,7 +825,7 @@ void AnimationNodeTransition::_bind_methods() { ClassDB::bind_method(D_METHOD("get_cross_fade_time"), &AnimationNodeTransition::get_cross_fade_time); ADD_PROPERTY(PropertyInfo(Variant::INT, "input_count", PROPERTY_HINT_RANGE, "0,64,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_enabled_inputs", "get_enabled_inputs"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,120,0.01"), "set_cross_fade_time", "get_cross_fade_time"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,120,0.01,suffix:s"), "set_cross_fade_time", "get_cross_fade_time"); for (int i = 0; i < MAX_INPUTS; i++) { ADD_PROPERTYI(PropertyInfo(Variant::STRING, "input_" + itos(i) + "/name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_input_caption", "get_input_caption", i); diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp index fcc4548929..8dcf538b8f 100644 --- a/scene/animation/animation_node_state_machine.cpp +++ b/scene/animation/animation_node_state_machine.cpp @@ -118,7 +118,7 @@ void AnimationNodeStateMachineTransition::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "switch_mode", PROPERTY_HINT_ENUM, "Immediate,Sync,At End"), "set_switch_mode", "get_switch_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_advance"), "set_auto_advance", "has_auto_advance"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "advance_condition"), "set_advance_condition", "get_advance_condition"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,240,0.01"), "set_xfade_time", "get_xfade_time"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,240,0.01,suffix:s"), "set_xfade_time", "get_xfade_time"); ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,32,1"), "set_priority", "get_priority"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled"); @@ -435,7 +435,7 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s // handles start_node: if previous state machine is pointing to a node inside the current state machine, starts the current machine from start_node to prev_local_to if (p_state_machine->start_node == current && p_state_machine->transitions[i].local_from == current) { - if (p_state_machine->prev_state_machine.is_valid()) { + if (p_state_machine->prev_state_machine != nullptr) { Ref<AnimationNodeStateMachinePlayback> prev_playback = p_state_machine->prev_state_machine->get_parameter("playback"); if (prev_playback.is_valid()) { @@ -471,9 +471,9 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s } if (next == p_state_machine->end_node) { - Ref<AnimationNodeStateMachine> prev_state_machine = p_state_machine->prev_state_machine; + AnimationNodeStateMachine *prev_state_machine = p_state_machine->prev_state_machine; - if (prev_state_machine.is_valid()) { + if (prev_state_machine != nullptr) { Ref<AnimationNodeStateMachinePlayback> prev_playback = prev_state_machine->get_parameter("playback"); if (prev_playback.is_valid()) { @@ -655,7 +655,7 @@ void AnimationNodeStateMachine::add_node(const StringName &p_name, Ref<Animation if (anodesm.is_valid()) { anodesm->state_machine_name = p_name; - anodesm->prev_state_machine = (Ref<AnimationNodeStateMachine>)this; + anodesm->prev_state_machine = this; } emit_changed(); @@ -821,7 +821,7 @@ void AnimationNodeStateMachine::_rename_transition(const StringName &p_name, con void AnimationNodeStateMachine::get_node_list(List<StringName> *r_nodes) const { List<StringName> nodes; for (const KeyValue<StringName, State> &E : states) { - if (E.key == end_node && !prev_state_machine.is_valid()) { + if (E.key == end_node && prev_state_machine == nullptr) { continue; } @@ -834,7 +834,7 @@ void AnimationNodeStateMachine::get_node_list(List<StringName> *r_nodes) const { } } -Ref<AnimationNodeStateMachine> AnimationNodeStateMachine::get_prev_state_machine() const { +AnimationNodeStateMachine *AnimationNodeStateMachine::get_prev_state_machine() const { return prev_state_machine; } @@ -862,10 +862,10 @@ int AnimationNodeStateMachine::find_transition(const StringName &p_from, const S return -1; } -bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Ref<AnimationNodeStateMachine>> p_parents) const { +bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<AnimationNodeStateMachine *> p_parents) { if (p_parents.is_empty()) { - Ref<AnimationNodeStateMachine> prev = (Ref<AnimationNodeStateMachine>)this; - while (prev.is_valid()) { + AnimationNodeStateMachine *prev = this; + while (prev != nullptr) { p_parents.push_back(prev); prev = prev->prev_state_machine; } @@ -874,7 +874,7 @@ bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Re if (states.has(p_name)) { Ref<AnimationNodeStateMachine> anodesm = states[p_name].node; - if (anodesm.is_valid() && p_parents.find(anodesm) != -1) { + if (anodesm.is_valid() && p_parents.find(anodesm.ptr()) != -1) { return false; } @@ -889,7 +889,7 @@ bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Re } if (path[0] == "..") { - if (prev_state_machine.is_valid()) { + if (prev_state_machine != nullptr) { return prev_state_machine->_can_connect(name.replace_first("../", ""), p_parents); } } else if (states.has(path[0])) { diff --git a/scene/animation/animation_node_state_machine.h b/scene/animation/animation_node_state_machine.h index 9eeac6a183..20f2d6f858 100644 --- a/scene/animation/animation_node_state_machine.h +++ b/scene/animation/animation_node_state_machine.h @@ -166,7 +166,7 @@ private: StringName playback = "playback"; StringName state_machine_name; - Ref<AnimationNodeStateMachine> prev_state_machine; + AnimationNodeStateMachine *prev_state_machine = nullptr; bool updating_transitions = false; Vector2 graph_offset; @@ -174,7 +174,7 @@ private: void _tree_changed(); void _remove_transition(const Ref<AnimationNodeStateMachineTransition> p_transition); void _rename_transition(const StringName &p_name, const StringName &p_new_name); - bool _can_connect(const StringName &p_name, const Vector<Ref<AnimationNodeStateMachine>> p_parents = Vector<Ref<AnimationNodeStateMachine>>()) const; + bool _can_connect(const StringName &p_name, Vector<AnimationNodeStateMachine *> p_parents = Vector<AnimationNodeStateMachine *>()); StringName _get_shortest_path(const StringName &p_path) const; protected: @@ -221,7 +221,7 @@ public: bool can_edit_node(const StringName &p_name) const; - Ref<AnimationNodeStateMachine> get_prev_state_machine() const; + AnimationNodeStateMachine *get_prev_state_machine() const; void set_graph_offset(const Vector2 &p_offset); Vector2 get_graph_offset() const; diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 921b59748c..2afe9ac35f 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -283,6 +283,9 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim, Node *p_root_ov setup_pass++; for (int i = 0; i < a->get_track_count(); i++) { + if (!a->track_is_enabled(i)) { + continue; + } p_anim->node_cache.write[i] = nullptr; Ref<Resource> resource; Vector<StringName> leftover_path; @@ -1909,7 +1912,7 @@ NodePath AnimationPlayer::get_root() const { void AnimationPlayer::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const { String pf = p_function; - if (p_idx == 0 && (p_function == "play" || p_function == "play_backwards" || p_function == "remove_animation" || p_function == "has_animation" || p_function == "queue")) { + if (p_idx == 0 && (p_function == "play" || p_function == "play_backwards" || p_function == "has_animation" || p_function == "queue")) { List<StringName> al; get_animation_list(&al); for (const StringName &name : al) { @@ -1991,8 +1994,8 @@ Ref<AnimatedValuesBackup> AnimationPlayer::apply_reset(bool p_user_initiated) { Ref<AnimationLibrary> al; al.instantiate(); al->add_animation(SceneStringNames::get_singleton()->RESET, reset_anim); - aux_player->add_animation_library("default", al); - aux_player->set_assigned_animation("default/" + SceneStringNames::get_singleton()->RESET); + aux_player->add_animation_library("", al); + aux_player->set_assigned_animation(SceneStringNames::get_singleton()->RESET); // Forcing the use of the original root because the scene where original player belongs may be not the active one Node *root = get_node(get_root()); Ref<AnimatedValuesBackup> old_values = aux_player->backup_animated_values(root); @@ -2095,7 +2098,7 @@ void AnimationPlayer::_bind_methods() { ADD_GROUP("Playback Options", "playback_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_process_callback", "get_process_callback"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_default_blend_time", "get_default_blend_time"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01,suffix:s"), "set_default_blend_time", "get_default_blend_time"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playback_active", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_active", "is_active"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_speed", PROPERTY_HINT_RANGE, "-64,64,0.01"), "set_speed_scale", "get_speed_scale"); ADD_PROPERTY(PropertyInfo(Variant::INT, "method_call_mode", PROPERTY_HINT_ENUM, "Deferred,Immediate"), "set_method_call_mode", "get_method_call_mode"); diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index 7e4bda14e5..d3eb37a345 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -155,8 +155,8 @@ private: static uint32_t hash(const TrackNodeCacheKey &p_key) { uint32_t h = hash_one_uint64(p_key.id); - h = hash_djb2_one_32(p_key.bone_idx, h); - return hash_djb2_one_32(p_key.blend_shape_idx, h); + h = hash_murmur3_one_32(p_key.bone_idx, h); + return hash_fmix32(hash_murmur3_one_32(p_key.blend_shape_idx, h)); } inline bool operator==(const TrackNodeCacheKey &p_right) const { diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index d34e8db093..bcd49d75fa 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -276,7 +276,7 @@ double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<Stri String new_path; AnimationNode *new_parent; - //this is the slowest part of processing, but as strings process in powers of 2, and the paths always exist, it will not result in that many allocations + // This is the slowest part of processing, but as strings process in powers of 2, and the paths always exist, it will not result in that many allocations. if (p_new_parent) { new_parent = p_new_parent; new_path = String(base_path) + String(p_subpath) + "/"; @@ -286,6 +286,9 @@ double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<Stri new_path = String(parent->base_path) + String(p_subpath) + "/"; } + // If tracks for blending don't exist for one of the animations, Rest or RESET animation is blended as init animation instead. + // Then, blend weight is 0 means that the init animation blend weight is 1. + // Therefore, the blending process must be executed even if the blend weight is 0. if (!p_seek && p_optimize && !any_valid) { return p_node->_pre_process(new_path, new_parent, state, 0, p_seek, p_seek_root, p_connections); } @@ -919,7 +922,6 @@ void AnimationTree::_process_graph(double p_delta) { state.valid = true; state.invalid_reasons = ""; state.animation_states.clear(); //will need to be re-created - state.valid = true; state.player = player; state.last_pass = process_pass; state.tree = this; @@ -966,6 +968,10 @@ void AnimationTree::_process_graph(double p_delta) { #endif // _3D_DISABLED for (int i = 0; i < a->get_track_count(); i++) { + if (!a->track_is_enabled(i)) { + continue; + } + NodePath path = a->track_get_path(i); ERR_CONTINUE(!track_cache.has(path)); @@ -1324,12 +1330,21 @@ void AnimationTree::_process_graph(double p_delta) { if (blend < CMP_EPSILON) { continue; //nothing to blend } - List<int> indices; - a->value_track_get_key_indices(i, time, delta, &indices, pingponged); - for (int &F : indices) { - Variant value = a->track_get_key_value(i, F); + if (seeked) { + int idx = a->track_find_key(i, time); + if (idx < 0) { + continue; + } + Variant value = a->track_get_key_value(i, idx); t->object->set_indexed(t->subpath, value); + } else { + List<int> indices; + a->value_track_get_key_indices(i, time, delta, &indices, pingponged); + for (int &F : indices) { + Variant value = a->track_get_key_value(i, F); + t->object->set_indexed(t->subpath, value); + } } } @@ -1338,20 +1353,27 @@ void AnimationTree::_process_graph(double p_delta) { if (blend < CMP_EPSILON) { continue; //nothing to blend } - if (!seeked && Math::is_zero_approx(delta)) { - continue; - } TrackCacheMethod *t = static_cast<TrackCacheMethod *>(track); - List<int> indices; - - a->method_track_get_key_indices(i, time, delta, &indices, pingponged); - - for (int &F : indices) { - StringName method = a->method_track_get_name(i, F); - Vector<Variant> params = a->method_track_get_params(i, F); + if (seeked) { + int idx = a->track_find_key(i, time); + if (idx < 0) { + continue; + } + StringName method = a->method_track_get_name(i, idx); + Vector<Variant> params = a->method_track_get_params(i, idx); if (can_call) { - _call_object(t->object, method, params, true); + _call_object(t->object, method, params, false); + } + } else { + List<int> indices; + a->method_track_get_key_indices(i, time, delta, &indices, pingponged); + for (int &F : indices) { + StringName method = a->method_track_get_name(i, F); + Vector<Variant> params = a->method_track_get_params(i, F); + if (can_call) { + _call_object(t->object, method, params, true); + } } } } break; diff --git a/scene/animation/root_motion_view.cpp b/scene/animation/root_motion_view.cpp index 3192f5f7cd..47f08219a9 100644 --- a/scene/animation/root_motion_view.cpp +++ b/scene/animation/root_motion_view.cpp @@ -183,8 +183,8 @@ void RootMotionView::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "animation_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "AnimationTree"), "set_animation_path", "get_animation_path"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_size", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater"), "set_cell_size", "get_cell_size"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater"), "set_radius", "get_radius"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_size", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater,suffix:m"), "set_cell_size", "get_cell_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater,suffix:m"), "set_radius", "get_radius"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "zero_y"), "set_zero_y", "get_zero_y"); } diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index c54897035a..1371c9cd57 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -35,7 +35,7 @@ Size2 Button::get_minimum_size() const { Size2 minsize = text_buf->get_size(); - if (clip_text) { + if (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { minsize.width = 0; } @@ -292,9 +292,9 @@ void Button::_notification(int p_what) { icon_ofs.x = 0.0; } int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width; - text_buf->set_width(clip_text ? text_clip : -1); + text_buf->set_width((clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? text_clip : -1); - int text_width = MAX(1, clip_text ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x); + int text_width = MAX(1, (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x); if (_internal_margin[SIDE_LEFT] > 0) { text_clip -= _internal_margin[SIDE_LEFT] + get_theme_constant(SNAME("h_separation")); @@ -364,6 +364,21 @@ void Button::_shape() { text_buf->set_direction((TextServer::Direction)text_direction); } text_buf->add_string(xl_text, font, font_size, opentype_features, (!language.is_empty()) ? language : TranslationServer::get_singleton()->get_tool_locale()); + text_buf->set_text_overrun_behavior(overrun_behavior); +} + +void Button::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) { + if (overrun_behavior != p_behavior) { + overrun_behavior = p_behavior; + _shape(); + + update(); + update_minimum_size(); + } +} + +TextServer::OverrunBehavior Button::get_text_overrun_behavior() const { + return overrun_behavior; } void Button::set_text(const String &p_text) { @@ -550,6 +565,8 @@ void Button::_get_property_list(List<PropertyInfo> *p_list) const { void Button::_bind_methods() { ClassDB::bind_method(D_METHOD("set_text", "text"), &Button::set_text); ClassDB::bind_method(D_METHOD("get_text"), &Button::get_text); + ClassDB::bind_method(D_METHOD("set_text_overrun_behavior", "overrun_behavior"), &Button::set_text_overrun_behavior); + ClassDB::bind_method(D_METHOD("get_text_overrun_behavior"), &Button::get_text_overrun_behavior); ClassDB::bind_method(D_METHOD("set_text_direction", "direction"), &Button::set_text_direction); ClassDB::bind_method(D_METHOD("get_text_direction"), &Button::get_text_direction); ClassDB::bind_method(D_METHOD("set_opentype_feature", "tag", "value"), &Button::set_opentype_feature); @@ -577,6 +594,7 @@ void Button::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "get_clip_text"); ADD_PROPERTY(PropertyInfo(Variant::INT, "alignment", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_text_alignment", "get_text_alignment"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "text_overrun_behavior", PROPERTY_HINT_ENUM, "Trim Nothing,Trim Characters,Trim Words,Ellipsis,Word Ellipsis"), "set_text_overrun_behavior", "get_text_overrun_behavior"); ADD_PROPERTY(PropertyInfo(Variant::INT, "icon_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_icon_alignment", "get_icon_alignment"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand_icon"), "set_expand_icon", "is_expand_icon"); } diff --git a/scene/gui/button.h b/scene/gui/button.h index 1abf86c986..a1d71195cb 100644 --- a/scene/gui/button.h +++ b/scene/gui/button.h @@ -46,6 +46,7 @@ private: Dictionary opentype_features; String language; TextDirection text_direction = TEXT_DIRECTION_AUTO; + TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING; Ref<Texture2D> icon; bool expand_icon = false; @@ -71,6 +72,9 @@ public: void set_text(const String &p_text); String get_text() const; + void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); + TextServer::OverrunBehavior get_text_overrun_behavior() const; + void set_text_direction(TextDirection p_text_direction); TextDirection get_text_direction() const; diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 5fff1e1df3..28d645e8f6 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -1108,7 +1108,7 @@ void ColorPicker::_screen_input(const Ref<InputEvent> &p_event) { Ref<Image> img = r->get_texture()->get_image(); if (img.is_valid() && !img->is_empty()) { Vector2 ofs = mev->get_global_position() - r->get_visible_rect().get_position(); - Color c = img->get_pixel(ofs.x, r->get_visible_rect().size.height - ofs.y); + Color c = img->get_pixel(ofs.x, ofs.y); set_pick_color(c); } @@ -1135,6 +1135,8 @@ void ColorPicker::_screen_pick_pressed() { screen->connect("gui_input", callable_mp(this, &ColorPicker::_screen_input)); // It immediately toggles off in the first press otherwise. screen->call_deferred(SNAME("connect"), "hidden", Callable(btn_pick, "set_pressed"), varray(false)); + } else { + screen->show(); } screen->raise(); #ifndef _MSC_VER diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index db78b4adb6..036d00345d 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -414,7 +414,7 @@ void Control::_get_property_list(List<PropertyInfo> *p_list) const { usage |= PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_CHECKED; } - p_list->push_back(PropertyInfo(Variant::INT, "theme_override_font_sizes/" + E, PROPERTY_HINT_RANGE, "1,256,1,or_greater", usage)); + p_list->push_back(PropertyInfo(Variant::INT, "theme_override_font_sizes/" + E, PROPERTY_HINT_RANGE, "1,256,1,or_greater,suffix:px", usage)); } } { @@ -478,6 +478,10 @@ void Control::_validate_property(PropertyInfo &property) const { } } + if (property.name == "scale") { + property.hint = PROPERTY_HINT_LINK; + } + // Validate which positioning properties should be displayed depending on the parent and the layout mode. Node *parent_node = get_parent_control(); if (!parent_node) { @@ -3282,7 +3286,7 @@ void Control::_bind_methods() { ADD_GROUP("Layout", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_contents"), "set_clip_contents", "is_clipping_contents"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimum_size"), "set_custom_minimum_size", "get_custom_minimum_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimum_size", PROPERTY_HINT_NONE, "suffix:px"), "set_custom_minimum_size", "get_custom_minimum_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "layout_direction", PROPERTY_HINT_ENUM, "Inherited,Locale,Left-to-Right,Right-to-Left"), "set_layout_direction", "get_layout_direction"); ADD_PROPERTY(PropertyInfo(Variant::INT, "layout_mode", PROPERTY_HINT_ENUM, "Position,Anchors,Container,Uncontrolled", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_layout_mode", "_get_layout_mode"); ADD_PROPERTY_DEFAULT("layout_mode", LayoutMode::LAYOUT_MODE_POSITION); @@ -3317,7 +3321,7 @@ void Control::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "suffix:px", PROPERTY_USAGE_NONE), "_set_global_position", "get_global_position"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "pivot_offset"), "set_pivot_offset", "get_pivot_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "pivot_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_pivot_offset", "get_pivot_offset"); ADD_SUBGROUP("Container Sizing", "size_flags_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_horizontal", PROPERTY_HINT_FLAGS, "Fill:1,Expand:2,Shrink Center:4,Shrink End:8"), "set_h_size_flags", "get_h_size_flags"); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 0bb96a18a5..192d214262 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -154,11 +154,11 @@ bool AcceptDialog::get_close_on_escape() const { } void AcceptDialog::set_autowrap(bool p_autowrap) { - label->set_autowrap_mode(p_autowrap ? Label::AUTOWRAP_WORD : Label::AUTOWRAP_OFF); + label->set_autowrap_mode(p_autowrap ? TextServer::AUTOWRAP_WORD : TextServer::AUTOWRAP_OFF); } bool AcceptDialog::has_autowrap() { - return label->get_autowrap_mode() != Label::AUTOWRAP_OFF; + return label->get_autowrap_mode() != TextServer::AUTOWRAP_OFF; } void AcceptDialog::register_text_enter(Control *p_line_edit) { diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 8ad55fc6ef..c219eafbf7 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -2317,14 +2317,14 @@ void GraphEdit::_bind_methods() { GDVIRTUAL_BIND(_get_connection_line, "from", "to") ADD_PROPERTY(PropertyInfo(Variant::BOOL, "right_disconnects"), "set_right_disconnects", "is_right_disconnects_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_offset"), "set_scroll_ofs", "get_scroll_ofs"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "snap_distance"), "set_snap", "get_snap"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scroll_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_scroll_ofs", "get_scroll_ofs"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "snap_distance", PROPERTY_HINT_NONE, "suffix:px"), "set_snap", "get_snap"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_snap"), "set_use_snap", "is_using_snap"); ADD_PROPERTY(PropertyInfo(Variant::INT, "panning_scheme", PROPERTY_HINT_ENUM, "Scroll Zooms,Scroll Pans"), "set_panning_scheme", "get_panning_scheme"); ADD_GROUP("Connection Lines", "connection_lines"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_curvature"), "set_connection_lines_curvature", "get_connection_lines_curvature"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_thickness"), "set_connection_lines_thickness", "get_connection_lines_thickness"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "connection_lines_thickness", PROPERTY_HINT_NONE, "suffix:px"), "set_connection_lines_thickness", "get_connection_lines_thickness"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "connection_lines_antialiased"), "set_connection_lines_antialiased", "is_connection_lines_antialiased"); ADD_GROUP("Zoom", ""); @@ -2336,7 +2336,7 @@ void GraphEdit::_bind_methods() { ADD_GROUP("Minimap", "minimap"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "minimap_enabled"), "set_minimap_enabled", "is_minimap_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimap_size"), "set_minimap_size", "get_minimap_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimap_size", PROPERTY_HINT_NONE, "suffix:px"), "set_minimap_size", "get_minimap_size"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "minimap_opacity"), "set_minimap_opacity", "get_minimap_opacity"); ADD_SIGNAL(MethodInfo("connection_request", PropertyInfo(Variant::STRING_NAME, "from"), PropertyInfo(Variant::INT, "from_slot"), PropertyInfo(Variant::STRING_NAME, "to"), PropertyInfo(Variant::INT, "to_slot"))); diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 5cb28a30e8..87706cd0d7 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -1107,7 +1107,7 @@ void GraphNode::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::STRING, "title"), "set_title", "get_title"); ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "language", PROPERTY_HINT_LOCALE_ID, ""), "set_language", "get_language"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position_offset"), "set_position_offset", "get_position_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_position_offset", "get_position_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_close"), "set_show_close_button", "is_close_button_visible"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resizable"), "set_resizable", "is_resizable"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selected"), "set_selected", "is_selected"); diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index 8b22f3722a..aeb5338022 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -1550,7 +1550,7 @@ bool ItemList::has_auto_height() const { return auto_height; } -void ItemList::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) { +void ItemList::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) { if (text_overrun_behavior != p_behavior) { text_overrun_behavior = p_behavior; for (int i = 0; i < items.size(); i++) { @@ -1561,7 +1561,7 @@ void ItemList::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavi } } -TextParagraph::OverrunBehavior ItemList::get_text_overrun_behavior() const { +TextServer::OverrunBehavior ItemList::get_text_overrun_behavior() const { return text_overrun_behavior; } @@ -1763,11 +1763,11 @@ void ItemList::_bind_methods() { ADD_GROUP("Columns", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_columns", PROPERTY_HINT_RANGE, "0,10,1,or_greater"), "set_max_columns", "get_max_columns"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "same_column_width"), "set_same_column_width", "is_same_column_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "fixed_column_width", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_fixed_column_width", "get_fixed_column_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "fixed_column_width", PROPERTY_HINT_RANGE, "0,100,1,or_greater,suffix:px"), "set_fixed_column_width", "get_fixed_column_width"); ADD_GROUP("Icon", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "icon_mode", PROPERTY_HINT_ENUM, "Top,Left"), "set_icon_mode", "get_icon_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "icon_scale"), "set_icon_scale", "get_icon_scale"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "fixed_icon_size"), "set_fixed_icon_size", "get_fixed_icon_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "fixed_icon_size", PROPERTY_HINT_NONE, "suffix:px"), "set_fixed_icon_size", "get_fixed_icon_size"); BIND_ENUM_CONSTANT(ICON_MODE_TOP); BIND_ENUM_CONSTANT(ICON_MODE_LEFT); diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h index ffbe7d055a..a15b090149 100644 --- a/scene/gui/item_list.h +++ b/scene/gui/item_list.h @@ -99,7 +99,7 @@ private: SelectMode select_mode = SELECT_SINGLE; IconMode icon_mode = ICON_MODE_LEFT; VScrollBar *scroll_bar = nullptr; - TextParagraph::OverrunBehavior text_overrun_behavior = TextParagraph::OVERRUN_TRIM_ELLIPSIS; + TextServer::OverrunBehavior text_overrun_behavior = TextServer::OVERRUN_TRIM_ELLIPSIS; uint64_t search_time_msec = 0; String search_string; @@ -188,8 +188,8 @@ public: void set_item_custom_fg_color(int p_idx, const Color &p_custom_fg_color); Color get_item_custom_fg_color(int p_idx) const; - void set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior); - TextParagraph::OverrunBehavior get_text_overrun_behavior() const; + void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); + TextServer::OverrunBehavior get_text_overrun_behavior() const; void select(int p_idx, bool p_single = true); void deselect(int p_idx); diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index eda3d40f63..82ab7c2e18 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -36,19 +36,19 @@ #include "servers/text_server.h" -void Label::set_autowrap_mode(Label::AutowrapMode p_mode) { +void Label::set_autowrap_mode(TextServer::AutowrapMode p_mode) { if (autowrap_mode != p_mode) { autowrap_mode = p_mode; lines_dirty = true; } update(); - if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) { + if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { update_minimum_size(); } } -Label::AutowrapMode Label::get_autowrap_mode() const { +TextServer::AutowrapMode Label::get_autowrap_mode() const { return autowrap_mode; } @@ -96,7 +96,7 @@ void Label::_shape() { int font_size = get_theme_font_size(SNAME("font_size")); ERR_FAIL_COND(font.is_null()); String text = (uppercase) ? TS->string_to_upper(xl_text, lang) : xl_text; - if (visible_chars >= 0 && visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { + if (visible_chars >= 0 && visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) { text = text.substr(0, visible_chars); } if (dirty) { @@ -121,16 +121,16 @@ void Label::_shape() { uint16_t autowrap_flags = TextServer::BREAK_MANDATORY; switch (autowrap_mode) { - case AUTOWRAP_WORD_SMART: + case TextServer::AUTOWRAP_WORD_SMART: autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_WORD: + case TextServer::AUTOWRAP_WORD: autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_ARBITRARY: + case TextServer::AUTOWRAP_ARBITRARY: autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_OFF: + case TextServer::AUTOWRAP_OFF: break; } PackedInt32Array line_breaks = TS->shaped_text_get_line_breaks(text_rid, width, 0, autowrap_flags); @@ -146,7 +146,7 @@ void Label::_shape() { return; } - if (autowrap_mode == AUTOWRAP_OFF) { + if (autowrap_mode == TextServer::AUTOWRAP_OFF) { minsize.width = 0.0f; for (int i = 0; i < lines_rid.size(); i++) { if (minsize.width < TS->shaped_text_get_size(lines_rid[i]).x) { @@ -156,31 +156,31 @@ void Label::_shape() { } if (lines_dirty) { - uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING; + uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM; switch (overrun_behavior) { - case OVERRUN_TRIM_WORD_ELLIPSIS: + case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_ELLIPSIS: + case TextServer::OVERRUN_TRIM_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_WORD: + case TextServer::OVERRUN_TRIM_WORD: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; break; - case OVERRUN_TRIM_CHAR: + case TextServer::OVERRUN_TRIM_CHAR: overrun_flags |= TextServer::OVERRUN_TRIM; break; - case OVERRUN_NO_TRIMMING: + case TextServer::OVERRUN_NO_TRIMMING: break; } // Fill after min_size calculation. - if (autowrap_mode != AUTOWRAP_OFF) { + if (autowrap_mode != TextServer::AUTOWRAP_OFF) { int visible_lines = get_visible_line_count(); bool lines_hidden = visible_lines > 0 && visible_lines < lines_rid.size(); if (lines_hidden) { @@ -215,7 +215,7 @@ void Label::_shape() { _update_visible(); - if (autowrap_mode == AUTOWRAP_OFF || !clip || overrun_behavior == OVERRUN_NO_TRIMMING) { + if (autowrap_mode == TextServer::AUTOWRAP_OFF || !clip || overrun_behavior == TextServer::OVERRUN_NO_TRIMMING) { update_minimum_size(); } } @@ -326,9 +326,9 @@ void Label::_notification(int p_what) { } int last_line = MIN(lines_rid.size(), lines_visible + lines_skipped); - bool trim_chars = (visible_chars >= 0) && (visible_chars_behavior == VC_CHARS_AFTER_SHAPING); - bool trim_glyphs_ltr = (visible_chars >= 0) && ((visible_chars_behavior == VC_GLYPHS_LTR) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && !rtl_layout)); - bool trim_glyphs_rtl = (visible_chars >= 0) && ((visible_chars_behavior == VC_GLYPHS_RTL) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && rtl_layout)); + bool trim_chars = (visible_chars >= 0) && (visible_chars_behavior == TextServer::VC_CHARS_AFTER_SHAPING); + bool trim_glyphs_ltr = (visible_chars >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_LTR) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && !rtl_layout)); + bool trim_glyphs_rtl = (visible_chars >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_RTL) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && rtl_layout)); // Get real total height. int total_glyphs = 0; @@ -377,7 +377,7 @@ void Label::_notification(int p_what) { ofs.y += TS->shaped_text_get_ascent(lines_rid[i]) + font->get_spacing(TextServer::SPACING_TOP); switch (horizontal_alignment) { case HORIZONTAL_ALIGNMENT_FILL: - if (rtl && autowrap_mode != AUTOWRAP_OFF) { + if (rtl && autowrap_mode != TextServer::AUTOWRAP_OFF) { ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width); } else { ofs.x = style->get_offset().x; @@ -554,10 +554,10 @@ Size2 Label::get_minimum_size() const { min_size.height = MAX(min_size.height, font->get_height(get_theme_font_size(SNAME("font_size"))) + font->get_spacing(TextServer::SPACING_TOP) + font->get_spacing(TextServer::SPACING_BOTTOM)); Size2 min_style = get_theme_stylebox(SNAME("normal"))->get_minimum_size(); - if (autowrap_mode != AUTOWRAP_OFF) { - return Size2(1, (clip || overrun_behavior != OVERRUN_NO_TRIMMING) ? 1 : min_size.height) + min_style; + if (autowrap_mode != TextServer::AUTOWRAP_OFF) { + return Size2(1, (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? 1 : min_size.height) + min_style; } else { - if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) { + if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { min_size.width = 1; } return min_size + min_style; @@ -719,18 +719,18 @@ bool Label::is_clipping_text() const { return clip; } -void Label::set_text_overrun_behavior(Label::OverrunBehavior p_behavior) { +void Label::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) { if (overrun_behavior != p_behavior) { overrun_behavior = p_behavior; lines_dirty = true; } update(); - if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) { + if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { update_minimum_size(); } } -Label::OverrunBehavior Label::get_text_overrun_behavior() const { +TextServer::OverrunBehavior Label::get_text_overrun_behavior() const { return overrun_behavior; } @@ -746,7 +746,7 @@ void Label::set_visible_characters(int p_amount) { } else { percent_visible = 1.0; } - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) { dirty = true; } update(); @@ -766,7 +766,7 @@ void Label::set_percent_visible(float p_percent) { visible_chars = get_total_character_count() * p_percent; percent_visible = p_percent; } - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) { dirty = true; } update(); @@ -777,11 +777,11 @@ float Label::get_percent_visible() const { return percent_visible; } -Label::VisibleCharactersBehavior Label::get_visible_characters_behavior() const { +TextServer::VisibleCharactersBehavior Label::get_visible_characters_behavior() const { return visible_chars_behavior; } -void Label::set_visible_characters_behavior(Label::VisibleCharactersBehavior p_behavior) { +void Label::set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior) { if (visible_chars_behavior != p_behavior) { visible_chars_behavior = p_behavior; dirty = true; @@ -909,23 +909,6 @@ void Label::_bind_methods() { ClassDB::bind_method(D_METHOD("set_structured_text_bidi_override_options", "args"), &Label::set_structured_text_bidi_override_options); ClassDB::bind_method(D_METHOD("get_structured_text_bidi_override_options"), &Label::get_structured_text_bidi_override_options); - BIND_ENUM_CONSTANT(AUTOWRAP_OFF); - BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART); - - BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS); - - BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING); - BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING); - BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO); - BIND_ENUM_CONSTANT(VC_GLYPHS_LTR); - BIND_ENUM_CONSTANT(VC_GLYPHS_RTL); - ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text"); ADD_PROPERTY(PropertyInfo(Variant::INT, "horizontal_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_horizontal_alignment", "get_horizontal_alignment"); ADD_PROPERTY(PropertyInfo(Variant::INT, "vertical_alignment", PROPERTY_HINT_ENUM, "Top,Center,Bottom,Fill"), "set_vertical_alignment", "get_vertical_alignment"); diff --git a/scene/gui/label.h b/scene/gui/label.h index f7b725928f..fac3d75a1b 100644 --- a/scene/gui/label.h +++ b/scene/gui/label.h @@ -36,38 +36,14 @@ class Label : public Control { GDCLASS(Label, Control); -public: - enum AutowrapMode { - AUTOWRAP_OFF, - AUTOWRAP_ARBITRARY, - AUTOWRAP_WORD, - AUTOWRAP_WORD_SMART - }; - - enum OverrunBehavior { - OVERRUN_NO_TRIMMING, - OVERRUN_TRIM_CHAR, - OVERRUN_TRIM_WORD, - OVERRUN_TRIM_ELLIPSIS, - OVERRUN_TRIM_WORD_ELLIPSIS, - }; - - enum VisibleCharactersBehavior { - VC_CHARS_BEFORE_SHAPING, - VC_CHARS_AFTER_SHAPING, - VC_GLYPHS_AUTO, - VC_GLYPHS_LTR, - VC_GLYPHS_RTL, - }; - private: HorizontalAlignment horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT; VerticalAlignment vertical_alignment = VERTICAL_ALIGNMENT_TOP; String text; String xl_text; - AutowrapMode autowrap_mode = AUTOWRAP_OFF; + TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_OFF; bool clip = false; - OverrunBehavior overrun_behavior = OVERRUN_NO_TRIMMING; + TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING; Size2 minsize; bool uppercase = false; @@ -85,7 +61,7 @@ private: float percent_visible = 1.0; - VisibleCharactersBehavior visible_chars_behavior = VC_CHARS_BEFORE_SHAPING; + TextServer::VisibleCharactersBehavior visible_chars_behavior = TextServer::VC_CHARS_BEFORE_SHAPING; int visible_chars = -1; int lines_skipped = 0; int max_lines_visible = -1; @@ -130,14 +106,14 @@ public: void set_structured_text_bidi_override_options(Array p_args); Array get_structured_text_bidi_override_options() const; - void set_autowrap_mode(AutowrapMode p_mode); - AutowrapMode get_autowrap_mode() const; + void set_autowrap_mode(TextServer::AutowrapMode p_mode); + TextServer::AutowrapMode get_autowrap_mode() const; void set_uppercase(bool p_uppercase); bool is_uppercase() const; - VisibleCharactersBehavior get_visible_characters_behavior() const; - void set_visible_characters_behavior(VisibleCharactersBehavior p_behavior); + TextServer::VisibleCharactersBehavior get_visible_characters_behavior() const; + void set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior); void set_visible_characters(int p_amount); int get_visible_characters() const; @@ -146,8 +122,8 @@ public: void set_clip_text(bool p_clip); bool is_clipping_text() const; - void set_text_overrun_behavior(OverrunBehavior p_behavior); - OverrunBehavior get_text_overrun_behavior() const; + void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); + TextServer::OverrunBehavior get_text_overrun_behavior() const; void set_percent_visible(float p_percent); float get_percent_visible() const; @@ -166,8 +142,4 @@ public: ~Label(); }; -VARIANT_ENUM_CAST(Label::AutowrapMode); -VARIANT_ENUM_CAST(Label::OverrunBehavior); -VARIANT_ENUM_CAST(Label::VisibleCharactersBehavior); - #endif diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp index 4f34ece86f..8fee10b19a 100644 --- a/scene/gui/nine_patch_rect.cpp +++ b/scene/gui/nine_patch_rect.cpp @@ -73,13 +73,13 @@ void NinePatchRect::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_texture", "get_texture"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect", PROPERTY_HINT_NONE, "suffix:px"), "set_region_rect", "get_region_rect"); ADD_GROUP("Patch Margin", "patch_margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_patch_margin", "get_patch_margin", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_patch_margin", "get_patch_margin", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_patch_margin", "get_patch_margin", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_patch_margin", "get_patch_margin", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "patch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_patch_margin", "get_patch_margin", SIDE_BOTTOM); ADD_GROUP("Axis Stretch", "axis_stretch_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "axis_stretch_horizontal", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_h_axis_stretch_mode", "get_h_axis_stretch_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "axis_stretch_vertical", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_v_axis_stretch_mode", "get_v_axis_stretch_mode"); diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp index 6532fc5934..c4396f636a 100644 --- a/scene/gui/popup.cpp +++ b/scene/gui/popup.cpp @@ -108,9 +108,7 @@ void Popup::_close_pressed() { _deinitialize_visible_parents(); - // Hide after returning to process events, but only if we don't - // get popped up in the interim. - call_deferred(SNAME("_popup_conditional_hide")); + call_deferred(SNAME("hide")); } void Popup::_post_popup() { @@ -118,15 +116,8 @@ void Popup::_post_popup() { popped_up = true; } -void Popup::_popup_conditional_hide() { - if (!popped_up) { - hide(); - } -} - void Popup::_bind_methods() { ADD_SIGNAL(MethodInfo("popup_hide")); - ClassDB::bind_method(D_METHOD("_popup_conditional_hide"), &Popup::_popup_conditional_hide); } Rect2i Popup::_popup_adjust_rect() const { diff --git a/scene/gui/popup.h b/scene/gui/popup.h index 27f46d4a97..b53c8be50f 100644 --- a/scene/gui/popup.h +++ b/scene/gui/popup.h @@ -48,8 +48,6 @@ class Popup : public Window { void _initialize_visible_parents(); void _deinitialize_visible_parents(); - void _parent_focused(); - protected: void _close_pressed(); virtual Rect2i _popup_adjust_rect() const override; @@ -57,7 +55,7 @@ protected: void _notification(int p_what); static void _bind_methods(); - void _popup_conditional_hide(); + virtual void _parent_focused(); virtual void _post_popup() override; diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 8303d6db57..5931c112eb 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -243,6 +243,29 @@ void PopupMenu::_activate_submenu(int p_over, bool p_by_keyboard) { } } +void PopupMenu::_parent_focused() { + if (is_embedded()) { + Point2 mouse_pos_adjusted; + Window *window_parent = Object::cast_to<Window>(get_parent()->get_viewport()); + while (window_parent) { + if (!window_parent->is_embedded()) { + mouse_pos_adjusted += window_parent->get_position(); + break; + } + + window_parent = Object::cast_to<Window>(window_parent->get_parent()->get_viewport()); + } + + Rect2 safe_area = DisplayServer::get_singleton()->window_get_popup_safe_rect(get_window_id()); + Point2 pos = DisplayServer::get_singleton()->mouse_get_position() - mouse_pos_adjusted; + if (safe_area == Rect2i() || !safe_area.has_point(pos)) { + Popup::_parent_focused(); + } else { + grab_focus(); + } + } +} + void PopupMenu::_submenu_timeout() { if (mouse_over == submenu_over) { _activate_submenu(mouse_over); @@ -1251,6 +1274,11 @@ Ref<Shortcut> PopupMenu::get_item_shortcut(int p_idx) const { return items[p_idx].shortcut; } +int PopupMenu::get_item_horizontal_offset(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, items.size(), 0); + return items[p_idx].h_ofs; +} + int PopupMenu::get_item_state(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, items.size(), -1); return items[p_idx].state; @@ -1316,7 +1344,7 @@ void PopupMenu::set_item_shortcut(int p_idx, const Ref<Shortcut> &p_shortcut, bo control->update(); } -void PopupMenu::set_item_h_offset(int p_idx, int p_offset) { +void PopupMenu::set_item_horizontal_offset(int p_idx, int p_offset) { if (p_idx < 0) { p_idx += get_item_count(); } @@ -1839,6 +1867,7 @@ void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("set_item_as_radio_checkable", "index", "enable"), &PopupMenu::set_item_as_radio_checkable); ClassDB::bind_method(D_METHOD("set_item_tooltip", "index", "tooltip"), &PopupMenu::set_item_tooltip); ClassDB::bind_method(D_METHOD("set_item_shortcut", "index", "shortcut", "global"), &PopupMenu::set_item_shortcut, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("set_item_horizontal_offset", "index", "offset"), &PopupMenu::set_item_horizontal_offset); ClassDB::bind_method(D_METHOD("set_item_multistate", "index", "state"), &PopupMenu::set_item_multistate); ClassDB::bind_method(D_METHOD("set_item_shortcut_disabled", "index", "disabled"), &PopupMenu::set_item_shortcut_disabled); @@ -1864,6 +1893,7 @@ void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("is_item_shortcut_disabled", "index"), &PopupMenu::is_item_shortcut_disabled); ClassDB::bind_method(D_METHOD("get_item_tooltip", "index"), &PopupMenu::get_item_tooltip); ClassDB::bind_method(D_METHOD("get_item_shortcut", "index"), &PopupMenu::get_item_shortcut); + ClassDB::bind_method(D_METHOD("get_item_horizontal_offset", "index"), &PopupMenu::get_item_horizontal_offset); ClassDB::bind_method(D_METHOD("set_current_index", "index"), &PopupMenu::set_current_index); ClassDB::bind_method(D_METHOD("get_current_index"), &PopupMenu::get_current_index); @@ -1895,7 +1925,7 @@ void PopupMenu::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_item_selection"), "set_hide_on_item_selection", "is_hide_on_item_selection"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_checkable_item_selection"), "set_hide_on_checkable_item_selection", "is_hide_on_checkable_item_selection"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_on_state_item_selection"), "set_hide_on_state_item_selection", "is_hide_on_state_item_selection"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "submenu_popup_delay"), "set_submenu_popup_delay", "get_submenu_popup_delay"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "submenu_popup_delay", PROPERTY_HINT_NONE, "suffix:s"), "set_submenu_popup_delay", "get_submenu_popup_delay"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_search"), "set_allow_search", "get_allow_search"); ADD_ARRAY_COUNT("Items", "item_count", "set_item_count", "get_item_count", "item_"); diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h index 12587b7e73..8218c6122e 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -148,6 +148,8 @@ public: // this value should be updated to reflect the new size. static const int ITEM_PROPERTY_SIZE = 10; + virtual void _parent_focused() override; + void add_item(const String &p_label, int p_id = -1, Key p_accel = Key::NONE); void add_icon_item(const Ref<Texture2D> &p_icon, const String &p_label, int p_id = -1, Key p_accel = Key::NONE); void add_check_item(const String &p_label, int p_id = -1, Key p_accel = Key::NONE); @@ -184,7 +186,7 @@ public: void set_item_as_radio_checkable(int p_idx, bool p_radio_checkable); void set_item_tooltip(int p_idx, const String &p_tooltip); void set_item_shortcut(int p_idx, const Ref<Shortcut> &p_shortcut, bool p_global = false); - void set_item_h_offset(int p_idx, int p_offset); + void set_item_horizontal_offset(int p_idx, int p_offset); void set_item_multistate(int p_idx, int p_state); void toggle_item_multistate(int p_idx); void set_item_shortcut_disabled(int p_idx, bool p_disabled); @@ -210,6 +212,7 @@ public: bool is_item_shortcut_disabled(int p_idx) const; String get_item_tooltip(int p_idx) const; Ref<Shortcut> get_item_shortcut(int p_idx) const; + int get_item_horizontal_offset(int p_idx) const; int get_item_state(int p_idx) const; void set_current_index(int p_idx); diff --git a/scene/gui/reference_rect.cpp b/scene/gui/reference_rect.cpp index ed79da5c22..5190a5a7d2 100644 --- a/scene/gui/reference_rect.cpp +++ b/scene/gui/reference_rect.cpp @@ -83,6 +83,6 @@ void ReferenceRect::_bind_methods() { ClassDB::bind_method(D_METHOD("set_editor_only", "enabled"), &ReferenceRect::set_editor_only); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "border_color"), "set_border_color", "get_border_color"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "border_width", PROPERTY_HINT_RANGE, "0.0,5.0,0.1,or_greater"), "set_border_width", "get_border_width"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "border_width", PROPERTY_HINT_RANGE, "0.0,5.0,0.1,or_greater,suffix:px"), "set_border_width", "get_border_width"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_only"), "set_editor_only", "get_editor_only"); } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index cf7bf930a5..0516c8e722 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -426,16 +426,16 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> uint16_t autowrap_flags = TextServer::BREAK_MANDATORY; switch (autowrap_mode) { - case AUTOWRAP_WORD_SMART: + case TextServer::AUTOWRAP_WORD_SMART: autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_WORD: + case TextServer::AUTOWRAP_WORD: autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_ARBITRARY: + case TextServer::AUTOWRAP_ARBITRARY: autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY; break; - case AUTOWRAP_OFF: + case TextServer::AUTOWRAP_OFF: break; } @@ -462,7 +462,7 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; int remaining_characters = visible_characters - l.char_offset; for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) { - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters <= 0) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters <= 0) { break; } switch (it->type) { @@ -501,7 +501,7 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> Dictionary font_ftr = _find_font_features(it); String lang = _find_language(it); String tx = t->text; - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters >= 0) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters >= 0) { tx = tx.substr(0, remaining_characters); } remaining_characters -= tx.length(); @@ -707,9 +707,9 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o bool rtl = (l.text_buf->get_direction() == TextServer::DIRECTION_RTL); bool lrtl = is_layout_rtl(); - bool trim_chars = (visible_characters >= 0) && (visible_chars_behavior == VC_CHARS_AFTER_SHAPING); - bool trim_glyphs_ltr = (visible_characters >= 0) && ((visible_chars_behavior == VC_GLYPHS_LTR) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && !lrtl)); - bool trim_glyphs_rtl = (visible_characters >= 0) && ((visible_chars_behavior == VC_GLYPHS_RTL) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && lrtl)); + bool trim_chars = (visible_characters >= 0) && (visible_chars_behavior == TextServer::VC_CHARS_AFTER_SHAPING); + bool trim_glyphs_ltr = (visible_characters >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_LTR) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && !lrtl)); + bool trim_glyphs_rtl = (visible_characters >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_RTL) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && lrtl)); int total_glyphs = (trim_glyphs_ltr || trim_glyphs_rtl) ? get_total_glyph_count() : 0; int visible_glyphs = total_glyphs * percent_visible; @@ -1243,8 +1243,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o // Draw glyphs. for (int j = 0; j < glyphs[i].repeat; j++) { + bool skip = (trim_chars && l.char_offset + glyphs[i].end > visible_characters) || (trim_glyphs_ltr && (r_processed_glyphs >= visible_glyphs)) || (trim_glyphs_rtl && (r_processed_glyphs < total_glyphs - visible_glyphs)); if (visible) { - bool skip = (trim_chars && l.char_offset + glyphs[i].end > visible_characters) || (trim_glyphs_ltr && (r_processed_glyphs >= visible_glyphs)) || (trim_glyphs_rtl && (r_processed_glyphs < total_glyphs - visible_glyphs)); if (!skip) { if (frid != RID()) { TS->font_draw_glyph(frid, ci, glyphs[i].font_size, p_ofs + fx_offset + off, gl, selected ? selection_fg : font_color); @@ -1254,6 +1254,27 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o } r_processed_glyphs++; } + if (skip) { + // End underline/overline/strikethrough is previous glyph is skipped. + if (ul_started) { + ul_started = false; + float y_off = TS->shaped_text_get_underline_position(rid); + float underline_width = TS->shaped_text_get_underline_thickness(rid) * get_theme_default_base_scale(); + draw_line(ul_start + Vector2(0, y_off), p_ofs + Vector2(off.x, off.y + y_off), ul_color, underline_width); + } + if (dot_ul_started) { + dot_ul_started = false; + float y_off = TS->shaped_text_get_underline_position(rid); + float underline_width = TS->shaped_text_get_underline_thickness(rid) * get_theme_default_base_scale(); + draw_dashed_line(dot_ul_start + Vector2(0, y_off), p_ofs + Vector2(off.x, off.y + y_off), dot_ul_color, underline_width, underline_width * 2); + } + if (st_started) { + st_started = false; + float y_off = -TS->shaped_text_get_ascent(rid) + TS->shaped_text_get_size(rid).y / 2; + float underline_width = TS->shaped_text_get_underline_thickness(rid) * get_theme_default_base_scale(); + draw_line(st_start + Vector2(0, y_off), p_ofs + Vector2(off.x, off.y + y_off), st_color, underline_width); + } + } off.x += glyphs[i].advance; } } @@ -4731,7 +4752,7 @@ String RichTextLabel::get_language() const { return language; } -void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) { +void RichTextLabel::set_autowrap_mode(TextServer::AutowrapMode p_mode) { if (autowrap_mode != p_mode) { _stop_thread(); @@ -4742,7 +4763,7 @@ void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) { } } -RichTextLabel::AutowrapMode RichTextLabel::get_autowrap_mode() const { +TextServer::AutowrapMode RichTextLabel::get_autowrap_mode() const { return autowrap_mode; } @@ -4757,7 +4778,7 @@ void RichTextLabel::set_percent_visible(float p_percent) { visible_characters = get_total_character_count() * p_percent; percent_visible = p_percent; } - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) { main->first_invalid_line.store(0); //invalidate ALL _validate_line_caches(); } @@ -4974,7 +4995,7 @@ void RichTextLabel::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bbcode_enabled"), "set_use_bbcode", "is_using_bbcode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "threaded"), "set_threaded", "is_threaded"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "progress_bar_delay"), "set_progress_bar_delay", "get_progress_bar_delay"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "progress_bar_delay", PROPERTY_HINT_NONE, "suffix:ms"), "set_progress_bar_delay", "get_progress_bar_delay"); ADD_PROPERTY(PropertyInfo(Variant::INT, "tab_size", PROPERTY_HINT_RANGE, "0,24,1"), "set_tab_size", "get_tab_size"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT), "set_text", "get_text"); @@ -5011,11 +5032,6 @@ void RichTextLabel::_bind_methods() { ADD_SIGNAL(MethodInfo("finished")); - BIND_ENUM_CONSTANT(AUTOWRAP_OFF); - BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD); - BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART); - BIND_ENUM_CONSTANT(LIST_NUMBERS); BIND_ENUM_CONSTANT(LIST_LETTERS); BIND_ENUM_CONSTANT(LIST_ROMAN); @@ -5048,19 +5064,13 @@ void RichTextLabel::_bind_methods() { BIND_ENUM_CONSTANT(ITEM_HINT); BIND_ENUM_CONSTANT(ITEM_DROPCAP); BIND_ENUM_CONSTANT(ITEM_CUSTOMFX); - - BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING); - BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING); - BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO); - BIND_ENUM_CONSTANT(VC_GLYPHS_LTR); - BIND_ENUM_CONSTANT(VC_GLYPHS_RTL); } -RichTextLabel::VisibleCharactersBehavior RichTextLabel::get_visible_characters_behavior() const { +TextServer::VisibleCharactersBehavior RichTextLabel::get_visible_characters_behavior() const { return visible_chars_behavior; } -void RichTextLabel::set_visible_characters_behavior(RichTextLabel::VisibleCharactersBehavior p_behavior) { +void RichTextLabel::set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior) { if (visible_chars_behavior != p_behavior) { _stop_thread(); @@ -5084,7 +5094,7 @@ void RichTextLabel::set_visible_characters(int p_visible) { percent_visible = (float)p_visible / (float)total_char_count; } } - if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) { + if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) { main->first_invalid_line.store(0); //invalidate ALL _validate_line_caches(); } diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 93e57058b0..c697320976 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -40,13 +40,6 @@ class RichTextLabel : public Control { GDCLASS(RichTextLabel, Control); public: - enum AutowrapMode { - AUTOWRAP_OFF, - AUTOWRAP_ARBITRARY, - AUTOWRAP_WORD, - AUTOWRAP_WORD_SMART - }; - enum ListType { LIST_NUMBERS, LIST_LETTERS, @@ -84,14 +77,6 @@ public: ITEM_CUSTOMFX }; - enum VisibleCharactersBehavior { - VC_CHARS_BEFORE_SHAPING, - VC_CHARS_AFTER_SHAPING, - VC_GLYPHS_AUTO, - VC_GLYPHS_LTR, - VC_GLYPHS_RTL, - }; - enum MenuItems { MENU_COPY, MENU_SELECT_ALL, @@ -384,7 +369,7 @@ private: VScrollBar *vscroll = nullptr; - AutowrapMode autowrap_mode = AUTOWRAP_WORD_SMART; + TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_WORD_SMART; bool scroll_visible = false; bool scroll_follow = false; @@ -460,7 +445,7 @@ private: int visible_characters = -1; float percent_visible = 1.0; - VisibleCharactersBehavior visible_chars_behavior = VC_CHARS_BEFORE_SHAPING; + TextServer::VisibleCharactersBehavior visible_chars_behavior = TextServer::VC_CHARS_BEFORE_SHAPING; bool _is_click_inside_selection() const; void _find_click(ItemFrame *p_frame, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr, bool *r_outside = nullptr); @@ -664,8 +649,8 @@ public: void set_language(const String &p_language); String get_language() const; - void set_autowrap_mode(AutowrapMode p_mode); - AutowrapMode get_autowrap_mode() const; + void set_autowrap_mode(TextServer::AutowrapMode p_mode); + TextServer::AutowrapMode get_autowrap_mode() const; void set_structured_text_bidi_override(TextServer::StructuredTextParser p_parser); TextServer::StructuredTextParser get_structured_text_bidi_override() const; @@ -683,8 +668,8 @@ public: void set_percent_visible(float p_percent); float get_percent_visible() const; - VisibleCharactersBehavior get_visible_characters_behavior() const; - void set_visible_characters_behavior(VisibleCharactersBehavior p_behavior); + TextServer::VisibleCharactersBehavior get_visible_characters_behavior() const; + void set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior); void set_effects(Array p_effects); Array get_effects(); @@ -698,9 +683,7 @@ public: ~RichTextLabel(); }; -VARIANT_ENUM_CAST(RichTextLabel::AutowrapMode); VARIANT_ENUM_CAST(RichTextLabel::ListType); VARIANT_ENUM_CAST(RichTextLabel::ItemType); -VARIANT_ENUM_CAST(RichTextLabel::VisibleCharactersBehavior); #endif // RICH_TEXT_LABEL_H diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index e1b0e8cca8..f387f91a8b 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -622,7 +622,7 @@ void ScrollBar::_bind_methods() { ADD_SIGNAL(MethodInfo("scrolling")); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "custom_step", PROPERTY_HINT_RANGE, "-1,4096"), "set_custom_step", "get_custom_step"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "custom_step", PROPERTY_HINT_RANGE, "-1,4096,suffix:px"), "set_custom_step", "get_custom_step"); } ScrollBar::ScrollBar(Orientation p_orientation) { diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 135bad4689..871cc520e9 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -578,8 +578,8 @@ void ScrollContainer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "follow_focus"), "set_follow_focus", "is_following_focus"); ADD_GROUP("Scroll", "scroll_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_horizontal"), "set_h_scroll", "get_h_scroll"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_vertical"), "set_v_scroll", "get_v_scroll"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_horizontal", PROPERTY_HINT_NONE, "suffix:px"), "set_h_scroll", "get_h_scroll"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_vertical", PROPERTY_HINT_NONE, "suffix:px"), "set_v_scroll", "get_v_scroll"); ADD_PROPERTY(PropertyInfo(Variant::INT, "horizontal_scroll_mode", PROPERTY_HINT_ENUM, "Disabled,Auto,Always Show,Never Show"), "set_horizontal_scroll_mode", "get_horizontal_scroll_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "vertical_scroll_mode", PROPERTY_HINT_ENUM, "Disabled,Auto,Always Show,Never Show"), "set_vertical_scroll_mode", "get_vertical_scroll_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_deadzone"), "set_deadzone", "get_deadzone"); diff --git a/scene/gui/split_container.cpp b/scene/gui/split_container.cpp index 6845d46721..d7aa516ee6 100644 --- a/scene/gui/split_container.cpp +++ b/scene/gui/split_container.cpp @@ -377,7 +377,7 @@ void SplitContainer::_bind_methods() { ADD_SIGNAL(MethodInfo("dragged", PropertyInfo(Variant::INT, "offset"))); - ADD_PROPERTY(PropertyInfo(Variant::INT, "split_offset"), "set_split_offset", "get_split_offset"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "split_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_split_offset", "get_split_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collapsed"), "set_collapsed", "is_collapsed"); ADD_PROPERTY(PropertyInfo(Variant::INT, "dragger_visibility", PROPERTY_HINT_ENUM, "Visible,Hidden,Hidden and Collapsed"), "set_dragger_visibility", "get_dragger_visibility"); diff --git a/scene/gui/tab_bar.cpp b/scene/gui/tab_bar.cpp index fec8d11bef..b4c90596f9 100644 --- a/scene/gui/tab_bar.cpp +++ b/scene/gui/tab_bar.cpp @@ -1606,7 +1606,7 @@ void TabBar::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "tab_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right"), "set_tab_alignment", "get_tab_alignment"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_tabs"), "set_clip_tabs", "get_clip_tabs"); ADD_PROPERTY(PropertyInfo(Variant::INT, "tab_close_display_policy", PROPERTY_HINT_ENUM, "Show Never,Show Active Only,Show Always"), "set_tab_close_display_policy", "get_tab_close_display_policy"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "max_tab_width", PROPERTY_HINT_RANGE, "0,99999,1"), "set_max_tab_width", "get_max_tab_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_tab_width", PROPERTY_HINT_RANGE, "0,99999,1,suffix:px"), "set_max_tab_width", "get_max_tab_width"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scrolling_enabled"), "set_scrolling_enabled", "get_scrolling_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "drag_to_rearrange_enabled"), "set_drag_to_rearrange_enabled", "get_drag_to_rearrange_enabled"); ADD_PROPERTY(PropertyInfo(Variant::INT, "tabs_rearrange_group"), "set_tabs_rearrange_group", "get_tabs_rearrange_group"); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 8e948203f1..d9a91590f7 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -5420,19 +5420,19 @@ void TextEdit::_bind_methods() { ADD_GROUP("Scroll", "scroll_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_smooth"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_v_scroll_speed"), "set_v_scroll_speed", "get_v_scroll_speed"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_v_scroll_speed", PROPERTY_HINT_NONE, "suffix:px/s"), "set_v_scroll_speed", "get_v_scroll_speed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scroll_past_end_of_file"), "set_scroll_past_end_of_file_enabled", "is_scroll_past_end_of_file_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_vertical"), "set_v_scroll", "get_v_scroll"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_horizontal"), "set_h_scroll", "get_h_scroll"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "scroll_vertical", PROPERTY_HINT_NONE, "suffix:px"), "set_v_scroll", "get_v_scroll"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "scroll_horizontal", PROPERTY_HINT_NONE, "suffix:px"), "set_h_scroll", "get_h_scroll"); ADD_GROUP("Minimap", "minimap_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "minimap_draw"), "set_draw_minimap", "is_drawing_minimap"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "minimap_width"), "set_minimap_width", "get_minimap_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "minimap_width", PROPERTY_HINT_NONE, "suffix:px"), "set_minimap_width", "get_minimap_width"); ADD_GROUP("Caret", "caret_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "caret_type", PROPERTY_HINT_ENUM, "Line,Block"), "set_caret_type", "get_caret_type"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_blink"), "set_caret_blink_enabled", "is_caret_blink_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01"), "set_caret_blink_speed", "get_caret_blink_speed"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "caret_blink_speed", PROPERTY_HINT_RANGE, "0.1,10,0.01,suffix:s"), "set_caret_blink_speed", "get_caret_blink_speed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_move_on_right_click"), "set_move_caret_on_right_click_enabled", "is_move_caret_on_right_click_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_mid_grapheme"), "set_caret_mid_grapheme_enabled", "is_caret_mid_grapheme_enabled"); diff --git a/scene/gui/texture_progress_bar.cpp b/scene/gui/texture_progress_bar.cpp index 081d065efe..94e0a6f226 100644 --- a/scene/gui/texture_progress_bar.cpp +++ b/scene/gui/texture_progress_bar.cpp @@ -633,16 +633,16 @@ void TextureProgressBar::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "nine_patch_stretch"), "set_nine_patch_stretch", "get_nine_patch_stretch"); ADD_GROUP("Stretch Margin", "stretch_margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1"), "set_stretch_margin", "get_stretch_margin", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_left", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_stretch_margin", "get_stretch_margin", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_top", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_stretch_margin", "get_stretch_margin", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_right", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_stretch_margin", "get_stretch_margin", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "stretch_margin_bottom", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_stretch_margin", "get_stretch_margin", SIDE_BOTTOM); ADD_GROUP("Textures", "texture_"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_under", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_under_texture", "get_under_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_over", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_over_texture", "get_over_texture"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_progress", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_progress_texture", "get_progress_texture"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_progress_offset"), "set_texture_progress_offset", "get_texture_progress_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_progress_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_texture_progress_offset", "get_texture_progress_offset"); ADD_GROUP("Tint", "tint_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_under"), "set_tint_under", "get_tint_under"); @@ -652,7 +652,7 @@ void TextureProgressBar::_bind_methods() { ADD_GROUP("Radial Fill", "radial_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radial_initial_angle", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider,degrees"), "set_radial_initial_angle", "get_radial_initial_angle"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radial_fill_degrees", PROPERTY_HINT_RANGE, "0.0,360.0,0.1,slider,degrees"), "set_fill_degrees", "get_fill_degrees"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "radial_center_offset"), "set_radial_center_offset", "get_radial_center_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "radial_center_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_radial_center_offset", "get_radial_center_offset"); BIND_ENUM_CONSTANT(FILL_LEFT_TO_RIGHT); BIND_ENUM_CONSTANT(FILL_RIGHT_TO_LEFT); diff --git a/scene/gui/video_stream_player.cpp b/scene/gui/video_stream_player.cpp index 20bc9a1028..122e36904b 100644 --- a/scene/gui/video_stream_player.cpp +++ b/scene/gui/video_stream_player.cpp @@ -448,7 +448,7 @@ void VideoStreamPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "has_autoplay"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "paused"), "set_paused", "is_paused"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand"), "set_expand", "has_expand"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "buffering_msec", PROPERTY_HINT_RANGE, "10,1000"), "set_buffering_msec", "get_buffering_msec"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "buffering_msec", PROPERTY_HINT_RANGE, "10,1000,suffix:ms"), "set_buffering_msec", "get_buffering_msec"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "stream_position", PROPERTY_HINT_RANGE, "0,1280000,0.1", PROPERTY_USAGE_NONE), "set_stream_position", "get_stream_position"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp index 20f3f82a4e..3dc358a6c2 100644 --- a/scene/main/canvas_item.cpp +++ b/scene/main/canvas_item.cpp @@ -239,7 +239,7 @@ void CanvasItem::_enter_canvas() { get_viewport()->gui_reset_canvas_sort_index(); } - get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, SNAME("_top_level_raise_self")); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, group, SNAME("_top_level_raise_self")); } else { CanvasItem *parent = get_parent_item(); @@ -320,7 +320,7 @@ void CanvasItem::_notification(int p_what) { } if (group != StringName()) { - get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_top_level_raise_self"); + get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, group, "_top_level_raise_self"); } else { CanvasItem *p = get_parent_item(); ERR_FAIL_COND(!p); diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index da96246de2..3a071ef542 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -328,10 +328,10 @@ void CanvasLayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "layer", PROPERTY_HINT_RANGE, "-128,128,1"), "set_layer", "get_layer"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible"); ADD_GROUP("Transform", ""); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset", PROPERTY_HINT_NONE, "suffix:px"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); - ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform"), "set_transform", "get_transform"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale", PROPERTY_HINT_LINK), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "suffix:px"), "set_transform", "get_transform"); ADD_GROUP("", ""); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "custom_viewport", PROPERTY_HINT_RESOURCE_TYPE, "Viewport", PROPERTY_USAGE_NONE), "set_custom_viewport", "get_custom_viewport"); ADD_GROUP("Follow Viewport", "follow_viewport"); diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp index 34b0e19d31..9a23bc65bf 100644 --- a/scene/main/http_request.cpp +++ b/scene/main/http_request.cpp @@ -607,12 +607,12 @@ void HTTPRequest::_bind_methods() { ClassDB::bind_method(D_METHOD("set_https_proxy", "host", "port"), &HTTPRequest::set_https_proxy); ADD_PROPERTY(PropertyInfo(Variant::STRING, "download_file", PROPERTY_HINT_FILE), "set_download_file", "get_download_file"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "download_chunk_size", PROPERTY_HINT_RANGE, "256,16777216"), "set_download_chunk_size", "get_download_chunk_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "download_chunk_size", PROPERTY_HINT_RANGE, "256,16777216,suffix:B"), "set_download_chunk_size", "get_download_chunk_size"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_threads"), "set_use_threads", "is_using_threads"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "accept_gzip"), "set_accept_gzip", "is_accepting_gzip"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "body_size_limit", PROPERTY_HINT_RANGE, "-1,2000000000"), "set_body_size_limit", "get_body_size_limit"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "body_size_limit", PROPERTY_HINT_RANGE, "-1,2000000000,suffix:B"), "set_body_size_limit", "get_body_size_limit"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_redirects", PROPERTY_HINT_RANGE, "-1,64"), "set_max_redirects", "get_max_redirects"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "timeout", PROPERTY_HINT_RANGE, "0,3600,0.1,or_greater"), "set_timeout", "get_timeout"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "timeout", PROPERTY_HINT_RANGE, "0,3600,0.1,or_greater,suffix:s"), "set_timeout", "get_timeout"); ADD_SIGNAL(MethodInfo("request_completed", PropertyInfo(Variant::INT, "result"), PropertyInfo(Variant::INT, "response_code"), PropertyInfo(Variant::PACKED_STRING_ARRAY, "headers"), PropertyInfo(Variant::PACKED_BYTE_ARRAY, "body"))); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 27f240164c..a30eb036db 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -300,7 +300,7 @@ void Node::_propagate_exit_tree() { if (data.parent) { Variant c = this; const Variant *cptr = &c; - data.parent->emit_signalp(SNAME("child_exited_tree"), &cptr, 1); + data.parent->emit_signalp(SNAME("child_exiting_tree"), &cptr, 1); } // exit groups @@ -420,6 +420,9 @@ void Node::move_child_notify(Node *p_child) { // to be used when not wanted } +void Node::owner_changed_notify() { +} + void Node::set_physics_process(bool p_process) { if (data.physics_process == p_process) { return; @@ -1544,6 +1547,8 @@ void Node::_set_owner_nocheck(Node *p_owner) { data.owner = p_owner; data.owner->data.owned.push_back(this); data.OW = data.owner->data.owned.back(); + + owner_changed_notify(); } void Node::_release_unique_name_in_owner() { @@ -2973,7 +2978,7 @@ void Node::_bind_methods() { ADD_SIGNAL(MethodInfo("tree_exiting")); ADD_SIGNAL(MethodInfo("tree_exited")); ADD_SIGNAL(MethodInfo("child_entered_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node"))); - ADD_SIGNAL(MethodInfo("child_exited_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node"))); + ADD_SIGNAL(MethodInfo("child_exiting_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node"))); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_name", "get_name"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "unique_name_in_owner", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_unique_name_in_owner", "is_unique_name_in_owner"); diff --git a/scene/main/node.h b/scene/main/node.h index 8de6c1ce69..5b7bc0a587 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -208,6 +208,7 @@ protected: virtual void add_child_notify(Node *p_child); virtual void remove_child_notify(Node *p_child); virtual void move_child_notify(Node *p_child); + virtual void owner_changed_notify(); void _propagate_replace_owner(Node *p_owner, Node *p_by_owner); diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 14daf2c108..dd77877c7d 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -386,7 +386,7 @@ void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group } void SceneTree::notify_group(const StringName &p_group, int p_notification) { - notify_group_flags(0, p_group, p_notification); + notify_group_flags(GROUP_CALL_DEFAULT, p_group, p_notification); } void SceneTree::set_group(const StringName &p_group, const String &p_name, const Variant &p_value) { @@ -1373,15 +1373,15 @@ SceneTree::SceneTree() { root->set_as_audio_listener_2d(true); current_scene = nullptr; - const int msaa_mode = GLOBAL_DEF("rendering/anti_aliasing/quality/msaa", 0); + const int msaa_mode = GLOBAL_DEF_BASIC("rendering/anti_aliasing/quality/msaa", 0); ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/quality/msaa", PropertyInfo(Variant::INT, "rendering/anti_aliasing/quality/msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Average),4× (Slow),8× (Slowest)"))); root->set_msaa(Viewport::MSAA(msaa_mode)); - const int ssaa_mode = GLOBAL_DEF("rendering/anti_aliasing/quality/screen_space_aa", 0); + const int ssaa_mode = GLOBAL_DEF_BASIC("rendering/anti_aliasing/quality/screen_space_aa", 0); ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/quality/screen_space_aa", PropertyInfo(Variant::INT, "rendering/anti_aliasing/quality/screen_space_aa", PROPERTY_HINT_ENUM, "Disabled (Fastest),FXAA (Fast)")); root->set_screen_space_aa(Viewport::ScreenSpaceAA(ssaa_mode)); - const bool use_taa = GLOBAL_DEF("rendering/anti_aliasing/quality/use_taa", false); + const bool use_taa = GLOBAL_DEF_BASIC("rendering/anti_aliasing/quality/use_taa", false); root->set_use_taa(use_taa); const bool use_debanding = GLOBAL_DEF("rendering/anti_aliasing/quality/use_debanding", false); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 0e00e51181..1ad011f867 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -4049,8 +4049,8 @@ void SubViewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_clear_mode", "mode"), &SubViewport::set_clear_mode); ClassDB::bind_method(D_METHOD("get_clear_mode"), &SubViewport::get_clear_mode); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size_2d_override"), "set_size_2d_override", "get_size_2d_override"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size", PROPERTY_HINT_NONE, "suffix:px"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size_2d_override", PROPERTY_HINT_NONE, "suffix:px"), "set_size_2d_override", "get_size_2d_override"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "size_2d_override_stretch"), "set_size_2d_override_stretch", "is_size_2d_override_stretch_enabled"); ADD_GROUP("Render Target", "render_target_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "render_target_clear_mode", PROPERTY_HINT_ENUM, "Always,Never,Next Frame"), "set_clear_mode", "get_clear_mode"); diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 9b347ed7c8..69fb5fdf07 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -111,31 +111,19 @@ Size2i Window::get_real_size() const { void Window::set_max_size(const Size2i &p_max_size) { max_size = p_max_size; - if (window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_max_size(max_size, window_id); - } _update_window_size(); } Size2i Window::get_max_size() const { - if (window_id != DisplayServer::INVALID_WINDOW_ID) { - max_size = DisplayServer::get_singleton()->window_get_max_size(window_id); - } return max_size; } void Window::set_min_size(const Size2i &p_min_size) { min_size = p_min_size; - if (!wrap_controls && window_id != DisplayServer::INVALID_WINDOW_ID) { - DisplayServer::get_singleton()->window_set_min_size(min_size, window_id); - } _update_window_size(); } Size2i Window::get_min_size() const { - if (window_id != DisplayServer::INVALID_WINDOW_ID) { - min_size = DisplayServer::get_singleton()->window_get_min_size(window_id); - } return min_size; } @@ -165,14 +153,26 @@ void Window::set_flag(Flags p_flag, bool p_enabled) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { +#ifdef TOOLS_ENABLED + if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + DisplayServer::get_singleton()->window_set_flag(DisplayServer::WindowFlags(p_flag), p_enabled, window_id); + } +#else DisplayServer::get_singleton()->window_set_flag(DisplayServer::WindowFlags(p_flag), p_enabled, window_id); +#endif } } bool Window::get_flag(Flags p_flag) const { ERR_FAIL_INDEX_V(p_flag, FLAG_MAX, false); if (window_id != DisplayServer::INVALID_WINDOW_ID) { +#ifdef TOOLS_ENABLED + if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + flags[p_flag] = DisplayServer::get_singleton()->window_get_flag(DisplayServer::WindowFlags(p_flag), window_id); + } +#else flags[p_flag] = DisplayServer::get_singleton()->window_get_flag(DisplayServer::WindowFlags(p_flag), window_id); +#endif } return flags[p_flag]; } @@ -255,7 +255,15 @@ void Window::_make_window() { #endif DisplayServer::get_singleton()->window_set_title(tr_title, window_id); DisplayServer::get_singleton()->window_attach_instance_id(get_instance_id(), window_id); +#ifdef TOOLS_ENABLED + if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive); + } else { + DisplayServer::get_singleton()->window_set_exclusive(window_id, false); + } +#else DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive); +#endif _update_window_size(); @@ -437,10 +445,12 @@ void Window::set_visible(bool p_visible) { if (transient_parent) { if (exclusive && visible) { #ifdef TOOLS_ENABLED - if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) { + if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child."); transient_parent->exclusive_child = this; } +#else + transient_parent->exclusive_child = this; #endif } else { if (transient_parent->exclusive_child == this) { @@ -488,7 +498,13 @@ void Window::_make_transient() { window->transient_children.insert(this); if (is_inside_tree() && is_visible() && exclusive) { if (transient_parent->exclusive_child == nullptr) { +#ifdef TOOLS_ENABLED + if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + transient_parent->exclusive_child = this; + } +#else transient_parent->exclusive_child = this; +#endif } else if (transient_parent->exclusive_child != this) { ERR_PRINT("Making child transient exclusive, but parent has another exclusive child"); } @@ -531,13 +547,27 @@ void Window::set_exclusive(bool p_exclusive) { exclusive = p_exclusive; if (!embedder && window_id != DisplayServer::INVALID_WINDOW_ID) { +#ifdef TOOLS_ENABLED + if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive); + } else { + DisplayServer::get_singleton()->window_set_exclusive(window_id, false); + } +#else DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive); +#endif } if (transient_parent) { if (p_exclusive && is_inside_tree() && is_visible()) { ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child."); +#ifdef TOOLS_ENABLED + if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) { + transient_parent->exclusive_child = this; + } +#else transient_parent->exclusive_child = this; +#endif } else { if (transient_parent->exclusive_child == this) { transient_parent->exclusive_child = nullptr; @@ -579,6 +609,7 @@ void Window::_update_window_size() { } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { DisplayServer::get_singleton()->window_set_size(size, window_id); DisplayServer::get_singleton()->window_set_min_size(size_limit, window_id); + DisplayServer::get_singleton()->window_set_max_size(max_size, window_id); } //update the viewport @@ -1111,7 +1142,7 @@ void Window::popup(const Rect2i &p_screen_rect) { // Send a focus-out notification when opening a Window Manager Popup. SceneTree *scene_tree = get_tree(); if (scene_tree) { - scene_tree->notify_group("_viewports", NOTIFICATION_WM_WINDOW_FOCUS_OUT); + scene_tree->notify_group_flags(SceneTree::GROUP_CALL_DEFERRED, "_viewports", NOTIFICATION_WM_WINDOW_FOCUS_OUT); } } @@ -1591,8 +1622,8 @@ void Window::_bind_methods() { ClassDB::bind_method(D_METHOD("popup_centered_clamped", "minsize", "fallback_ratio"), &Window::popup_centered_clamped, DEFVAL(Size2i()), DEFVAL(0.75)); ADD_PROPERTY(PropertyInfo(Variant::STRING, "title"), "set_title", "get_title"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "position"), "set_position", "get_position"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "position", PROPERTY_HINT_NONE, "suffix:px"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size", PROPERTY_HINT_NONE, "suffix:px"), "set_size", "get_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Windowed,Minimized,Maximized,Fullscreen"), "set_mode", "get_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "current_screen"), "set_current_screen", "get_current_screen"); @@ -1609,8 +1640,8 @@ void Window::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "popup_window"), "set_flag", "get_flag", FLAG_POPUP); ADD_GROUP("Limits", ""); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "min_size"), "set_min_size", "get_min_size"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "max_size"), "set_max_size", "get_max_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "min_size", PROPERTY_HINT_NONE, "suffix:px"), "set_min_size", "get_min_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "max_size", PROPERTY_HINT_NONE, "suffix:px"), "set_max_size", "get_max_size"); ADD_GROUP("Content Scale", "content_scale_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "content_scale_size"), "set_content_scale_size", "get_content_scale_size"); diff --git a/scene/multiplayer/multiplayer_synchronizer.cpp b/scene/multiplayer/multiplayer_synchronizer.cpp index 78cec9ee10..68f6e54fa8 100644 --- a/scene/multiplayer/multiplayer_synchronizer.cpp +++ b/scene/multiplayer/multiplayer_synchronizer.cpp @@ -88,14 +88,15 @@ Error MultiplayerSynchronizer::set_state(const List<NodePath> &p_properties, Obj void MultiplayerSynchronizer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_root_path", "path"), &MultiplayerSynchronizer::set_root_path); ClassDB::bind_method(D_METHOD("get_root_path"), &MultiplayerSynchronizer::get_root_path); - ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_path"), "set_root_path", "get_root_path"); ClassDB::bind_method(D_METHOD("set_replication_interval", "milliseconds"), &MultiplayerSynchronizer::set_replication_interval); ClassDB::bind_method(D_METHOD("get_replication_interval"), &MultiplayerSynchronizer::get_replication_interval); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "replication_interval", PROPERTY_HINT_RANGE, "0,5,0.001"), "set_replication_interval", "get_replication_interval"); ClassDB::bind_method(D_METHOD("set_replication_config", "config"), &MultiplayerSynchronizer::set_replication_config); ClassDB::bind_method(D_METHOD("get_replication_config"), &MultiplayerSynchronizer::get_replication_config); + + ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_path"), "set_root_path", "get_root_path"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "replication_interval", PROPERTY_HINT_RANGE, "0,5,0.001,suffix:s"), "set_replication_interval", "get_replication_interval"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "replication_config", PROPERTY_HINT_RESOURCE_TYPE, "SceneReplicationConfig"), "set_replication_config", "get_replication_config"); } diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index dbbbb72a49..8ae4872d14 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -3829,7 +3829,7 @@ void Animation::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.001,99999,0.001,suffix:s"), "set_length", "get_length"); ADD_PROPERTY(PropertyInfo(Variant::INT, "loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Ping-Pong"), "set_loop_mode", "get_loop_mode"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "step", PROPERTY_HINT_RANGE, "0,4096,0.001"), "set_step", "get_step"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "step", PROPERTY_HINT_RANGE, "0,4096,0.001,suffix:s"), "set_step", "get_step"); ADD_SIGNAL(MethodInfo("tracks_changed")); diff --git a/scene/resources/animation_library.cpp b/scene/resources/animation_library.cpp index 361bfd0cb3..5f725b2fbe 100644 --- a/scene/resources/animation_library.cpp +++ b/scene/resources/animation_library.cpp @@ -143,9 +143,9 @@ void AnimationLibrary::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_data"), &AnimationLibrary::_get_data); ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "_set_data", "_get_data"); - ADD_SIGNAL(MethodInfo("animation_added", PropertyInfo(Variant::OBJECT, "name", PROPERTY_HINT_RESOURCE_TYPE, "Animation"))); - ADD_SIGNAL(MethodInfo("animation_removed", PropertyInfo(Variant::OBJECT, "name", PROPERTY_HINT_RESOURCE_TYPE, "Animation"))); - ADD_SIGNAL(MethodInfo("animation_renamed", PropertyInfo(Variant::OBJECT, "name", PROPERTY_HINT_RESOURCE_TYPE, "Animation"), PropertyInfo(Variant::OBJECT, "to_name", PROPERTY_HINT_RESOURCE_TYPE, "Animation"))); + ADD_SIGNAL(MethodInfo("animation_added", PropertyInfo(Variant::STRING_NAME, "name"))); + ADD_SIGNAL(MethodInfo("animation_removed", PropertyInfo(Variant::STRING_NAME, "name"))); + ADD_SIGNAL(MethodInfo("animation_renamed", PropertyInfo(Variant::STRING_NAME, "name"), PropertyInfo(Variant::STRING_NAME, "to_name"))); } AnimationLibrary::AnimationLibrary() { } diff --git a/scene/resources/canvas_item_material.h b/scene/resources/canvas_item_material.h index 7c44c125a8..160c67d6b1 100644 --- a/scene/resources/canvas_item_material.h +++ b/scene/resources/canvas_item_material.h @@ -64,7 +64,7 @@ private: uint32_t key = 0; static uint32_t hash(const MaterialKey &p_key) { - return hash_djb2_one_32(p_key.key); + return hash_murmur3_one_32(p_key.key); } bool operator==(const MaterialKey &p_key) const { return key == p_key.key; diff --git a/scene/resources/concave_polygon_shape_3d.h b/scene/resources/concave_polygon_shape_3d.h index 4711e38468..a265590edd 100644 --- a/scene/resources/concave_polygon_shape_3d.h +++ b/scene/resources/concave_polygon_shape_3d.h @@ -43,8 +43,8 @@ class ConcavePolygonShape3D : public Shape3D { Vector3 a; Vector3 b; static uint32_t hash(const DrawEdge &p_edge) { - uint32_t h = hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.a)); - return hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.b), h); + uint32_t h = hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.a)); + return hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.b), h); } bool operator==(const DrawEdge &p_edge) const { return (a == p_edge.a && b == p_edge.b); diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index f6ffc8db53..854bd34d6a 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -1298,7 +1298,7 @@ void Environment::_bind_methods() { ADD_GROUP("SSIL", "ssil_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssil_enabled"), "set_ssil_enabled", "is_ssil_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssil_radius", PROPERTY_HINT_RANGE, "0.01,16,0.01,or_greater"), "set_ssil_radius", "get_ssil_radius"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssil_radius", PROPERTY_HINT_RANGE, "0.01,16,0.01,or_greater,suffix:m"), "set_ssil_radius", "get_ssil_radius"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssil_intensity", PROPERTY_HINT_RANGE, "0,16,0.01,or_greater"), "set_ssil_intensity", "get_ssil_intensity"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssil_sharpness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssil_sharpness", "get_ssil_sharpness"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssil_normal_rejection", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssil_normal_rejection", "get_ssil_normal_rejection"); @@ -1425,7 +1425,7 @@ void Environment::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fog_density", PROPERTY_HINT_RANGE, "0,16,0.0001"), "set_fog_density", "get_fog_density"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fog_aerial_perspective", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_fog_aerial_perspective", "get_fog_aerial_perspective"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fog_height", PROPERTY_HINT_RANGE, "-1024,1024,0.01,or_lesser,or_greater"), "set_fog_height", "get_fog_height"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fog_height", PROPERTY_HINT_RANGE, "-1024,1024,0.01,or_lesser,or_greater,suffix:m"), "set_fog_height", "get_fog_height"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fog_height_density", PROPERTY_HINT_RANGE, "-16,16,0.0001,or_lesser,or_greater"), "set_fog_height_density", "get_fog_height_density"); ClassDB::bind_method(D_METHOD("set_volumetric_fog_enabled", "enabled"), &Environment::set_volumetric_fog_enabled); diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index d586abac14..46f23424dd 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -54,6 +54,7 @@ _FORCE_INLINE_ void FontData::_ensure_rid(int p_cache_index) const { if (unlikely(!cache[p_cache_index].is_valid())) { cache.write[p_cache_index] = TS->create_font(); TS->font_set_data_ptr(cache[p_cache_index], data_ptr, data_size); + TS->font_set_face_index(cache[p_cache_index], face_index); TS->font_set_antialiased(cache[p_cache_index], antialiased); TS->font_set_generate_mipmaps(cache[p_cache_index], mipmaps); TS->font_set_multichannel_signed_distance_field(cache[p_cache_index], msdf); @@ -76,6 +77,11 @@ void FontData::_bind_methods() { ClassDB::bind_method(D_METHOD("set_data", "data"), &FontData::set_data); ClassDB::bind_method(D_METHOD("get_data"), &FontData::get_data); + ClassDB::bind_method(D_METHOD("set_face_index", "face_index"), &FontData::set_face_index); + ClassDB::bind_method(D_METHOD("get_face_index"), &FontData::get_face_index); + + ClassDB::bind_method(D_METHOD("get_face_count"), &FontData::get_face_count); + ClassDB::bind_method(D_METHOD("set_antialiased", "antialiased"), &FontData::set_antialiased); ClassDB::bind_method(D_METHOD("is_antialiased"), &FontData::is_antialiased); @@ -217,6 +223,7 @@ void FontData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_supported_variation_list"), &FontData::get_supported_variation_list); ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_data", "get_data"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "face_index", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_face_index", "get_face_index"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate_mipmaps", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_generate_mipmaps", "get_generate_mipmaps"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_antialiased", "is_antialiased"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "font_name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_font_name", "get_font_name"); @@ -445,6 +452,7 @@ void FontData::reset_state() { data.clear(); data_ptr = nullptr; data_size = 0; + face_index = 0; cache.clear(); antialiased = true; @@ -1244,6 +1252,31 @@ void FontData::set_data(const PackedByteArray &p_data) { } } +void FontData::set_face_index(int64_t p_index) { + ERR_FAIL_COND(p_index < 0); + ERR_FAIL_COND(p_index >= 0x7FFF); + + if (face_index != p_index) { + face_index = p_index; + if (data_ptr != nullptr) { + for (int i = 0; i < cache.size(); i++) { + if (cache[i].is_valid()) { + TS->font_set_face_index(cache[i], face_index); + } + } + } + } +} + +int64_t FontData::get_face_index() const { + return face_index; +} + +int64_t FontData::get_face_count() const { + _ensure_rid(0); + return TS->font_get_face_count(cache[0]); +} + PackedByteArray FontData::get_data() const { if (unlikely((size_t)data.size() != data_size)) { PackedByteArray *data_w = const_cast<PackedByteArray *>(&data); @@ -1923,8 +1956,8 @@ void Font::_bind_methods() { ClassDB::bind_method(D_METHOD("get_spacing", "spacing"), &Font::get_spacing); ADD_GROUP("Extra Spacing", "spacing"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "spacing_top"), "set_spacing", "get_spacing", TextServer::SPACING_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "spacing_bottom"), "set_spacing", "get_spacing", TextServer::SPACING_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "spacing_top", PROPERTY_HINT_NONE, "suffix:px"), "set_spacing", "get_spacing", TextServer::SPACING_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "spacing_bottom", PROPERTY_HINT_NONE, "suffix:px"), "set_spacing", "get_spacing", TextServer::SPACING_BOTTOM); ClassDB::bind_method(D_METHOD("get_height", "size"), &Font::get_height, DEFVAL(DEFAULT_FONT_SIZE)); ClassDB::bind_method(D_METHOD("get_ascent", "size"), &Font::get_ascent, DEFVAL(DEFAULT_FONT_SIZE)); @@ -2240,7 +2273,7 @@ Size2 Font::get_string_size(const String &p_text, int p_size, HorizontalAlignmen uint64_t hash = p_text.hash64(); if (p_alignment == HORIZONTAL_ALIGNMENT_FILL) { - hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash); + hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash); hash = hash_djb2_one_64(p_flags, hash); } hash = hash_djb2_one_64(p_size, hash); @@ -2264,7 +2297,7 @@ Size2 Font::get_multiline_string_size(const String &p_text, float p_width, int p } uint64_t hash = p_text.hash64(); - uint64_t wrp_hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash); + uint64_t wrp_hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash); wrp_hash = hash_djb2_one_64(p_flags, wrp_hash); wrp_hash = hash_djb2_one_64(p_size, wrp_hash); @@ -2302,7 +2335,7 @@ void Font::draw_string(RID p_canvas_item, const Point2 &p_pos, const String &p_t uint64_t hash = p_text.hash64(); if (p_alignment == HORIZONTAL_ALIGNMENT_FILL) { - hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash); + hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash); hash = hash_djb2_one_64(p_flags, hash); } hash = hash_djb2_one_64(p_size, hash); @@ -2341,7 +2374,7 @@ void Font::draw_multiline_string(RID p_canvas_item, const Point2 &p_pos, const S } uint64_t hash = p_text.hash64(); - uint64_t wrp_hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash); + uint64_t wrp_hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash); wrp_hash = hash_djb2_one_64(p_flags, wrp_hash); wrp_hash = hash_djb2_one_64(p_size, wrp_hash); diff --git a/scene/resources/font.h b/scene/resources/font.h index 96bfe3678b..950959e054 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -46,6 +46,7 @@ class FontData : public Resource { // Font source data. const uint8_t *data_ptr = nullptr; size_t data_size = 0; + int face_index = 0; PackedByteArray data; bool antialiased = true; @@ -91,6 +92,11 @@ public: virtual void set_data(const PackedByteArray &p_data); virtual PackedByteArray get_data() const; + virtual void set_face_index(int64_t p_index); + virtual int64_t get_face_index() const; + + virtual int64_t get_face_count() const; + // Common properties. virtual void set_font_name(const String &p_name); virtual String get_font_name() const; diff --git a/scene/resources/importer_mesh.cpp b/scene/resources/importer_mesh.cpp index 0fbd29b1a6..293fdd6f05 100644 --- a/scene/resources/importer_mesh.cpp +++ b/scene/resources/importer_mesh.cpp @@ -331,6 +331,7 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli bool is_uvs_close = (!uvs_ptr || uvs_ptr[j].distance_squared_to(uvs_ptr[idx.second]) < CMP_EPSILON2); bool is_uv2s_close = (!uv2s_ptr || uv2s_ptr[j].distance_squared_to(uv2s_ptr[idx.second]) < CMP_EPSILON2); + ERR_FAIL_INDEX(idx.second, normals.size()); bool is_normals_close = normals[idx.second].dot(n) > normal_merge_threshold; if (is_uvs_close && is_uv2s_close && is_normals_close) { vertex_remap.push_back(idx.first); @@ -1046,6 +1047,10 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform, PackedVector3Array rnormals = arrays[Mesh::ARRAY_NORMAL]; + if (!rnormals.size()) { + continue; + } + int vertex_ofs = vertices.size() / 3; vertices.resize((vertex_ofs + vc) * 3); @@ -1086,6 +1091,9 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform, } else { for (int j = 0; j < ic / 3; j++) { + ERR_FAIL_INDEX_V(rindices[j * 3 + 0], rvertices.size(), ERR_INVALID_DATA); + ERR_FAIL_INDEX_V(rindices[j * 3 + 1], rvertices.size(), ERR_INVALID_DATA); + ERR_FAIL_INDEX_V(rindices[j * 3 + 2], rvertices.size(), ERR_INVALID_DATA); Vector3 p0 = transform.xform(rvertices[rindices[j * 3 + 0]]); Vector3 p1 = transform.xform(rvertices[rindices[j * 3 + 1]]); Vector3 p2 = transform.xform(rvertices[rindices[j * 3 + 2]]); @@ -1185,7 +1193,7 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform, for (unsigned int i = 0; i < surfaces_tools.size(); i++) { surfaces_tools[i]->index(); Array arrays = surfaces_tools[i]->commit_to_arrays(); - add_surface(surfaces_tools[i]->get_primitive(), arrays, Array(), Dictionary(), surfaces_tools[i]->get_material(), surfaces_tools[i]->get_meta("name")); + add_surface(surfaces_tools[i]->get_primitive_type(), arrays, Array(), Dictionary(), surfaces_tools[i]->get_material(), surfaces_tools[i]->get_meta("name")); } set_lightmap_size_hint(Size2(size_x, size_y)); @@ -1238,6 +1246,7 @@ void ImporterMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_surface_name", "surface_idx", "name"), &ImporterMesh::set_surface_name); ClassDB::bind_method(D_METHOD("set_surface_material", "surface_idx", "material"), &ImporterMesh::set_surface_material); + ClassDB::bind_method(D_METHOD("generate_lods", "normal_merge_angle", "normal_split_angle"), &ImporterMesh::generate_lods); ClassDB::bind_method(D_METHOD("get_mesh", "base_mesh"), &ImporterMesh::get_mesh, DEFVAL(Ref<ArrayMesh>())); ClassDB::bind_method(D_METHOD("clear"), &ImporterMesh::clear); diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 997a45cce5..b7a3b677f5 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -472,24 +472,33 @@ void BaseMaterial3D::_update_shader() { } String texfilter_str; + // Force linear filtering for the heightmap texture, as the heightmap effect + // looks broken with nearest-neighbor filtering (with and without Deep Parallax). + String texfilter_height_str; switch (texture_filter) { case TEXTURE_FILTER_NEAREST: texfilter_str = "filter_nearest"; + texfilter_height_str = "filter_linear"; break; case TEXTURE_FILTER_LINEAR: texfilter_str = "filter_linear"; + texfilter_height_str = "filter_linear"; break; case TEXTURE_FILTER_NEAREST_WITH_MIPMAPS: texfilter_str = "filter_nearest_mipmap"; + texfilter_height_str = "filter_linear_mipmap"; break; case TEXTURE_FILTER_LINEAR_WITH_MIPMAPS: texfilter_str = "filter_linear_mipmap"; + texfilter_height_str = "filter_linear_mipmap"; break; case TEXTURE_FILTER_NEAREST_WITH_MIPMAPS_ANISOTROPIC: texfilter_str = "filter_nearest_mipmap_anisotropic"; + texfilter_height_str = "filter_linear_mipmap_anisotropic"; break; case TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC: texfilter_str = "filter_linear_mipmap_anisotropic"; + texfilter_height_str = "filter_linear_mipmap_anisotropic"; break; case TEXTURE_FILTER_MAX: break; // Internal value, skip. @@ -497,8 +506,10 @@ void BaseMaterial3D::_update_shader() { if (flags[FLAG_USE_TEXTURE_REPEAT]) { texfilter_str += ",repeat_enable"; + texfilter_height_str += ",repeat_enable"; } else { texfilter_str += ",repeat_disable"; + texfilter_height_str += ",repeat_disable"; } //must create a shader! @@ -763,7 +774,7 @@ void BaseMaterial3D::_update_shader() { } if (features[FEATURE_HEIGHT_MAPPING]) { - code += "uniform sampler2D texture_heightmap : hint_default_black," + texfilter_str + ";\n"; + code += "uniform sampler2D texture_heightmap : hint_default_black," + texfilter_height_str + ";\n"; code += "uniform float heightmap_scale;\n"; code += "uniform int heightmap_min_layers;\n"; code += "uniform int heightmap_max_layers;\n"; @@ -2198,7 +2209,7 @@ Ref<Material> BaseMaterial3D::get_material_for_2d(bool p_shaded, bool p_transpar if (p_fixed_size) { hash |= 1 << 9; } - hash = hash_djb2_one_64(p_filter, hash); + hash = hash_murmur3_one_64(p_filter, hash); if (materials_for_2d.has(hash)) { if (r_shader_rid) { @@ -2655,14 +2666,14 @@ void BaseMaterial3D::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "detail_normal", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_texture", "get_texture", TEXTURE_DETAIL_NORMAL); ADD_GROUP("UV1", "uv1_"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv1_scale"), "set_uv1_scale", "get_uv1_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv1_scale", PROPERTY_HINT_LINK), "set_uv1_scale", "get_uv1_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv1_offset"), "set_uv1_offset", "get_uv1_offset"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "uv1_triplanar"), "set_flag", "get_flag", FLAG_UV1_USE_TRIPLANAR); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "uv1_triplanar_sharpness", PROPERTY_HINT_EXP_EASING), "set_uv1_triplanar_blend_sharpness", "get_uv1_triplanar_blend_sharpness"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "uv1_world_triplanar"), "set_flag", "get_flag", FLAG_UV1_USE_WORLD_TRIPLANAR); ADD_GROUP("UV2", "uv2_"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv2_scale"), "set_uv2_scale", "get_uv2_scale"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv2_scale", PROPERTY_HINT_LINK), "set_uv2_scale", "get_uv2_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "uv2_offset"), "set_uv2_offset", "get_uv2_offset"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "uv2_triplanar"), "set_flag", "get_flag", FLAG_UV2_USE_TRIPLANAR); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "uv2_triplanar_sharpness", PROPERTY_HINT_EXP_EASING), "set_uv2_triplanar_blend_sharpness", "get_uv2_triplanar_blend_sharpness"); @@ -2687,22 +2698,22 @@ void BaseMaterial3D::_bind_methods() { ADD_GROUP("Grow", "grow_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "grow"), "set_grow_enabled", "is_grow_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_amount", PROPERTY_HINT_RANGE, "-16,16,0.001"), "set_grow", "get_grow"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_amount", PROPERTY_HINT_RANGE, "-16,16,0.001,suffix:m"), "set_grow", "get_grow"); ADD_GROUP("Transform", ""); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "fixed_size"), "set_flag", "get_flag", FLAG_FIXED_SIZE); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "use_point_size"), "set_flag", "get_flag", FLAG_USE_POINT_SIZE); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "point_size", PROPERTY_HINT_RANGE, "0.1,128,0.1"), "set_point_size", "get_point_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "point_size", PROPERTY_HINT_RANGE, "0.1,128,0.1,suffix:px"), "set_point_size", "get_point_size"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "use_particle_trails"), "set_flag", "get_flag", FLAG_PARTICLE_TRAILS_MODE); ADD_GROUP("Proximity Fade", "proximity_fade_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "proximity_fade_enable"), "set_proximity_fade", "is_proximity_fade_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "proximity_fade_distance", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_proximity_fade_distance", "get_proximity_fade_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "proximity_fade_distance", PROPERTY_HINT_RANGE, "0,4096,0.01,suffix:m"), "set_proximity_fade_distance", "get_proximity_fade_distance"); ADD_GROUP("MSDF", "msdf_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "msdf_pixel_range", PROPERTY_HINT_RANGE, "1,100,1"), "set_msdf_pixel_range", "get_msdf_pixel_range"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "msdf_outline_size", PROPERTY_HINT_RANGE, "1,250,1"), "set_msdf_outline_size", "get_msdf_outline_size"); ADD_GROUP("Distance Fade", "distance_fade_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "distance_fade_mode", PROPERTY_HINT_ENUM, "Disabled,PixelAlpha,PixelDither,ObjectDither"), "set_distance_fade", "get_distance_fade"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_min_distance", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_distance_fade_min_distance", "get_distance_fade_min_distance"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_max_distance", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_distance_fade_max_distance", "get_distance_fade_max_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_min_distance", PROPERTY_HINT_RANGE, "0,4096,0.01,suffix:m"), "set_distance_fade_min_distance", "get_distance_fade_min_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "distance_fade_max_distance", PROPERTY_HINT_RANGE, "0,4096,0.01,suffix:m"), "set_distance_fade_max_distance", "get_distance_fade_max_distance"); BIND_ENUM_CONSTANT(TEXTURE_ALBEDO); BIND_ENUM_CONSTANT(TEXTURE_METALLIC); diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index 5c34c7cafa..3e7b0a2808 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -188,7 +188,10 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const { Vector<Vector3> faces; faces.resize(faces_size); + Vector<int32_t> surface_indices; + surface_indices.resize(faces_size / 3); Vector3 *facesw = faces.ptrw(); + int32_t *surface_indicesw = surface_indices.ptrw(); int widx = 0; @@ -210,6 +213,8 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const { Vector<Vector3> vertices = a[ARRAY_VERTEX]; const Vector3 *vr = vertices.ptr(); + int32_t from_index = widx / 3; + if (surface_get_format(i) & ARRAY_FORMAT_INDEX) { int ic = surface_get_array_index_len(i); Vector<int> indices = a[ARRAY_INDEX]; @@ -241,6 +246,12 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const { } } } + + int32_t to_index = widx / 3; + + for (int j = from_index; j < to_index; j++) { + surface_indicesw[j] = i; + } } triangle_mesh = Ref<TriangleMesh>(memnew(TriangleMesh)); @@ -2096,7 +2107,7 @@ void ArrayMesh::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "_blend_shape_names", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_blend_shape_names", "_get_blend_shape_names"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "_surfaces", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_surfaces", "_get_surfaces"); ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_shape_mode", PROPERTY_HINT_ENUM, "Normalized,Relative"), "set_blend_shape_mode", "get_blend_shape_mode"); - ADD_PROPERTY(PropertyInfo(Variant::AABB, "custom_aabb", PROPERTY_HINT_NONE, ""), "set_custom_aabb", "get_custom_aabb"); + ADD_PROPERTY(PropertyInfo(Variant::AABB, "custom_aabb", PROPERTY_HINT_NONE, "suffix:m"), "set_custom_aabb", "get_custom_aabb"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shadow_mesh", PROPERTY_HINT_RESOURCE_TYPE, "ArrayMesh"), "set_shadow_mesh", "get_shadow_mesh"); } @@ -2125,7 +2136,7 @@ ArrayMesh::~ArrayMesh() { void PlaceholderMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_aabb", "aabb"), &PlaceholderMesh::set_aabb); - ADD_PROPERTY(PropertyInfo(Variant::AABB, "aabb", PROPERTY_HINT_NONE, ""), "set_aabb", "get_aabb"); + ADD_PROPERTY(PropertyInfo(Variant::AABB, "aabb", PROPERTY_HINT_NONE, "suffix:m"), "set_aabb", "get_aabb"); } PlaceholderMesh::PlaceholderMesh() { diff --git a/scene/resources/mesh_library.cpp b/scene/resources/mesh_library.cpp index a90999bf07..c8bfb73b2d 100644 --- a/scene/resources/mesh_library.cpp +++ b/scene/resources/mesh_library.cpp @@ -103,10 +103,10 @@ void MeshLibrary::_get_property_list(List<PropertyInfo> *p_list) const { String name = vformat("%s/%d/", PNAME("item"), E.key); p_list->push_back(PropertyInfo(Variant::STRING, name + PNAME("name"))); p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("mesh"), PROPERTY_HINT_RESOURCE_TYPE, "Mesh")); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("mesh_transform"))); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("mesh_transform"), PROPERTY_HINT_NONE, "suffix:m")); p_list->push_back(PropertyInfo(Variant::ARRAY, name + PNAME("shapes"))); p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("navmesh"), PROPERTY_HINT_RESOURCE_TYPE, "NavigationMesh")); - p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("navmesh_transform"))); + p_list->push_back(PropertyInfo(Variant::TRANSFORM3D, name + PNAME("navmesh_transform"), PROPERTY_HINT_NONE, "suffix:m")); p_list->push_back(PropertyInfo(Variant::OBJECT, name + PNAME("preview"), PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_HELPER)); } } diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp index 7f5ce1eb6b..784ecc3a4d 100644 --- a/scene/resources/navigation_mesh.cpp +++ b/scene/resources/navigation_mesh.cpp @@ -491,27 +491,27 @@ void NavigationMesh::_bind_methods() { ADD_GROUP("Geometry", "geometry_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry_parsed_geometry_type", PROPERTY_HINT_ENUM, "Mesh Instances,Static Colliders,Both"), "set_parsed_geometry_type", "get_parsed_geometry_type"); ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry_collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry_source_geometry_mode", PROPERTY_HINT_ENUM, "Navmesh Children, Group With Children, Group Explicit"), "set_source_geometry_mode", "get_source_geometry_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry_source_geometry_mode", PROPERTY_HINT_ENUM, "NavMesh Children, Group With Children, Group Explicit"), "set_source_geometry_mode", "get_source_geometry_mode"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "geometry_source_group_name"), "set_source_group_name", "get_source_group_name"); ADD_GROUP("Cells", "cell_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_size", PROPERTY_HINT_RANGE, "0.01,500.0,0.01,or_greater"), "set_cell_size", "get_cell_size"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_height", PROPERTY_HINT_RANGE, "0.01,500.0,0.01,or_greater"), "set_cell_height", "get_cell_height"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_size", PROPERTY_HINT_RANGE, "0.01,500.0,0.01,or_greater,suffix:m"), "set_cell_size", "get_cell_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cell_height", PROPERTY_HINT_RANGE, "0.01,500.0,0.01,or_greater,suffix:m"), "set_cell_height", "get_cell_height"); ADD_GROUP("Agents", "agent_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_height", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater"), "set_agent_height", "get_agent_height"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_radius", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater"), "set_agent_radius", "get_agent_radius"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_max_climb", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater"), "set_agent_max_climb", "get_agent_max_climb"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_max_slope", PROPERTY_HINT_RANGE, "0.02,90.0,0.01"), "set_agent_max_slope", "get_agent_max_slope"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_height", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater,suffix:m"), "set_agent_height", "get_agent_height"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_radius", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater,suffix:m"), "set_agent_radius", "get_agent_radius"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_max_climb", PROPERTY_HINT_RANGE, "0.0,500.0,0.01,or_greater,suffix:m"), "set_agent_max_climb", "get_agent_max_climb"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_max_slope", PROPERTY_HINT_RANGE, "0.02,90.0,0.01,degrees"), "set_agent_max_slope", "get_agent_max_slope"); ADD_GROUP("Regions", "region_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "region_min_size", PROPERTY_HINT_RANGE, "0.0,150.0,0.01,or_greater"), "set_region_min_size", "get_region_min_size"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "region_merge_size", PROPERTY_HINT_RANGE, "0.0,150.0,0.01,or_greater"), "set_region_merge_size", "get_region_merge_size"); ADD_GROUP("Edges", "edge_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "edge_max_length", PROPERTY_HINT_RANGE, "0.0,50.0,0.01,or_greater"), "set_edge_max_length", "get_edge_max_length"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "edge_max_error", PROPERTY_HINT_RANGE, "0.1,3.0,0.01,or_greater"), "set_edge_max_error", "get_edge_max_error"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "edge_max_length", PROPERTY_HINT_RANGE, "0.0,50.0,0.01,or_greater,suffix:m"), "set_edge_max_length", "get_edge_max_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "edge_max_error", PROPERTY_HINT_RANGE, "0.1,3.0,0.01,or_greater,suffix:m"), "set_edge_max_error", "get_edge_max_error"); ADD_GROUP("Polygons", "polygon_"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "polygon_verts_per_poly", PROPERTY_HINT_RANGE, "3.0,12.0,1.0,or_greater"), "set_verts_per_poly", "get_verts_per_poly"); ADD_GROUP("Details", "detail_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "detail_sample_distance", PROPERTY_HINT_RANGE, "0.1,16.0,0.01,or_greater"), "set_detail_sample_distance", "get_detail_sample_distance"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "detail_sample_max_error", PROPERTY_HINT_RANGE, "0.0,16.0,0.01,or_greater"), "set_detail_sample_max_error", "get_detail_sample_max_error"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "detail_sample_distance", PROPERTY_HINT_RANGE, "0.1,16.0,0.01,or_greater,suffix:m"), "set_detail_sample_distance", "get_detail_sample_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "detail_sample_max_error", PROPERTY_HINT_RANGE, "0.0,16.0,0.01,or_greater,suffix:m"), "set_detail_sample_max_error", "get_detail_sample_max_error"); ADD_GROUP("Filters", "filter_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_low_hanging_obstacles"), "set_filter_low_hanging_obstacles", "get_filter_low_hanging_obstacles"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_ledge_spans"), "set_filter_ledge_spans", "get_filter_ledge_spans"); diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index c4b15df6bb..7a49b9b515 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -488,6 +488,12 @@ void ParticlesMaterial::_update_shader() { code += " float degree_to_rad = pi / 180.0;\n"; code += "\n"; + if (emission_shape == EMISSION_SHAPE_POINTS || emission_shape == EMISSION_SHAPE_DIRECTED_POINTS) { + code += " int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count)));\n"; + code += " ivec2 emission_tex_size = textureSize(emission_texture_points, 0);\n"; + code += " ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x);\n"; + } + code += " CUSTOM.y += DELTA / LIFETIME;\n"; code += " float tv = CUSTOM.y / CUSTOM.w;\n"; if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) { diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h index 24341d964d..af45593f38 100644 --- a/scene/resources/particles_material.h +++ b/scene/resources/particles_material.h @@ -110,7 +110,7 @@ private: uint32_t key = 0; static uint32_t hash(const MaterialKey &p_key) { - return hash_djb2_one_32(p_key.key); + return hash_murmur3_one_32(p_key.key); } bool operator==(const MaterialKey &p_key) const { diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp index f5ab0085f1..b2fd8eb895 100644 --- a/scene/resources/primitive_meshes.cpp +++ b/scene/resources/primitive_meshes.cpp @@ -219,7 +219,7 @@ void PrimitiveMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("get_flip_faces"), &PrimitiveMesh::get_flip_faces); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "BaseMaterial3D,ShaderMaterial"), "set_material", "get_material"); - ADD_PROPERTY(PropertyInfo(Variant::AABB, "custom_aabb", PROPERTY_HINT_NONE, ""), "set_custom_aabb", "get_custom_aabb"); + ADD_PROPERTY(PropertyInfo(Variant::AABB, "custom_aabb", PROPERTY_HINT_NONE, "suffix:m"), "set_custom_aabb", "get_custom_aabb"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flip_faces"), "set_flip_faces", "get_flip_faces"); GDVIRTUAL_BIND(_create_mesh_array); @@ -1056,7 +1056,7 @@ void PlaneMesh::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_width", "get_subdivide_width"); ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_depth", "get_subdivide_depth"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_offset"), "set_center_offset", "get_center_offset"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_offset", PROPERTY_HINT_NONE, "suffix:m"), "set_center_offset", "get_center_offset"); } void PlaneMesh::set_size(const Size2 &p_size) { @@ -2435,7 +2435,7 @@ void TextMesh::_create_mesh_array(Array &p_arr) const { } if (glyphs[i].font_rid != RID()) { uint32_t hash = hash_one_uint64(glyphs[i].font_rid.get_id()); - hash = hash_djb2_one_32(glyphs[i].index, hash); + hash = hash_murmur3_one_32(glyphs[i].index, hash); _generate_glyph_mesh_data(hash, glyphs[i]); GlyphMeshData &gl_data = cache[hash]; @@ -2494,7 +2494,7 @@ void TextMesh::_create_mesh_array(Array &p_arr) const { } if (glyphs[i].font_rid != RID()) { uint32_t hash = hash_one_uint64(glyphs[i].font_rid.get_id()); - hash = hash_djb2_one_32(glyphs[i].index, hash); + hash = hash_murmur3_one_32(glyphs[i].index, hash); const GlyphMeshData &gl_data = cache[hash]; @@ -2701,17 +2701,17 @@ void TextMesh::_bind_methods() { ADD_GROUP("Text", ""); ADD_PROPERTY(PropertyInfo(Variant::STRING, "text"), "set_text", "get_text"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "font", PROPERTY_HINT_RESOURCE_TYPE, "Font"), "set_font", "get_font"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "font_size", PROPERTY_HINT_RANGE, "1,127,1"), "set_font_size", "get_font_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "font_size", PROPERTY_HINT_RANGE, "1,127,1,suffix:px"), "set_font_size", "get_font_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "horizontal_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_horizontal_alignment", "get_horizontal_alignment"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase"); ADD_PROPERTY(PropertyInfo(Variant::INT, "structured_text_bidi_override", PROPERTY_HINT_ENUM, "Default,URI,File,Email,List,None,Custom"), "set_structured_text_bidi_override", "get_structured_text_bidi_override"); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "structured_text_bidi_override_options"), "set_structured_text_bidi_override_options", "get_structured_text_bidi_override_options"); ADD_GROUP("Mesh", ""); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001"), "set_pixel_size", "get_pixel_size"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "curve_step", PROPERTY_HINT_RANGE, "0.1,10,0.1"), "set_curve_step", "get_curve_step"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_RANGE, "0.0,100.0,0.001,or_greater"), "set_depth", "get_depth"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pixel_size", PROPERTY_HINT_RANGE, "0.0001,128,0.0001,suffix:m"), "set_pixel_size", "get_pixel_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "curve_step", PROPERTY_HINT_RANGE, "0.1,10,0.1,suffix:px"), "set_curve_step", "get_curve_step"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_RANGE, "0.0,100.0,0.001,or_greater,suffix:m"), "set_depth", "get_depth"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width", PROPERTY_HINT_NONE, "suffix:m"), "set_width", "get_width"); ADD_GROUP("Locale", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left"), "set_text_direction", "get_text_direction"); diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp index 9d586c6f03..dba53338eb 100644 --- a/scene/resources/resource_format_text.cpp +++ b/scene/resources/resource_format_text.cpp @@ -40,6 +40,8 @@ // Version 3: new string ID for ext/subresources, breaks forward compat. #define FORMAT_VERSION 3 +#define BINARY_FORMAT_VERSION 4 + #include "core/io/dir_access.h" #include "core/version.h" @@ -66,12 +68,8 @@ Error ResourceLoaderText::_parse_sub_resource_dummy(DummyReadData *p_data, Varia String unique_id = token.value; if (!p_data->resource_map.has(unique_id)) { - Ref<DummyResource> dr; - dr.instantiate(); - dr->set_scene_unique_id(unique_id); - p_data->resource_map[unique_id] = dr; - uint32_t im_size = p_data->resource_index_map.size(); - p_data->resource_index_map.insert(dr, im_size); + r_err_str = "Found unique_id reference before mapping, sub-resources stored out of order in resource file"; + return ERR_PARSE_ERROR; } r_res = p_data->resource_map[unique_id]; @@ -1078,7 +1076,7 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa wf->store_32(0); //64 bits file, false for now wf->store_32(VERSION_MAJOR); wf->store_32(VERSION_MINOR); - static const int save_format_version = 3; //use format version 3 for saving + static const int save_format_version = BINARY_FORMAT_VERSION; wf->store_32(save_format_version); bs_save_unicode_string(wf, is_scene ? "PackedScene" : resource_type); @@ -1176,7 +1174,7 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa while (next_tag.name == "sub_resource" || next_tag.name == "resource") { String type; - int id = -1; + String id; bool main_res; if (next_tag.name == "sub_resource") { @@ -1197,15 +1195,26 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa type = next_tag.fields["type"]; id = next_tag.fields["id"]; main_res = false; + + if (!dummy_read.resource_map.has(id)) { + Ref<DummyResource> dr; + dr.instantiate(); + dr->set_scene_unique_id(id); + dummy_read.resource_map[id] = dr; + uint32_t im_size = dummy_read.resource_index_map.size(); + dummy_read.resource_index_map.insert(dr, im_size); + } + } else { type = res_type; - id = 0; //used for last anyway + String uid_text = ResourceUID::get_singleton()->id_to_text(res_uid); + id = type + "_" + uid_text.replace("uid://", "").replace("<invalid>", "0"); main_res = true; } local_offsets.push_back(wf2->get_position()); - bs_save_unicode_string(wf, "local://" + itos(id)); + bs_save_unicode_string(wf, "local://" + id); local_pointers_pos.push_back(wf->get_position()); wf->store_64(0); //temp local offset @@ -1274,7 +1283,8 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa List<PropertyInfo> props; packed_scene->get_property_list(&props); - bs_save_unicode_string(wf, "local://0"); + String id = "PackedScene_" + ResourceUID::get_singleton()->id_to_text(res_uid).replace("uid://", "").replace("<invalid>", "0"); + bs_save_unicode_string(wf, "local://" + id); local_pointers_pos.push_back(wf->get_position()); wf->store_64(0); //temp local offset @@ -1564,17 +1574,17 @@ String ResourceFormatSaverTextInstance::_write_resources(void *ud, const Ref<Res String ResourceFormatSaverTextInstance::_write_resource(const Ref<Resource> &res) { if (external_resources.has(res)) { - return "ExtResource( \"" + external_resources[res] + "\" )"; + return "ExtResource(\"" + external_resources[res] + "\")"; } else { if (internal_resources.has(res)) { - return "SubResource( \"" + internal_resources[res] + "\" )"; + return "SubResource(\"" + internal_resources[res] + "\")"; } else if (!res->is_built_in()) { if (res->get_path() == local_path) { //circular reference attempt return "null"; } //external resource String path = relative_paths ? local_path.path_to_file(res->get_path()) : res->get_path(); - return "Resource( \"" + path + "\" )"; + return "Resource(\"" + path + "\")"; } else { ERR_FAIL_V_MSG("null", "Resource was not pre cached for the resource section, bug?"); //internal resource diff --git a/scene/resources/scene_replication_config.cpp b/scene/resources/scene_replication_config.cpp index 4aea04bf87..6789f9f7d5 100644 --- a/scene/resources/scene_replication_config.cpp +++ b/scene/resources/scene_replication_config.cpp @@ -52,11 +52,19 @@ bool SceneReplicationConfig::_set(const StringName &p_name, const Variant &p_val ReplicationProperty &prop = properties[idx]; if (what == "sync") { prop.sync = p_value; - sync_props.push_back(prop.name); + if (prop.sync) { + sync_props.push_back(prop.name); + } else { + sync_props.erase(prop.name); + } return true; } else if (what == "spawn") { prop.spawn = p_value; - spawn_props.push_back(prop.name); + if (prop.spawn) { + spawn_props.push_back(prop.name); + } else { + spawn_props.erase(prop.name); + } return true; } } diff --git a/scene/resources/separation_ray_shape_2d.cpp b/scene/resources/separation_ray_shape_2d.cpp index df7b0d969a..0d6aee47d8 100644 --- a/scene/resources/separation_ray_shape_2d.cpp +++ b/scene/resources/separation_ray_shape_2d.cpp @@ -89,7 +89,7 @@ void SeparationRayShape2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_slide_on_slope", "active"), &SeparationRayShape2D::set_slide_on_slope); ClassDB::bind_method(D_METHOD("get_slide_on_slope"), &SeparationRayShape2D::get_slide_on_slope); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater"), "set_length", "get_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:px"), "set_length", "get_length"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_slope"), "set_slide_on_slope", "get_slide_on_slope"); } diff --git a/scene/resources/separation_ray_shape_3d.cpp b/scene/resources/separation_ray_shape_3d.cpp index 736cb60c1c..7306d5b985 100644 --- a/scene/resources/separation_ray_shape_3d.cpp +++ b/scene/resources/separation_ray_shape_3d.cpp @@ -80,7 +80,7 @@ void SeparationRayShape3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_slide_on_slope", "active"), &SeparationRayShape3D::set_slide_on_slope); ClassDB::bind_method(D_METHOD("get_slide_on_slope"), &SeparationRayShape3D::get_slide_on_slope); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.001,100,0.001,or_greater"), "set_length", "get_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0.001,100,0.001,or_greater,suffix:m"), "set_length", "get_length"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_slope"), "set_slide_on_slope", "get_slide_on_slope"); } diff --git a/scene/resources/skeleton_modification_2d_twoboneik.cpp b/scene/resources/skeleton_modification_2d_twoboneik.cpp index b08fd82381..d3c62e441f 100644 --- a/scene/resources/skeleton_modification_2d_twoboneik.cpp +++ b/scene/resources/skeleton_modification_2d_twoboneik.cpp @@ -464,8 +464,8 @@ void SkeletonModification2DTwoBoneIK::_bind_methods() { ClassDB::bind_method(D_METHOD("get_joint_two_bone_idx"), &SkeletonModification2DTwoBoneIK::get_joint_two_bone_idx); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "target_nodepath", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Node2D"), "set_target_node", "get_target_node"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_minimum_distance", PROPERTY_HINT_RANGE, "0, 100000000, 0.01"), "set_target_minimum_distance", "get_target_minimum_distance"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_maximum_distance", PROPERTY_HINT_NONE, "0, 100000000, 0.01"), "set_target_maximum_distance", "get_target_maximum_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_minimum_distance", PROPERTY_HINT_RANGE, "0,100000000,0.01,suffix:m"), "set_target_minimum_distance", "get_target_minimum_distance"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_maximum_distance", PROPERTY_HINT_NONE, "0,100000000,0.01,suffix:m"), "set_target_maximum_distance", "get_target_maximum_distance"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flip_bend_direction", PROPERTY_HINT_NONE, ""), "set_flip_bend_direction", "get_flip_bend_direction"); ADD_GROUP("", ""); } diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index b54bbc1478..a53c299d00 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -123,10 +123,10 @@ void StyleBox::_bind_methods() { ClassDB::bind_method(D_METHOD("draw", "canvas_item", "rect"), &StyleBox::draw); ADD_GROUP("Content Margins", "content_margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_left", PROPERTY_HINT_RANGE, "-1,2048,1"), "set_default_margin", "get_default_margin", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_top", PROPERTY_HINT_RANGE, "-1,2048,1"), "set_default_margin", "get_default_margin", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_right", PROPERTY_HINT_RANGE, "-1,2048,1"), "set_default_margin", "get_default_margin", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_bottom", PROPERTY_HINT_RANGE, "-1,2048,1"), "set_default_margin", "get_default_margin", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_left", PROPERTY_HINT_RANGE, "-1,2048,1,suffix:px"), "set_default_margin", "get_default_margin", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_top", PROPERTY_HINT_RANGE, "-1,2048,1,suffix:px"), "set_default_margin", "get_default_margin", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_right", PROPERTY_HINT_RANGE, "-1,2048,1,suffix:px"), "set_default_margin", "get_default_margin", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "content_margin_bottom", PROPERTY_HINT_RANGE, "-1,2048,1,suffix:px"), "set_default_margin", "get_default_margin", SIDE_BOTTOM); GDVIRTUAL_BIND(_get_style_margin, "side") GDVIRTUAL_BIND(_test_mask, "point", "rect") @@ -317,23 +317,23 @@ void StyleBoxTexture::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_texture", "get_texture"); ADD_GROUP("Margins", "margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_left", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_top", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_right", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1"), "set_margin_size", "get_margin_size", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_left", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_margin_size", "get_margin_size", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_top", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_margin_size", "get_margin_size", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_right", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_margin_size", "get_margin_size", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_margin_size", "get_margin_size", SIDE_BOTTOM); ADD_GROUP("Expand Margins", "expand_margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_left", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_top", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_right", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin_size", "get_expand_margin_size", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_left", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin_size", "get_expand_margin_size", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_top", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin_size", "get_expand_margin_size", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_right", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin_size", "get_expand_margin_size", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin_size", "get_expand_margin_size", SIDE_BOTTOM); ADD_GROUP("Axis Stretch", "axis_stretch_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "axis_stretch_horizontal", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_h_axis_stretch_mode", "get_h_axis_stretch_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "axis_stretch_vertical", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_v_axis_stretch_mode", "get_v_axis_stretch_mode"); ADD_GROUP("Sub-Region", "region_"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region_rect", PROPERTY_HINT_NONE, "suffix:px"), "set_region_rect", "get_region_rect"); ADD_GROUP("Modulate", "modulate_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate_color"), "set_modulate", "get_modulate"); @@ -905,10 +905,10 @@ void StyleBoxFlat::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "skew"), "set_skew", "get_skew"); ADD_GROUP("Border Width", "border_width_"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_left", PROPERTY_HINT_RANGE, "0,1024,1"), "set_border_width", "get_border_width", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_top", PROPERTY_HINT_RANGE, "0,1024,1"), "set_border_width", "get_border_width", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_right", PROPERTY_HINT_RANGE, "0,1024,1"), "set_border_width", "get_border_width", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_bottom", PROPERTY_HINT_RANGE, "0,1024,1"), "set_border_width", "get_border_width", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_left", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_border_width", "get_border_width", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_top", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_border_width", "get_border_width", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_right", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_border_width", "get_border_width", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_bottom", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_border_width", "get_border_width", SIDE_BOTTOM); ADD_GROUP("Border", "border_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "border_color"), "set_border_color", "get_border_color"); @@ -916,27 +916,27 @@ void StyleBoxFlat::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "border_blend"), "set_border_blend", "get_border_blend"); ADD_GROUP("Corner Radius", "corner_radius_"); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_top_left", PROPERTY_HINT_RANGE, "0,1024,1"), "set_corner_radius", "get_corner_radius", CORNER_TOP_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_top_right", PROPERTY_HINT_RANGE, "0,1024,1"), "set_corner_radius", "get_corner_radius", CORNER_TOP_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_bottom_right", PROPERTY_HINT_RANGE, "0,1024,1"), "set_corner_radius", "get_corner_radius", CORNER_BOTTOM_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_bottom_left", PROPERTY_HINT_RANGE, "0,1024,1"), "set_corner_radius", "get_corner_radius", CORNER_BOTTOM_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_top_left", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_corner_radius", "get_corner_radius", CORNER_TOP_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_top_right", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_corner_radius", "get_corner_radius", CORNER_TOP_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_bottom_right", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_corner_radius", "get_corner_radius", CORNER_BOTTOM_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::INT, "corner_radius_bottom_left", PROPERTY_HINT_RANGE, "0,1024,1,suffix:px"), "set_corner_radius", "get_corner_radius", CORNER_BOTTOM_LEFT); ADD_PROPERTY(PropertyInfo(Variant::INT, "corner_detail", PROPERTY_HINT_RANGE, "1,20,1"), "set_corner_detail", "get_corner_detail"); ADD_GROUP("Expand Margins", "expand_margin_"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_left", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin", "get_expand_margin", SIDE_LEFT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_top", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin", "get_expand_margin", SIDE_TOP); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_right", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin", "get_expand_margin", SIDE_RIGHT); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1"), "set_expand_margin", "get_expand_margin", SIDE_BOTTOM); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_left", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin", "get_expand_margin", SIDE_LEFT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_top", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin", "get_expand_margin", SIDE_TOP); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_right", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin", "get_expand_margin", SIDE_RIGHT); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "expand_margin_bottom", PROPERTY_HINT_RANGE, "0,2048,1,suffix:px"), "set_expand_margin", "get_expand_margin", SIDE_BOTTOM); ADD_GROUP("Shadow", "shadow_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "shadow_color"), "set_shadow_color", "get_shadow_color"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_size", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_shadow_size", "get_shadow_size"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "shadow_offset"), "set_shadow_offset", "get_shadow_offset"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_size", PROPERTY_HINT_RANGE, "0,100,1,or_greater,suffix:px"), "set_shadow_size", "get_shadow_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "shadow_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_shadow_offset", "get_shadow_offset"); ADD_GROUP("Anti Aliasing", "anti_aliasing_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "anti_aliasing"), "set_anti_aliased", "is_anti_aliased"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "anti_aliasing_size", PROPERTY_HINT_RANGE, "0.01,10,0.001"), "set_aa_size", "get_aa_size"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "anti_aliasing_size", PROPERTY_HINT_RANGE, "0.01,10,0.001,suffix:px"), "set_aa_size", "get_aa_size"); } StyleBoxFlat::StyleBoxFlat() {} @@ -1001,9 +1001,9 @@ void StyleBoxLine::_bind_methods() { ClassDB::bind_method(D_METHOD("is_vertical"), &StyleBoxLine::is_vertical); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_begin", PROPERTY_HINT_RANGE, "-300,300,1"), "set_grow_begin", "get_grow_begin"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_end", PROPERTY_HINT_RANGE, "-300,300,1"), "set_grow_end", "get_grow_end"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "thickness", PROPERTY_HINT_RANGE, "0,10"), "set_thickness", "get_thickness"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_begin", PROPERTY_HINT_RANGE, "-300,300,1,suffix:px"), "set_grow_begin", "get_grow_begin"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "grow_end", PROPERTY_HINT_RANGE, "-300,300,1,suffix:px"), "set_grow_end", "get_grow_end"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "thickness", PROPERTY_HINT_RANGE, "0,10,suffix:px"), "set_thickness", "get_thickness"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "vertical"), "set_vertical", "is_vertical"); } diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index 0e41eed570..9829c7e86b 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -141,7 +141,8 @@ uint32_t SurfaceTool::VertexHasher::hash(const Vertex &p_vtx) { h = hash_djb2_buffer((const uint8_t *)p_vtx.bones.ptr(), p_vtx.bones.size() * sizeof(int), h); h = hash_djb2_buffer((const uint8_t *)p_vtx.weights.ptr(), p_vtx.weights.size() * sizeof(float), h); h = hash_djb2_buffer((const uint8_t *)&p_vtx.custom[0], sizeof(Color) * RS::ARRAY_CUSTOM_COUNT, h); - h = hash_djb2_one_32(p_vtx.smooth_group, h); + h = hash_murmur3_one_32(p_vtx.smooth_group, h); + h = hash_fmix32(h); return h; } @@ -315,19 +316,17 @@ void SurfaceTool::set_uv2(const Vector2 &p_uv2) { last_uv2 = p_uv2; } -void SurfaceTool::set_custom(int p_index, const Color &p_custom) { - ERR_FAIL_INDEX(p_index, RS::ARRAY_CUSTOM_COUNT); +void SurfaceTool::set_custom(int p_channel_index, const Color &p_custom) { + ERR_FAIL_INDEX(p_channel_index, RS::ARRAY_CUSTOM_COUNT); ERR_FAIL_COND(!begun); - ERR_FAIL_COND(last_custom_format[p_index] == CUSTOM_MAX); + ERR_FAIL_COND(last_custom_format[p_channel_index] == CUSTOM_MAX); static const uint32_t mask[RS::ARRAY_CUSTOM_COUNT] = { Mesh::ARRAY_FORMAT_CUSTOM0, Mesh::ARRAY_FORMAT_CUSTOM1, Mesh::ARRAY_FORMAT_CUSTOM2, Mesh::ARRAY_FORMAT_CUSTOM3 }; - static const uint32_t shift[RS::ARRAY_CUSTOM_COUNT] = { Mesh::ARRAY_FORMAT_CUSTOM0_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM1_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM2_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM3_SHIFT }; - ERR_FAIL_COND(!first && !(format & mask[p_index])); + ERR_FAIL_COND(!first && !(format & mask[p_channel_index])); if (first) { - format |= mask[p_index]; - format |= last_custom_format[p_index] << shift[p_index]; + format |= mask[p_channel_index]; } - last_custom[p_index] = p_custom; + last_custom[p_channel_index] = p_custom; } void SurfaceTool::set_bones(const Vector<int> &p_bones) { @@ -689,7 +688,7 @@ Array SurfaceTool::commit_to_arrays() { return a; } -Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing, uint32_t p_flags) { +Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing, uint32_t p_compress_flags) { Ref<ArrayMesh> mesh; if (p_existing.is_valid()) { mesh = p_existing; @@ -707,7 +706,15 @@ Ref<ArrayMesh> SurfaceTool::commit(const Ref<ArrayMesh> &p_existing, uint32_t p_ Array a = commit_to_arrays(); - mesh->add_surface_from_arrays(primitive, a, Array(), Dictionary(), p_flags); + uint32_t compress_flags = (p_compress_flags >> RS::ARRAY_COMPRESS_FLAGS_BASE) << RS::ARRAY_COMPRESS_FLAGS_BASE; + static const uint32_t shift[RS::ARRAY_CUSTOM_COUNT] = { Mesh::ARRAY_FORMAT_CUSTOM0_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM1_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM2_SHIFT, Mesh::ARRAY_FORMAT_CUSTOM3_SHIFT }; + for (int i = 0; i < RS::ARRAY_CUSTOM_COUNT; i++) { + if (last_custom_format[i] != CUSTOM_MAX) { + compress_flags |= last_custom_format[i] << shift[i]; + } + } + + mesh->add_surface_from_arrays(primitive, a, Array(), Dictionary(), compress_flags); if (material.is_valid()) { mesh->surface_set_material(surface, material); @@ -988,9 +995,6 @@ void SurfaceTool::append_from(const Ref<Mesh> &p_existing, int p_surface, const for (int j = 0; j < RS::ARRAY_CUSTOM_COUNT; j++) { if (format & custom_mask[j]) { CustomFormat new_format = (CustomFormat)((format >> custom_shift[j]) & RS::ARRAY_FORMAT_CUSTOM_MASK); - if (last_custom_format[j] != CUSTOM_MAX && last_custom_format[j] != new_format) { - WARN_PRINT(vformat("Custom %d format %d mismatch when appending format %d", j, last_custom_format[j], new_format)); - } last_custom_format[j] = new_format; } } @@ -1220,22 +1224,24 @@ SurfaceTool::SkinWeightCount SurfaceTool::get_skin_weight_count() const { return skin_weights; } -void SurfaceTool::set_custom_format(int p_index, CustomFormat p_format) { - ERR_FAIL_INDEX(p_index, RS::ARRAY_CUSTOM_COUNT); - ERR_FAIL_COND(begun); - last_custom_format[p_index] = p_format; +void SurfaceTool::set_custom_format(int p_channel_index, CustomFormat p_format) { + ERR_FAIL_INDEX(p_channel_index, RS::ARRAY_CUSTOM_COUNT); + ERR_FAIL_COND(!begun); + ERR_FAIL_INDEX(p_format, CUSTOM_MAX + 1); + last_custom_format[p_channel_index] = p_format; } -Mesh::PrimitiveType SurfaceTool::get_primitive() const { +Mesh::PrimitiveType SurfaceTool::get_primitive_type() const { return primitive; } -SurfaceTool::CustomFormat SurfaceTool::get_custom_format(int p_index) const { - ERR_FAIL_INDEX_V(p_index, RS::ARRAY_CUSTOM_COUNT, CUSTOM_MAX); - return last_custom_format[p_index]; +SurfaceTool::CustomFormat SurfaceTool::get_custom_format(int p_channel_index) const { + ERR_FAIL_INDEX_V(p_channel_index, RS::ARRAY_CUSTOM_COUNT, CUSTOM_MAX); + return last_custom_format[p_channel_index]; } void SurfaceTool::optimize_indices_for_cache() { ERR_FAIL_COND(optimize_vertex_cache_func == nullptr); ERR_FAIL_COND(index_array.size() == 0); + ERR_FAIL_COND(primitive != Mesh::PRIMITIVE_TRIANGLES); ERR_FAIL_COND(index_array.size() % 3 != 0); LocalVector old_index_array = index_array; @@ -1243,8 +1249,8 @@ void SurfaceTool::optimize_indices_for_cache() { optimize_vertex_cache_func((unsigned int *)index_array.ptr(), (unsigned int *)old_index_array.ptr(), old_index_array.size(), vertex_array.size()); } -float SurfaceTool::get_max_axis_length() const { - ERR_FAIL_COND_V(vertex_array.size() == 0, 0); +AABB SurfaceTool::get_aabb() const { + ERR_FAIL_COND_V(vertex_array.size() == 0, AABB()); AABB aabb; for (uint32_t i = 0; i < vertex_array.size(); i++) { @@ -1255,7 +1261,7 @@ float SurfaceTool::get_max_axis_length() const { } } - return aabb.get_longest_axis_size(); + return aabb; } Vector<int> SurfaceTool::generate_lod(float p_threshold, int p_target_index_count) { Vector<int> lod; @@ -1288,8 +1294,8 @@ void SurfaceTool::_bind_methods() { ClassDB::bind_method(D_METHOD("set_skin_weight_count", "count"), &SurfaceTool::set_skin_weight_count); ClassDB::bind_method(D_METHOD("get_skin_weight_count"), &SurfaceTool::get_skin_weight_count); - ClassDB::bind_method(D_METHOD("set_custom_format", "index", "format"), &SurfaceTool::set_custom_format); - ClassDB::bind_method(D_METHOD("get_custom_format", "index"), &SurfaceTool::get_custom_format); + ClassDB::bind_method(D_METHOD("set_custom_format", "channel_index", "format"), &SurfaceTool::set_custom_format); + ClassDB::bind_method(D_METHOD("get_custom_format", "channel_index"), &SurfaceTool::get_custom_format); ClassDB::bind_method(D_METHOD("begin", "primitive"), &SurfaceTool::begin); @@ -1301,7 +1307,7 @@ void SurfaceTool::_bind_methods() { ClassDB::bind_method(D_METHOD("set_uv2", "uv2"), &SurfaceTool::set_uv2); ClassDB::bind_method(D_METHOD("set_bones", "bones"), &SurfaceTool::set_bones); ClassDB::bind_method(D_METHOD("set_weights", "weights"), &SurfaceTool::set_weights); - ClassDB::bind_method(D_METHOD("set_custom", "index", "custom"), &SurfaceTool::set_custom); + ClassDB::bind_method(D_METHOD("set_custom", "channel_index", "custom_color"), &SurfaceTool::set_custom); ClassDB::bind_method(D_METHOD("set_smooth_group", "index"), &SurfaceTool::set_smooth_group); ClassDB::bind_method(D_METHOD("add_triangle_fan", "vertices", "uvs", "colors", "uv2s", "normals", "tangents"), &SurfaceTool::add_triangle_fan, DEFVAL(Vector<Vector2>()), DEFVAL(Vector<Color>()), DEFVAL(Vector<Vector2>()), DEFVAL(Vector<Vector3>()), DEFVAL(Vector<Plane>())); @@ -1315,11 +1321,11 @@ void SurfaceTool::_bind_methods() { ClassDB::bind_method(D_METHOD("optimize_indices_for_cache"), &SurfaceTool::optimize_indices_for_cache); - ClassDB::bind_method(D_METHOD("get_max_axis_length"), &SurfaceTool::get_max_axis_length); + ClassDB::bind_method(D_METHOD("get_aabb"), &SurfaceTool::get_aabb); ClassDB::bind_method(D_METHOD("generate_lod", "nd_threshold", "target_index_count"), &SurfaceTool::generate_lod, DEFVAL(3)); ClassDB::bind_method(D_METHOD("set_material", "material"), &SurfaceTool::set_material); - ClassDB::bind_method(D_METHOD("get_primitive"), &SurfaceTool::get_primitive); + ClassDB::bind_method(D_METHOD("get_primitive_type"), &SurfaceTool::get_primitive_type); ClassDB::bind_method(D_METHOD("clear"), &SurfaceTool::clear); diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h index bf4332ad2a..2d399ca3bf 100644 --- a/scene/resources/surface_tool.h +++ b/scene/resources/surface_tool.h @@ -154,10 +154,10 @@ public: void set_skin_weight_count(SkinWeightCount p_weights); SkinWeightCount get_skin_weight_count() const; - void set_custom_format(int p_index, CustomFormat p_format); - CustomFormat get_custom_format(int p_index) const; + void set_custom_format(int p_channel_index, CustomFormat p_format); + CustomFormat get_custom_format(int p_channel_index) const; - Mesh::PrimitiveType get_primitive() const; + Mesh::PrimitiveType get_primitive_type() const; void begin(Mesh::PrimitiveType p_primitive); @@ -166,7 +166,7 @@ public: void set_tangent(const Plane &p_tangent); void set_uv(const Vector2 &p_uv); void set_uv2(const Vector2 &p_uv2); - void set_custom(int p_index, const Color &p_custom); + void set_custom(int p_channel_index, const Color &p_custom); void set_bones(const Vector<int> &p_bones); void set_weights(const Vector<float> &p_weights); void set_smooth_group(uint32_t p_group); @@ -183,7 +183,7 @@ public: void generate_tangents(); void optimize_indices_for_cache(); - float get_max_axis_length() const; + AABB get_aabb() const; Vector<int> generate_lod(float p_threshold, int p_target_index_count = 3); void set_material(const Ref<Material> &p_material); @@ -199,7 +199,7 @@ public: void create_from(const Ref<Mesh> &p_existing, int p_surface); void create_from_blend_shape(const Ref<Mesh> &p_existing, int p_surface, const String &p_blend_shape_name); void append_from(const Ref<Mesh> &p_existing, int p_surface, const Transform3D &p_xform); - Ref<ArrayMesh> commit(const Ref<ArrayMesh> &p_existing = Ref<ArrayMesh>(), uint32_t p_flags = 0); + Ref<ArrayMesh> commit(const Ref<ArrayMesh> &p_existing = Ref<ArrayMesh>(), uint32_t p_compress_flags = 0); SurfaceTool(); }; diff --git a/scene/resources/text_line.cpp b/scene/resources/text_line.cpp index f9390ca528..d6e7ca3478 100644 --- a/scene/resources/text_line.cpp +++ b/scene/resources/text_line.cpp @@ -98,12 +98,6 @@ void TextLine::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_outline", "canvas", "pos", "outline_size", "color"), &TextLine::draw_outline, DEFVAL(1), DEFVAL(Color(1, 1, 1))); ClassDB::bind_method(D_METHOD("hit_test", "coords"), &TextLine::hit_test); - - BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS); } void TextLine::_shape() { @@ -112,26 +106,26 @@ void TextLine::_shape() { TS->shaped_text_tab_align(rid, tab_stops); } - uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING; - if (overrun_behavior != OVERRUN_NO_TRIMMING) { + uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM; + if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { switch (overrun_behavior) { - case OVERRUN_TRIM_WORD_ELLIPSIS: + case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_ELLIPSIS: + case TextServer::OVERRUN_TRIM_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_WORD: + case TextServer::OVERRUN_TRIM_WORD: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; break; - case OVERRUN_TRIM_CHAR: + case TextServer::OVERRUN_TRIM_CHAR: overrun_flags |= TextServer::OVERRUN_TRIM; break; - case OVERRUN_NO_TRIMMING: + case TextServer::OVERRUN_NO_TRIMMING: break; } @@ -259,20 +253,20 @@ uint16_t TextLine::get_flags() const { return flags; } -void TextLine::set_text_overrun_behavior(TextLine::OverrunBehavior p_behavior) { +void TextLine::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) { if (overrun_behavior != p_behavior) { overrun_behavior = p_behavior; dirty = true; } } -TextLine::OverrunBehavior TextLine::get_text_overrun_behavior() const { +TextServer::OverrunBehavior TextLine::get_text_overrun_behavior() const { return overrun_behavior; } void TextLine::set_width(float p_width) { width = p_width; - if (alignment == HORIZONTAL_ALIGNMENT_FILL || overrun_behavior != OVERRUN_NO_TRIMMING) { + if (alignment == HORIZONTAL_ALIGNMENT_FILL || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { dirty = true; } } diff --git a/scene/resources/text_line.h b/scene/resources/text_line.h index c5762db0f2..784ee8ef26 100644 --- a/scene/resources/text_line.h +++ b/scene/resources/text_line.h @@ -39,15 +39,6 @@ class TextLine : public RefCounted { GDCLASS(TextLine, RefCounted); -public: - enum OverrunBehavior { - OVERRUN_NO_TRIMMING, - OVERRUN_TRIM_CHAR, - OVERRUN_TRIM_WORD, - OVERRUN_TRIM_ELLIPSIS, - OVERRUN_TRIM_WORD_ELLIPSIS, - }; - private: RID rid; int spacing_top = 0; @@ -58,7 +49,7 @@ private: float width = -1.0; uint16_t flags = TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA; HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT; - OverrunBehavior overrun_behavior = OVERRUN_TRIM_ELLIPSIS; + TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_TRIM_ELLIPSIS; Vector<float> tab_stops; @@ -98,8 +89,8 @@ public: void set_flags(uint16_t p_flags); uint16_t get_flags() const; - void set_text_overrun_behavior(OverrunBehavior p_behavior); - OverrunBehavior get_text_overrun_behavior() const; + void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); + TextServer::OverrunBehavior get_text_overrun_behavior() const; void set_width(float p_width); float get_width() const; @@ -125,6 +116,4 @@ public: ~TextLine(); }; -VARIANT_ENUM_CAST(TextLine::OverrunBehavior); - #endif // TEXT_LINE_H diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp index 477b41efaa..874992ea3d 100644 --- a/scene/resources/text_paragraph.cpp +++ b/scene/resources/text_paragraph.cpp @@ -129,12 +129,6 @@ void TextParagraph::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_dropcap_outline", "canvas", "pos", "outline_size", "color"), &TextParagraph::draw_dropcap_outline, DEFVAL(1), DEFVAL(Color(1, 1, 1))); ClassDB::bind_method(D_METHOD("hit_test", "coords"), &TextParagraph::hit_test); - - BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS); - BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS); } void TextParagraph::_shape_lines() { @@ -190,26 +184,26 @@ void TextParagraph::_shape_lines() { lines_rid.push_back(line); } - uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING; - if (overrun_behavior != OVERRUN_NO_TRIMMING) { + uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM; + if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) { switch (overrun_behavior) { - case OVERRUN_TRIM_WORD_ELLIPSIS: + case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_ELLIPSIS: + case TextServer::OVERRUN_TRIM_ELLIPSIS: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS; break; - case OVERRUN_TRIM_WORD: + case TextServer::OVERRUN_TRIM_WORD: overrun_flags |= TextServer::OVERRUN_TRIM; overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY; break; - case OVERRUN_TRIM_CHAR: + case TextServer::OVERRUN_TRIM_CHAR: overrun_flags |= TextServer::OVERRUN_TRIM; break; - case OVERRUN_NO_TRIMMING: + case TextServer::OVERRUN_NO_TRIMMING: break; } } @@ -451,7 +445,7 @@ uint16_t TextParagraph::get_flags() const { return flags; } -void TextParagraph::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) { +void TextParagraph::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) { _THREAD_SAFE_METHOD_ if (overrun_behavior != p_behavior) { @@ -460,7 +454,7 @@ void TextParagraph::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_b } } -TextParagraph::OverrunBehavior TextParagraph::get_text_overrun_behavior() const { +TextServer::OverrunBehavior TextParagraph::get_text_overrun_behavior() const { return overrun_behavior; } diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h index 4f1aad16b5..bdcc2b5701 100644 --- a/scene/resources/text_paragraph.h +++ b/scene/resources/text_paragraph.h @@ -41,15 +41,6 @@ class TextParagraph : public RefCounted { GDCLASS(TextParagraph, RefCounted); _THREAD_SAFE_CLASS_ -public: - enum OverrunBehavior { - OVERRUN_NO_TRIMMING, - OVERRUN_TRIM_CHAR, - OVERRUN_TRIM_WORD, - OVERRUN_TRIM_ELLIPSIS, - OVERRUN_TRIM_WORD_ELLIPSIS, - }; - private: RID dropcap_rid; int dropcap_lines = 0; @@ -66,7 +57,7 @@ private: int max_lines_visible = -1; uint16_t flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND | TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA; - OverrunBehavior overrun_behavior = OVERRUN_NO_TRIMMING; + TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING; HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT; @@ -116,8 +107,8 @@ public: void set_flags(uint16_t p_flags); uint16_t get_flags() const; - void set_text_overrun_behavior(OverrunBehavior p_behavior); - OverrunBehavior get_text_overrun_behavior() const; + void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior); + TextServer::OverrunBehavior get_text_overrun_behavior() const; void set_width(float p_width); float get_width() const; @@ -165,6 +156,4 @@ public: ~TextParagraph(); }; -VARIANT_ENUM_CAST(TextParagraph::OverrunBehavior); - #endif // TEXT_PARAGRAPH_H diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index 8994bb5983..f31a71eada 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -613,7 +613,7 @@ void PortableCompressedTexture2D::_bind_methods() { ClassDB::bind_static_method("PortableCompressedTexture2D", D_METHOD("is_keeping_all_compressed_buffers"), &PortableCompressedTexture2D::is_keeping_all_compressed_buffers); ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "_data", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "_set_data", "_get_data"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size_override"), "set_size_override", "get_size_override"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size_override", PROPERTY_HINT_NONE, "suffix:px"), "set_size_override", "get_size_override"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "keep_compressed_buffer"), "set_keep_compressed_buffer", "is_keeping_compressed_buffer"); BIND_ENUM_CONSTANT(COMPRESSION_MODE_LOSSLESS); @@ -1533,8 +1533,8 @@ void AtlasTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("has_filter_clip"), &AtlasTexture::has_filter_clip); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "atlas", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_atlas", "get_atlas"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region"), "set_region", "get_region"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "margin"), "set_margin", "get_margin"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "region", PROPERTY_HINT_NONE, "suffix:px"), "set_region", "get_region"); + ADD_PROPERTY(PropertyInfo(Variant::RECT2, "margin", PROPERTY_HINT_NONE, "suffix:px"), "set_margin", "get_margin"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_clip"), "set_filter_clip", "has_filter_clip"); } @@ -1775,7 +1775,7 @@ void MeshTexture::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh"), "set_mesh", "get_mesh"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "base_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_base_texture", "get_base_texture"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "image_size", PROPERTY_HINT_RANGE, "0,16384,1"), "set_image_size", "get_image_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "image_size", PROPERTY_HINT_RANGE, "0,16384,1,suffix:px"), "set_image_size", "get_image_size"); } MeshTexture::MeshTexture() { @@ -1794,7 +1794,7 @@ void CurveTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("_update"), &CurveTexture::_update); - ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,4096"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,4096,suffix:px"), "set_width", "get_width"); ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_mode", PROPERTY_HINT_ENUM, "RGB,Red"), "set_texture_mode", "get_texture_mode"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_curve", "get_curve"); @@ -1942,7 +1942,7 @@ void CurveXYZTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("_update"), &CurveXYZTexture::_update); - ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,4096"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,4096,suffix:px"), "set_width", "get_width"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "curve_x", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_curve_x", "get_curve_x"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "curve_y", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_curve_y", "get_curve_y"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "curve_z", PROPERTY_HINT_RESOURCE_TYPE, "Curve"), "set_curve_z", "get_curve_z"); @@ -2149,7 +2149,7 @@ void GradientTexture1D::_bind_methods() { ClassDB::bind_method(D_METHOD("_update"), &GradientTexture1D::_update); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gradient", PROPERTY_HINT_RESOURCE_TYPE, "Gradient"), "set_gradient", "get_gradient"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,16384"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,16384,suffix:px"), "set_width", "get_width"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_hdr"), "set_use_hdr", "is_using_hdr"); } @@ -2505,8 +2505,8 @@ void GradientTexture2D::_bind_methods() { ClassDB::bind_method(D_METHOD("_update"), &GradientTexture2D::_update); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gradient", PROPERTY_HINT_RESOURCE_TYPE, "Gradient", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT), "set_gradient", "get_gradient"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,2048,or_greater"), "set_width", "get_width"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "height", PROPERTY_HINT_RANGE, "1,2048,or_greater"), "set_height", "get_height"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,2048,or_greater,suffix:px"), "set_width", "get_width"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "height", PROPERTY_HINT_RANGE, "1,2048,or_greater,suffix:px"), "set_height", "get_height"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_hdr"), "set_use_hdr", "is_using_hdr"); ADD_GROUP("Fill", "fill_"); @@ -2826,7 +2826,7 @@ void AnimatedTexture::_bind_methods() { for (int i = 0; i < MAX_FRAMES; i++) { ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "frame_" + itos(i) + "/texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_frame_texture", "get_frame_texture", i); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "frame_" + itos(i) + "/delay_sec", PROPERTY_HINT_RANGE, "0.0,16.0,0.01", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_frame_delay", "get_frame_delay", i); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "frame_" + itos(i) + "/delay_sec", PROPERTY_HINT_RANGE, "0.0,16.0,0.01,suffix:s", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNAL), "set_frame_delay", "get_frame_delay", i); } BIND_CONSTANT(MAX_FRAMES); @@ -3415,7 +3415,7 @@ RID PlaceholderTexture2D::get_rid() const { void PlaceholderTexture2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture2D::set_size); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size", PROPERTY_HINT_NONE, "suffix:px"), "set_size", "get_size"); } PlaceholderTexture2D::PlaceholderTexture2D() { @@ -3463,7 +3463,7 @@ Vector<Ref<Image>> PlaceholderTexture3D::get_data() const { void PlaceholderTexture3D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTexture3D::set_size); ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTexture3D::get_size); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3I, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3I, "size", PROPERTY_HINT_NONE, "suffix:px"), "set_size", "get_size"); } PlaceholderTexture3D::PlaceholderTexture3D() { @@ -3519,7 +3519,7 @@ void PlaceholderTextureLayered::_bind_methods() { ClassDB::bind_method(D_METHOD("set_size", "size"), &PlaceholderTextureLayered::set_size); ClassDB::bind_method(D_METHOD("get_size"), &PlaceholderTextureLayered::get_size); ClassDB::bind_method(D_METHOD("set_layers", "layers"), &PlaceholderTextureLayered::set_layers); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "size", PROPERTY_HINT_NONE, "suffix:px"), "set_size", "get_size"); ADD_PROPERTY(PropertyInfo(Variant::INT, "layers", PROPERTY_HINT_RANGE, "1,4096"), "set_layers", "get_layers"); } diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index 6af5d127a8..39b77568cf 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -152,7 +152,7 @@ void Theme::_get_property_list(List<PropertyInfo> *p_list) const { // Font sizes. for (const KeyValue<StringName, ThemeFontSizeMap> &E : font_size_map) { for (const KeyValue<StringName, int> &F : E.value) { - list.push_back(PropertyInfo(Variant::INT, String() + E.key + "/font_sizes/" + F.key, PROPERTY_HINT_RANGE, "0,256,1,or_greater")); + list.push_back(PropertyInfo(Variant::INT, String() + E.key + "/font_sizes/" + F.key, PROPERTY_HINT_RANGE, "0,256,1,or_greater,suffix:px")); } } @@ -1818,7 +1818,7 @@ void Theme::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "default_base_scale", PROPERTY_HINT_RANGE, "0.0,2.0,0.01,or_greater"), "set_default_base_scale", "get_default_base_scale"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "default_font", PROPERTY_HINT_RESOURCE_TYPE, "Font"), "set_default_font", "get_default_font"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "default_font_size", PROPERTY_HINT_RANGE, "0,256,1,or_greater"), "set_default_font_size", "get_default_font_size"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "default_font_size", PROPERTY_HINT_RANGE, "0,256,1,or_greater,suffix:px"), "set_default_font_size", "get_default_font_size"); BIND_ENUM_CONSTANT(DATA_TYPE_COLOR); BIND_ENUM_CONSTANT(DATA_TYPE_CONSTANT); diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index 9d2d4cdb20..13b671e562 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -236,6 +236,9 @@ bool TileSet::TerrainsPattern::operator<(const TerrainsPattern &p_terrains_patte return is_valid_bit[i] < p_terrains_pattern.is_valid_bit[i]; } } + if (terrain != p_terrains_pattern.terrain) { + return terrain < p_terrains_pattern.terrain; + } for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { if (is_valid_bit[i] && bits[i] != p_terrains_pattern.bits[i]) { return bits[i] < p_terrains_pattern.bits[i]; @@ -253,10 +256,23 @@ bool TileSet::TerrainsPattern::operator==(const TerrainsPattern &p_terrains_patt return false; } } + if (terrain != p_terrains_pattern.terrain) { + return false; + } return true; } -void TileSet::TerrainsPattern::set_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain) { +void TileSet::TerrainsPattern::set_terrain(int p_terrain) { + ERR_FAIL_COND(p_terrain < -1); + + terrain = p_terrain; +} + +int TileSet::TerrainsPattern::get_terrain() const { + return terrain; +} + +void TileSet::TerrainsPattern::set_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit, int p_terrain) { ERR_FAIL_COND(p_peering_bit == TileSet::CELL_NEIGHBOR_MAX); ERR_FAIL_COND(!is_valid_bit[p_peering_bit]); ERR_FAIL_COND(p_terrain < -1); @@ -271,25 +287,27 @@ void TileSet::TerrainsPattern::set_terrain(TileSet::CellNeighbor p_peering_bit, bits[p_peering_bit] = p_terrain; } -int TileSet::TerrainsPattern::get_terrain(TileSet::CellNeighbor p_peering_bit) const { +int TileSet::TerrainsPattern::get_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const { ERR_FAIL_COND_V(p_peering_bit == TileSet::CELL_NEIGHBOR_MAX, -1); ERR_FAIL_COND_V(!is_valid_bit[p_peering_bit], -1); return bits[p_peering_bit]; } -void TileSet::TerrainsPattern::set_terrains_from_array(Array p_terrains) { - int in_array_index = 0; +void TileSet::TerrainsPattern::from_array(Array p_terrains) { + set_terrain(p_terrains[0]); + int in_array_index = 1; for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { if (is_valid_bit[i]) { ERR_FAIL_INDEX(in_array_index, p_terrains.size()); - set_terrain(TileSet::CellNeighbor(i), p_terrains[in_array_index]); + set_terrain_peering_bit(TileSet::CellNeighbor(i), p_terrains[in_array_index]); in_array_index++; } } } -Array TileSet::TerrainsPattern::get_terrains_as_array() const { +Array TileSet::TerrainsPattern::as_array() const { Array output; + output.push_back(get_terrain()); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { if (is_valid_bit[i]) { output.push_back(bits[i]); @@ -297,10 +315,11 @@ Array TileSet::TerrainsPattern::get_terrains_as_array() const { } return output; } + TileSet::TerrainsPattern::TerrainsPattern(const TileSet *p_tile_set, int p_terrain_set) { ERR_FAIL_COND(p_terrain_set < 0); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - is_valid_bit[i] = (p_tile_set->is_valid_peering_bit_terrain(p_terrain_set, TileSet::CellNeighbor(i))); + is_valid_bit[i] = (p_tile_set->is_valid_terrain_peering_bit(p_terrain_set, TileSet::CellNeighbor(i))); bits[i] = -1; } valid = true; @@ -410,11 +429,16 @@ void TileSet::_update_terrains_cache() { TileSet::TerrainsPattern terrains_pattern = tile_data->get_terrains_pattern(); + // Main terrain. + if (terrains_pattern.get_terrain() >= 0) { + per_terrain_pattern_tiles[terrain_set][terrains_pattern].insert(cell); + } + // Terrain bits. for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { CellNeighbor bit = CellNeighbor(i); - if (is_valid_peering_bit_terrain(terrain_set, bit)) { - int terrain = terrains_pattern.get_terrain(bit); + if (is_valid_terrain_peering_bit(terrain_set, bit)) { + int terrain = terrains_pattern.get_terrain_peering_bit(bit); if (terrain >= 0) { per_terrain_pattern_tiles[terrain_set][terrains_pattern].insert(cell); } @@ -822,7 +846,7 @@ Color TileSet::get_terrain_color(int p_terrain_set, int p_terrain_index) const { return terrain_sets[p_terrain_set].terrains[p_terrain_index].color; } -bool TileSet::is_valid_peering_bit_for_mode(TileSet::TerrainMode p_terrain_mode, TileSet::CellNeighbor p_peering_bit) const { +bool TileSet::is_valid_terrain_peering_bit_for_mode(TileSet::TerrainMode p_terrain_mode, TileSet::CellNeighbor p_peering_bit) const { if (tile_shape == TileSet::TILE_SHAPE_SQUARE) { if (p_terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES || p_terrain_mode == TileSet::TERRAIN_MODE_MATCH_SIDES) { if (p_peering_bit == TileSet::CELL_NEIGHBOR_RIGHT_SIDE || @@ -905,13 +929,13 @@ bool TileSet::is_valid_peering_bit_for_mode(TileSet::TerrainMode p_terrain_mode, return false; } -bool TileSet::is_valid_peering_bit_terrain(int p_terrain_set, TileSet::CellNeighbor p_peering_bit) const { +bool TileSet::is_valid_terrain_peering_bit(int p_terrain_set, TileSet::CellNeighbor p_peering_bit) const { if (p_terrain_set < 0 || p_terrain_set >= get_terrain_sets_count()) { return false; } TileSet::TerrainMode terrain_mode = get_terrain_set_mode(p_terrain_set); - return is_valid_peering_bit_for_mode(terrain_mode, p_peering_bit); + return is_valid_terrain_peering_bit_for_mode(terrain_mode, p_peering_bit); } // Navigation @@ -1494,26 +1518,48 @@ void TileSet::draw_tile_shape(CanvasItem *p_canvas_item, Transform2D p_transform } } -Vector<Point2> TileSet::get_terrain_bit_polygon(int p_terrain_set, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::get_terrain_polygon(int p_terrain_set) { + if (tile_shape == TileSet::TILE_SHAPE_SQUARE) { + return _get_square_terrain_polygon(tile_size); + } else if (tile_shape == TileSet::TILE_SHAPE_ISOMETRIC) { + return _get_isometric_terrain_polygon(tile_size); + } else { + float overlap = 0.0; + switch (tile_shape) { + case TileSet::TILE_SHAPE_HEXAGON: + overlap = 0.25; + break; + case TileSet::TILE_SHAPE_HALF_OFFSET_SQUARE: + overlap = 0.0; + break; + default: + break; + } + return _get_half_offset_terrain_polygon(tile_size, overlap, tile_offset_axis); + } + return Vector<Point2>(); +} + +Vector<Point2> TileSet::get_terrain_peering_bit_polygon(int p_terrain_set, TileSet::CellNeighbor p_bit) { ERR_FAIL_COND_V(p_terrain_set < 0 || p_terrain_set >= get_terrain_sets_count(), Vector<Point2>()); TileSet::TerrainMode terrain_mode = get_terrain_set_mode(p_terrain_set); if (tile_shape == TileSet::TILE_SHAPE_SQUARE) { if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - return _get_square_corner_or_side_terrain_bit_polygon(tile_size, p_bit); + return _get_square_corner_or_side_terrain_peering_bit_polygon(tile_size, p_bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - return _get_square_corner_terrain_bit_polygon(tile_size, p_bit); + return _get_square_corner_terrain_peering_bit_polygon(tile_size, p_bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - return _get_square_side_terrain_bit_polygon(tile_size, p_bit); + return _get_square_side_terrain_peering_bit_polygon(tile_size, p_bit); } } else if (tile_shape == TileSet::TILE_SHAPE_ISOMETRIC) { if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - return _get_isometric_corner_or_side_terrain_bit_polygon(tile_size, p_bit); + return _get_isometric_corner_or_side_terrain_peering_bit_polygon(tile_size, p_bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - return _get_isometric_corner_terrain_bit_polygon(tile_size, p_bit); + return _get_isometric_corner_terrain_peering_bit_polygon(tile_size, p_bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - return _get_isometric_side_terrain_bit_polygon(tile_size, p_bit); + return _get_isometric_side_terrain_peering_bit_polygon(tile_size, p_bit); } } else { float overlap = 0.0; @@ -1528,11 +1574,11 @@ Vector<Point2> TileSet::get_terrain_bit_polygon(int p_terrain_set, TileSet::Cell break; } if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - return _get_half_offset_corner_or_side_terrain_bit_polygon(tile_size, p_bit, overlap, tile_offset_axis); + return _get_half_offset_corner_or_side_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, p_bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - return _get_half_offset_corner_terrain_bit_polygon(tile_size, p_bit, overlap, tile_offset_axis); + return _get_half_offset_corner_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, p_bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - return _get_half_offset_side_terrain_bit_polygon(tile_size, p_bit, overlap, tile_offset_axis); + return _get_half_offset_side_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, p_bit); } } } @@ -1544,30 +1590,68 @@ void TileSet::draw_terrains(CanvasItem *p_canvas_item, Transform2D p_transform, if (terrain_bits_meshes_dirty) { // Recompute the meshes. - terrain_bits_meshes.clear(); + terrain_peering_bits_meshes.clear(); for (int terrain_mode_index = 0; terrain_mode_index < 3; terrain_mode_index++) { TerrainMode terrain_mode = TerrainMode(terrain_mode_index); + + // Center terrain + Vector<Vector2> polygon; + if (tile_shape == TileSet::TILE_SHAPE_SQUARE) { + polygon = _get_square_terrain_polygon(tile_size); + } else if (tile_shape == TileSet::TILE_SHAPE_ISOMETRIC) { + polygon = _get_isometric_terrain_polygon(tile_size); + } else { + float overlap = 0.0; + switch (tile_shape) { + case TileSet::TILE_SHAPE_HEXAGON: + overlap = 0.25; + break; + case TileSet::TILE_SHAPE_HALF_OFFSET_SQUARE: + overlap = 0.0; + break; + default: + break; + } + polygon = _get_half_offset_terrain_polygon(tile_size, overlap, tile_offset_axis); + } + { + Ref<ArrayMesh> mesh; + mesh.instantiate(); + Vector<Vector2> uvs; + uvs.resize(polygon.size()); + Vector<Color> colors; + colors.resize(polygon.size()); + colors.fill(Color(1.0, 1.0, 1.0, 1.0)); + Array a; + a.resize(Mesh::ARRAY_MAX); + a[Mesh::ARRAY_VERTEX] = polygon; + a[Mesh::ARRAY_TEX_UV] = uvs; + a[Mesh::ARRAY_COLOR] = colors; + a[Mesh::ARRAY_INDEX] = Geometry2D::triangulate_polygon(polygon); + mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Dictionary(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); + terrain_meshes[terrain_mode] = mesh; + } + // Peering bits for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { CellNeighbor bit = CellNeighbor(i); - if (is_valid_peering_bit_for_mode(terrain_mode, bit)) { - Vector<Vector2> polygon; + if (is_valid_terrain_peering_bit_for_mode(terrain_mode, bit)) { if (tile_shape == TileSet::TILE_SHAPE_SQUARE) { if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - polygon = _get_square_corner_or_side_terrain_bit_polygon(tile_size, bit); + polygon = _get_square_corner_or_side_terrain_peering_bit_polygon(tile_size, bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - polygon = _get_square_corner_terrain_bit_polygon(tile_size, bit); + polygon = _get_square_corner_terrain_peering_bit_polygon(tile_size, bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - polygon = _get_square_side_terrain_bit_polygon(tile_size, bit); + polygon = _get_square_side_terrain_peering_bit_polygon(tile_size, bit); } } else if (tile_shape == TileSet::TILE_SHAPE_ISOMETRIC) { if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - polygon = _get_isometric_corner_or_side_terrain_bit_polygon(tile_size, bit); + polygon = _get_isometric_corner_or_side_terrain_peering_bit_polygon(tile_size, bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - polygon = _get_isometric_corner_terrain_bit_polygon(tile_size, bit); + polygon = _get_isometric_corner_terrain_peering_bit_polygon(tile_size, bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - polygon = _get_isometric_side_terrain_bit_polygon(tile_size, bit); + polygon = _get_isometric_side_terrain_peering_bit_polygon(tile_size, bit); } } else { float overlap = 0.0; @@ -1582,29 +1666,30 @@ void TileSet::draw_terrains(CanvasItem *p_canvas_item, Transform2D p_transform, break; } if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS_AND_SIDES) { - polygon = _get_half_offset_corner_or_side_terrain_bit_polygon(tile_size, bit, overlap, tile_offset_axis); + polygon = _get_half_offset_corner_or_side_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, bit); } else if (terrain_mode == TileSet::TERRAIN_MODE_MATCH_CORNERS) { - polygon = _get_half_offset_corner_terrain_bit_polygon(tile_size, bit, overlap, tile_offset_axis); + polygon = _get_half_offset_corner_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, bit); } else { // TileData::TERRAIN_MODE_MATCH_SIDES - polygon = _get_half_offset_side_terrain_bit_polygon(tile_size, bit, overlap, tile_offset_axis); + polygon = _get_half_offset_side_terrain_peering_bit_polygon(tile_size, overlap, tile_offset_axis, bit); } } - - Ref<ArrayMesh> mesh; - mesh.instantiate(); - Vector<Vector2> uvs; - uvs.resize(polygon.size()); - Vector<Color> colors; - colors.resize(polygon.size()); - colors.fill(Color(1.0, 1.0, 1.0, 1.0)); - Array a; - a.resize(Mesh::ARRAY_MAX); - a[Mesh::ARRAY_VERTEX] = polygon; - a[Mesh::ARRAY_TEX_UV] = uvs; - a[Mesh::ARRAY_COLOR] = colors; - a[Mesh::ARRAY_INDEX] = Geometry2D::triangulate_polygon(polygon); - mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Dictionary(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); - terrain_bits_meshes[terrain_mode][bit] = mesh; + { + Ref<ArrayMesh> mesh; + mesh.instantiate(); + Vector<Vector2> uvs; + uvs.resize(polygon.size()); + Vector<Color> colors; + colors.resize(polygon.size()); + colors.fill(Color(1.0, 1.0, 1.0, 1.0)); + Array a; + a.resize(Mesh::ARRAY_MAX); + a[Mesh::ARRAY_VERTEX] = polygon; + a[Mesh::ARRAY_TEX_UV] = uvs; + a[Mesh::ARRAY_COLOR] = colors; + a[Mesh::ARRAY_INDEX] = Geometry2D::triangulate_polygon(polygon); + mesh->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, a, Array(), Dictionary(), Mesh::ARRAY_FLAG_USE_2D_VERTICES); + terrain_peering_bits_meshes[terrain_mode][bit] = mesh; + } } } } @@ -1618,14 +1703,21 @@ void TileSet::draw_terrains(CanvasItem *p_canvas_item, Transform2D p_transform, TileSet::TerrainMode terrain_mode = get_terrain_set_mode(terrain_set); RenderingServer::get_singleton()->canvas_item_add_set_transform(p_canvas_item->get_canvas_item(), p_transform); + int terrain_id = p_tile_data->get_terrain(); + if (terrain_id >= 0) { + Color color = get_terrain_color(terrain_set, terrain_id); + color.a = TERRAIN_ALPHA; + p_canvas_item->draw_mesh(terrain_meshes[terrain_mode], Ref<Texture2D>(), Transform2D(), color); + } + for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { CellNeighbor bit = CellNeighbor(i); - if (is_valid_peering_bit_terrain(terrain_set, bit)) { - int terrain_id = p_tile_data->get_peering_bit_terrain(bit); + if (is_valid_terrain_peering_bit(terrain_set, bit)) { + terrain_id = p_tile_data->get_terrain_peering_bit(bit); if (terrain_id >= 0) { Color color = get_terrain_color(terrain_set, terrain_id); color.a = TERRAIN_ALPHA; - p_canvas_item->draw_mesh(terrain_bits_meshes[terrain_mode][bit], Ref<Texture2D>(), Transform2D(), color); + p_canvas_item->draw_mesh(terrain_peering_bits_meshes[terrain_mode][bit], Ref<Texture2D>(), Transform2D(), color); } } } @@ -1670,13 +1762,16 @@ Vector<Vector<Ref<Texture2D>>> TileSet::generate_terrains_icons(Size2i p_size) { for (int terrain = 0; terrain < get_terrains_count(terrain_set); terrain++) { bit_counts[terrain] = 0; } + if (tile_data->get_terrain() >= 0) { + bit_counts[tile_data->get_terrain()] += 10; + } for (int terrain_bit = 0; terrain_bit < TileSet::CELL_NEIGHBOR_MAX; terrain_bit++) { TileSet::CellNeighbor cell_neighbor = TileSet::CellNeighbor(terrain_bit); - if (is_valid_peering_bit_terrain(terrain_set, cell_neighbor)) { - int terrain = tile_data->get_peering_bit_terrain(cell_neighbor); + if (is_valid_terrain_peering_bit(terrain_set, cell_neighbor)) { + int terrain = tile_data->get_terrain_peering_bit(cell_neighbor); if (terrain >= 0) { if (terrain >= (int)bit_counts.size()) { - WARN_PRINT(vformat("Invalid peering bit terrain: %d", terrain)); + WARN_PRINT(vformat("Invalid terrain peering bit: %d", terrain)); } else { bit_counts[terrain] += 1; } @@ -1730,7 +1825,17 @@ void TileSet::_source_changed() { emit_changed(); } -Vector<Point2> TileSet::_get_square_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_square_terrain_polygon(Vector2i p_size) { + Rect2 rect(-Vector2(p_size) / 6.0, Vector2(p_size) / 3.0); + return { + rect.position, + Vector2(rect.get_end().x, rect.position.y), + rect.get_end(), + Vector2(rect.position.x, rect.get_end().y) + }; +} + +Vector<Point2> TileSet::_get_square_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Rect2 bit_rect; bit_rect.size = Vector2(p_size) / 3; switch (p_bit) { @@ -1773,7 +1878,7 @@ Vector<Point2> TileSet::_get_square_corner_or_side_terrain_bit_polygon(Vector2i return polygon; } -Vector<Point2> TileSet::_get_square_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_square_corner_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Vector2 unit = Vector2(p_size) / 6.0; Vector<Vector2> polygon; switch (p_bit) { @@ -1815,7 +1920,7 @@ Vector<Point2> TileSet::_get_square_corner_terrain_bit_polygon(Vector2i p_size, return polygon; } -Vector<Point2> TileSet::_get_square_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_square_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Vector2 unit = Vector2(p_size) / 6.0; Vector<Vector2> polygon; switch (p_bit) { @@ -1849,7 +1954,17 @@ Vector<Point2> TileSet::_get_square_side_terrain_bit_polygon(Vector2i p_size, Ti return polygon; } -Vector<Point2> TileSet::_get_isometric_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_isometric_terrain_polygon(Vector2i p_size) { + Vector2 unit = Vector2(p_size) / 6.0; + return { + Vector2(1, 0) * unit, + Vector2(0, 1) * unit, + Vector2(-1, 0) * unit, + Vector2(0, -1) * unit, + }; +} + +Vector<Point2> TileSet::_get_isometric_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Vector2 unit = Vector2(p_size) / 6.0; Vector<Vector2> polygon; switch (p_bit) { @@ -1907,7 +2022,7 @@ Vector<Point2> TileSet::_get_isometric_corner_or_side_terrain_bit_polygon(Vector return polygon; } -Vector<Point2> TileSet::_get_isometric_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_isometric_corner_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Vector2 unit = Vector2(p_size) / 6.0; Vector<Vector2> polygon; switch (p_bit) { @@ -1949,7 +2064,7 @@ Vector<Point2> TileSet::_get_isometric_corner_terrain_bit_polygon(Vector2i p_siz return polygon; } -Vector<Point2> TileSet::_get_isometric_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { +Vector<Point2> TileSet::_get_isometric_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit) { Vector2 unit = Vector2(p_size) / 6.0; Vector<Vector2> polygon; switch (p_bit) { @@ -1983,7 +2098,30 @@ Vector<Point2> TileSet::_get_isometric_side_terrain_bit_polygon(Vector2i p_size, return polygon; } -Vector<Point2> TileSet::_get_half_offset_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis) { +Vector<Point2> TileSet::_get_half_offset_terrain_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis) { + Vector2 unit = Vector2(p_size) / 6.0; + if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { + return { + Vector2(1, 1.0 - p_overlap * 2.0) * unit, + Vector2(0, 1) * unit, + Vector2(-1, 1.0 - p_overlap * 2.0) * unit, + Vector2(-1, -1.0 + p_overlap * 2.0) * unit, + Vector2(0, -1) * unit, + Vector2(1, -1.0 + p_overlap * 2.0) * unit, + }; + } else { + return { + Vector2(1, 0) * unit, + Vector2(1.0 - p_overlap * 2.0, -1) * unit, + Vector2(-1.0 + p_overlap * 2.0, -1) * unit, + Vector2(-1, 0) * unit, + Vector2(-1.0 + p_overlap * 2.0, 1) * unit, + Vector2(1.0 - p_overlap * 2.0, 1) * unit, + }; + } +} + +Vector<Point2> TileSet::_get_half_offset_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit) { Vector<Vector2> point_list = { Vector2(3, (3.0 * (1.0 - p_overlap * 2.0)) / 2.0), Vector2(3, 3.0 * (1.0 - p_overlap * 2.0)), @@ -2006,12 +2144,11 @@ Vector<Point2> TileSet::_get_half_offset_corner_or_side_terrain_bit_polygon(Vect }; Vector2 unit = Vector2(p_size) / 6.0; - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = point_list[i] * unit; - } - Vector<Vector2> polygon; if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = point_list[i] * unit; + } switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_SIDE: polygon.push_back(point_list[17]); @@ -2071,10 +2208,8 @@ Vector<Point2> TileSet::_get_half_offset_corner_or_side_terrain_bit_polygon(Vect break; } } else { - if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_VERTICAL) { - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = Vector2(point_list[i].y, point_list[i].x); - } + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = Vector2(point_list[i].y, point_list[i].x) * unit; } switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_CORNER: @@ -2144,7 +2279,7 @@ Vector<Point2> TileSet::_get_half_offset_corner_or_side_terrain_bit_polygon(Vect return polygon; } -Vector<Point2> TileSet::_get_half_offset_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis) { +Vector<Point2> TileSet::_get_half_offset_corner_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit) { Vector<Vector2> point_list = { Vector2(3, 0), Vector2(3, 3.0 * (1.0 - p_overlap * 2.0)), @@ -2161,12 +2296,11 @@ Vector<Point2> TileSet::_get_half_offset_corner_terrain_bit_polygon(Vector2i p_s }; Vector2 unit = Vector2(p_size) / 6.0; - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = point_list[i] * unit; - } - Vector<Vector2> polygon; if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = point_list[i] * unit; + } switch (p_bit) { case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_CORNER: polygon.push_back(point_list[0]); @@ -2202,10 +2336,8 @@ Vector<Point2> TileSet::_get_half_offset_corner_terrain_bit_polygon(Vector2i p_s break; } } else { - if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_VERTICAL) { - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = Vector2(point_list[i].y, point_list[i].x); - } + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = Vector2(point_list[i].y, point_list[i].x) * unit; } switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_CORNER: @@ -2251,7 +2383,7 @@ Vector<Point2> TileSet::_get_half_offset_corner_terrain_bit_polygon(Vector2i p_s return polygon; } -Vector<Point2> TileSet::_get_half_offset_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis) { +Vector<Point2> TileSet::_get_half_offset_side_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit) { Vector<Vector2> point_list = { Vector2(3, 3.0 * (1.0 - p_overlap * 2.0)), Vector2(0, 3), @@ -2262,12 +2394,11 @@ Vector<Point2> TileSet::_get_half_offset_side_terrain_bit_polygon(Vector2i p_siz }; Vector2 unit = Vector2(p_size) / 6.0; - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = point_list[i] * unit; - } - Vector<Vector2> polygon; if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_HORIZONTAL) { + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = point_list[i] * unit; + } switch (p_bit) { case TileSet::CELL_NEIGHBOR_RIGHT_SIDE: polygon.push_back(point_list[5]); @@ -2297,10 +2428,8 @@ Vector<Point2> TileSet::_get_half_offset_side_terrain_bit_polygon(Vector2i p_siz break; } } else { - if (p_offset_axis == TileSet::TILE_OFFSET_AXIS_VERTICAL) { - for (int i = 0; i < point_list.size(); i++) { - point_list.write[i] = Vector2(point_list[i].y, point_list[i].x); - } + for (int i = 0; i < point_list.size(); i++) { + point_list.write[i] = Vector2(point_list[i].y, point_list[i].x) * unit; } switch (p_bit) { case TileSet::CELL_NEIGHBOR_BOTTOM_RIGHT_SIDE: @@ -4929,11 +5058,11 @@ Vector2i TileData::get_texture_offset() const { return tex_offset; } -void TileData::set_material(Ref<ShaderMaterial> p_material) { +void TileData::set_material(Ref<Material> p_material) { material = p_material; emit_signal(SNAME("changed")); } -Ref<ShaderMaterial> TileData::get_material() const { +Ref<Material> TileData::get_material() const { return material; } @@ -5114,36 +5243,51 @@ int TileData::get_terrain_set() const { return terrain_set; } -void TileData::set_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain_index) { +void TileData::set_terrain(int p_terrain) { + ERR_FAIL_COND(terrain_set < 0); + ERR_FAIL_COND(p_terrain < -1); + if (tile_set) { + ERR_FAIL_COND(p_terrain >= tile_set->get_terrains_count(terrain_set)); + } + terrain = p_terrain; + emit_signal(SNAME("changed")); +} + +int TileData::get_terrain() const { + return terrain; +} + +void TileData::set_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit, int p_terrain_index) { ERR_FAIL_INDEX(p_peering_bit, TileSet::CellNeighbor::CELL_NEIGHBOR_MAX); ERR_FAIL_COND(terrain_set < 0); ERR_FAIL_COND(p_terrain_index < -1); if (tile_set) { ERR_FAIL_COND(p_terrain_index >= tile_set->get_terrains_count(terrain_set)); - ERR_FAIL_COND(!is_valid_peering_bit_terrain(p_peering_bit)); + ERR_FAIL_COND(!is_valid_terrain_peering_bit(p_peering_bit)); } terrain_peering_bits[p_peering_bit] = p_terrain_index; emit_signal(SNAME("changed")); } -int TileData::get_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit) const { - ERR_FAIL_COND_V(!is_valid_peering_bit_terrain(p_peering_bit), -1); +int TileData::get_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const { + ERR_FAIL_COND_V(!is_valid_terrain_peering_bit(p_peering_bit), -1); return terrain_peering_bits[p_peering_bit]; } -bool TileData::is_valid_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit) const { +bool TileData::is_valid_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const { ERR_FAIL_COND_V(!tile_set, false); - return tile_set->is_valid_peering_bit_terrain(terrain_set, p_peering_bit); + return tile_set->is_valid_terrain_peering_bit(terrain_set, p_peering_bit); } TileSet::TerrainsPattern TileData::get_terrains_pattern() const { ERR_FAIL_COND_V(!tile_set, TileSet::TerrainsPattern()); TileSet::TerrainsPattern output(tile_set, terrain_set); + output.set_terrain(terrain); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { - if (tile_set->is_valid_peering_bit_terrain(terrain_set, TileSet::CellNeighbor(i))) { - output.set_terrain(TileSet::CellNeighbor(i), get_peering_bit_terrain(TileSet::CellNeighbor(i))); + if (tile_set->is_valid_terrain_peering_bit(terrain_set, TileSet::CellNeighbor(i))) { + output.set_terrain_peering_bit(TileSet::CellNeighbor(i), get_terrain_peering_bit(TileSet::CellNeighbor(i))); } } return output; @@ -5293,7 +5437,7 @@ bool TileData::_set(const StringName &p_name, const Variant &p_value) { for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); if (components[1] == TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i]) { - set_peering_bit_terrain(bit, p_value); + set_terrain_peering_bit(bit, p_value); return true; } } @@ -5455,9 +5599,9 @@ void TileData::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::NIL, "Terrains", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP)); for (int i = 0; i < TileSet::CELL_NEIGHBOR_MAX; i++) { TileSet::CellNeighbor bit = TileSet::CellNeighbor(i); - if (is_valid_peering_bit_terrain(bit)) { + if (is_valid_terrain_peering_bit(bit)) { property_info = PropertyInfo(Variant::INT, "terrains_peering_bit/" + String(TileSet::CELL_NEIGHBOR_ENUM_TO_TEXT[i])); - if (get_peering_bit_terrain(bit) == -1) { + if (get_terrain_peering_bit(bit) == -1) { property_info.usage ^= PROPERTY_USAGE_STORAGE; } p_list->push_back(property_info); @@ -5531,8 +5675,10 @@ void TileData::_bind_methods() { // Terrain ClassDB::bind_method(D_METHOD("set_terrain_set", "terrain_set"), &TileData::set_terrain_set); ClassDB::bind_method(D_METHOD("get_terrain_set"), &TileData::get_terrain_set); - ClassDB::bind_method(D_METHOD("set_peering_bit_terrain", "peering_bit", "terrain"), &TileData::set_peering_bit_terrain); - ClassDB::bind_method(D_METHOD("get_peering_bit_terrain", "peering_bit"), &TileData::get_peering_bit_terrain); + ClassDB::bind_method(D_METHOD("set_terrain", "terrain"), &TileData::set_terrain); + ClassDB::bind_method(D_METHOD("get_terrain"), &TileData::get_terrain); + ClassDB::bind_method(D_METHOD("set_terrain_peering_bit", "peering_bit", "terrain"), &TileData::set_terrain_peering_bit); + ClassDB::bind_method(D_METHOD("get_terrain_peering_bit", "peering_bit"), &TileData::get_terrain_peering_bit); // Navigation ClassDB::bind_method(D_METHOD("set_navigation_polygon", "layer_id", "navigation_polygon"), &TileData::set_navigation_polygon); @@ -5554,12 +5700,13 @@ void TileData::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "transpose"), "set_transpose", "get_transpose"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "texture_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_texture_offset", "get_texture_offset"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial"), "set_material", "get_material"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "CanvasItemMaterial,ShaderMaterial"), "set_material", "get_material"); ADD_PROPERTY(PropertyInfo(Variant::INT, "z_index"), "set_z_index", "get_z_index"); ADD_PROPERTY(PropertyInfo(Variant::INT, "y_sort_origin"), "set_y_sort_origin", "get_y_sort_origin"); ADD_GROUP("Terrains", ""); ADD_PROPERTY(PropertyInfo(Variant::INT, "terrain_set"), "set_terrain_set", "get_terrain_set"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "terrain"), "set_terrain", "get_terrain"); ADD_GROUP("Miscellaneous", ""); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "probability"), "set_probability", "get_probability"); diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h index 615ab35615..7368d2bd87 100644 --- a/scene/resources/tile_set.h +++ b/scene/resources/tile_set.h @@ -164,7 +164,7 @@ private: String name; Ref<Texture2D> texture; Vector2 tex_offset; - Ref<ShaderMaterial> material; + Ref<Material> material; Rect2 region; int tile_mode = 0; Color modulate = Color(1, 1, 1); @@ -265,6 +265,7 @@ public: class TerrainsPattern { bool valid = false; + int terrain = -1; int bits[TileSet::CELL_NEIGHBOR_MAX]; bool is_valid_bit[TileSet::CELL_NEIGHBOR_MAX]; @@ -277,11 +278,14 @@ public: bool operator<(const TerrainsPattern &p_terrains_pattern) const; bool operator==(const TerrainsPattern &p_terrains_pattern) const; - void set_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain); - int get_terrain(TileSet::CellNeighbor p_peering_bit) const; + void set_terrain(int p_terrain); + int get_terrain() const; - void set_terrains_from_array(Array p_terrains); - Array get_terrains_as_array() const; + void set_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit, int p_terrain); + int get_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const; + + void from_array(Array p_terrains); + Array as_array() const; TerrainsPattern(const TileSet *p_tile_set, int p_terrain_set); TerrainsPattern() {} @@ -333,7 +337,8 @@ private: }; Vector<TerrainSet> terrain_sets; - HashMap<TerrainMode, HashMap<CellNeighbor, Ref<ArrayMesh>>> terrain_bits_meshes; + HashMap<TerrainMode, Ref<ArrayMesh>> terrain_meshes; + HashMap<TerrainMode, HashMap<CellNeighbor, Ref<ArrayMesh>>> terrain_peering_bits_meshes; bool terrain_bits_meshes_dirty = true; LocalVector<RBMap<TileSet::TerrainsPattern, RBSet<TileMapCell>>> per_terrain_pattern_tiles; // Cached data. @@ -371,17 +376,20 @@ private: RBMap<Array, Array> alternative_level_proxies; // Helpers - Vector<Point2> _get_square_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_square_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_square_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_square_terrain_polygon(Vector2i p_size); + Vector<Point2> _get_square_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_square_corner_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_square_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_isometric_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_isometric_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_isometric_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_isometric_terrain_polygon(Vector2i p_size); + Vector<Point2> _get_isometric_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_isometric_corner_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_isometric_side_terrain_peering_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit); - Vector<Point2> _get_half_offset_corner_or_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis); - Vector<Point2> _get_half_offset_corner_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis); - Vector<Point2> _get_half_offset_side_terrain_bit_polygon(Vector2i p_size, TileSet::CellNeighbor p_bit, float p_overlap, TileSet::TileOffsetAxis p_offset_axis); + Vector<Point2> _get_half_offset_terrain_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis); + Vector<Point2> _get_half_offset_corner_or_side_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_half_offset_corner_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit); + Vector<Point2> _get_half_offset_side_terrain_peering_bit_polygon(Vector2i p_size, float p_overlap, TileSet::TileOffsetAxis p_offset_axis, TileSet::CellNeighbor p_bit); protected: static void _bind_methods(); @@ -454,8 +462,8 @@ public: String get_terrain_name(int p_terrain_set, int p_terrain_index) const; void set_terrain_color(int p_terrain_set, int p_terrain_index, Color p_color); Color get_terrain_color(int p_terrain_set, int p_terrain_index) const; - bool is_valid_peering_bit_for_mode(TileSet::TerrainMode p_terrain_mode, TileSet::CellNeighbor p_peering_bit) const; - bool is_valid_peering_bit_terrain(int p_terrain_set, TileSet::CellNeighbor p_peering_bit) const; + bool is_valid_terrain_peering_bit_for_mode(TileSet::TerrainMode p_terrain_mode, TileSet::CellNeighbor p_peering_bit) const; + bool is_valid_terrain_peering_bit(int p_terrain_set, TileSet::CellNeighbor p_peering_bit) const; // Navigation int get_navigation_layers_count() const; @@ -516,7 +524,8 @@ public: Vector<Vector2> get_tile_shape_polygon(); void draw_tile_shape(CanvasItem *p_canvas_item, Transform2D p_transform, Color p_color, bool p_filled = false, Ref<Texture2D> p_texture = Ref<Texture2D>()); - Vector<Point2> get_terrain_bit_polygon(int p_terrain_set, TileSet::CellNeighbor p_bit); + Vector<Point2> get_terrain_polygon(int p_terrain_set); + Vector<Point2> get_terrain_peering_bit_polygon(int p_terrain_set, TileSet::CellNeighbor p_bit); void draw_terrains(CanvasItem *p_canvas_item, Transform2D p_transform, const TileData *p_tile_data); Vector<Vector<Ref<Texture2D>>> generate_terrains_icons(Size2i p_size); @@ -774,7 +783,7 @@ private: bool flip_v = false; bool transpose = false; Vector2i tex_offset = Vector2i(); - Ref<ShaderMaterial> material = Ref<ShaderMaterial>(); + Ref<Material> material = Ref<Material>(); Color modulate = Color(1.0, 1.0, 1.0, 1.0); int z_index = 0; int y_sort_origin = 0; @@ -798,6 +807,7 @@ private: // Terrain int terrain_set = -1; + int terrain = -1; int terrain_peering_bits[16] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; // Navigation @@ -854,8 +864,8 @@ public: void set_texture_offset(Vector2i p_texture_offset); Vector2i get_texture_offset() const; - void set_material(Ref<ShaderMaterial> p_material); - Ref<ShaderMaterial> get_material() const; + void set_material(Ref<Material> p_material); + Ref<Material> get_material() const; void set_modulate(Color p_modulate); Color get_modulate() const; void set_z_index(int p_z_index); @@ -887,9 +897,11 @@ public: // Terrain void set_terrain_set(int p_terrain_id); int get_terrain_set() const; - void set_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit, int p_terrain_id); - int get_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit) const; - bool is_valid_peering_bit_terrain(TileSet::CellNeighbor p_peering_bit) const; + void set_terrain(int p_terrain_id); + int get_terrain() const; + void set_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit, int p_terrain_id); + int get_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const; + bool is_valid_terrain_peering_bit(TileSet::CellNeighbor p_peering_bit) const; TileSet::TerrainsPattern get_terrains_pattern() const; // Not exposed. diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 0ab9ef7e16..b8eac6de00 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -712,86 +712,6 @@ VisualShader::VaryingType VisualShader::get_varying_type(const String &p_name) { return varyings[p_name].type; } -void VisualShader::set_engine_version(const Dictionary &p_engine_version) { - ERR_FAIL_COND(!p_engine_version.has("major")); - ERR_FAIL_COND(!p_engine_version.has("minor")); - engine_version["major"] = p_engine_version["major"]; - engine_version["minor"] = p_engine_version["minor"]; -} - -Dictionary VisualShader::get_engine_version() const { - return engine_version; -} - -#ifndef DISABLE_DEPRECATED - -void VisualShader::update_engine_version(const Dictionary &p_new_version) { - if (engine_version.is_empty()) { // before 4.0 - for (int i = 0; i < TYPE_MAX; i++) { - for (KeyValue<int, Node> &E : graph[i].nodes) { - Ref<VisualShaderNodeInput> input = Object::cast_to<VisualShaderNodeInput>(E.value.node.ptr()); - if (input.is_valid()) { - if (input->get_input_name() == "side") { - input->set_input_name("front_facing"); - } - } - Ref<VisualShaderNodeExpression> expression = Object::cast_to<VisualShaderNodeExpression>(E.value.node.ptr()); - if (expression.is_valid()) { - for (int j = 0; j < expression->get_input_port_count(); j++) { - int type = expression->get_input_port_type(j); - if (type > 0) { // + PORT_TYPE_SCALAR_INT + PORT_TYPE_VECTOR_2D - type += 2; - } - expression->set_input_port_type(j, type); - } - for (int j = 0; j < expression->get_output_port_count(); j++) { - int type = expression->get_output_port_type(j); - if (type > 0) { // + PORT_TYPE_SCALAR_INT + PORT_TYPE_VECTOR_2D - type += 2; - } - expression->set_output_port_type(j, type); - } - } - Ref<VisualShaderNodeStep> step = Object::cast_to<VisualShaderNodeStep>(E.value.node.ptr()); - if (step.is_valid()) { - int op_type = int(step->get_op_type()); - if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR - op_type += 2; - } - step->set_op_type(VisualShaderNodeStep::OpType(op_type)); - } - Ref<VisualShaderNodeSmoothStep> sstep = Object::cast_to<VisualShaderNodeSmoothStep>(E.value.node.ptr()); - if (sstep.is_valid()) { - int op_type = int(sstep->get_op_type()); - if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR - op_type += 2; - } - sstep->set_op_type(VisualShaderNodeSmoothStep::OpType(op_type)); - } - Ref<VisualShaderNodeMix> mix = Object::cast_to<VisualShaderNodeMix>(E.value.node.ptr()); - if (mix.is_valid()) { - int op_type = int(mix->get_op_type()); - if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR - op_type += 2; - } - mix->set_op_type(VisualShaderNodeMix::OpType(op_type)); - } - Ref<VisualShaderNodeCompare> compare = Object::cast_to<VisualShaderNodeCompare>(E.value.node.ptr()); - if (compare.is_valid()) { - int ctype = int(compare->get_comparison_type()); - if (int(ctype) > 0) { // + CTYPE_SCALAR_INT + CTYPE_VECTOR_2D - ctype += 2; - } - compare->set_comparison_type(VisualShaderNodeCompare::ComparisonType(ctype)); - } - } - } - } - set_engine_version(p_new_version); -} - -#endif /* DISABLE_DEPRECATED */ - void VisualShader::add_node(Type p_type, const Ref<VisualShaderNode> &p_node, const Vector2 &p_position, int p_id) { ERR_FAIL_COND(p_node.is_null()); ERR_FAIL_COND(p_id < 2); @@ -2628,9 +2548,6 @@ void VisualShader::_bind_methods() { ClassDB::bind_method(D_METHOD("get_node_connections", "type"), &VisualShader::_get_node_connections); - ClassDB::bind_method(D_METHOD("set_engine_version", "version"), &VisualShader::set_engine_version); - ClassDB::bind_method(D_METHOD("get_engine_version"), &VisualShader::get_engine_version); - ClassDB::bind_method(D_METHOD("set_graph_offset", "offset"), &VisualShader::set_graph_offset); ClassDB::bind_method(D_METHOD("get_graph_offset"), &VisualShader::get_graph_offset); @@ -2641,7 +2558,6 @@ void VisualShader::_bind_methods() { ClassDB::bind_method(D_METHOD("_update_shader"), &VisualShader::_update_shader); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "graph_offset", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_graph_offset", "get_graph_offset"); - ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "engine_version", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_engine_version", "get_engine_version"); ADD_PROPERTY_DEFAULT("code", ""); // Inherited from Shader, prevents showing default code as override in docs. diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index 925dff31af..afd84e49cc 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -44,8 +44,6 @@ class VisualShader : public Shader { friend class VisualShaderNodeVersionChecker; - Dictionary engine_version; - public: enum Type { TYPE_VERTEX, @@ -177,14 +175,6 @@ public: // internal methods void set_shader_type(Type p_type); Type get_shader_type() const; -public: - void set_engine_version(const Dictionary &p_version); - Dictionary get_engine_version() const; - -#ifndef DISABLE_DEPRECATED - void update_engine_version(const Dictionary &p_new_version); -#endif /* DISABLE_DEPRECATED */ - enum { NODE_ID_INVALID = -1, NODE_ID_OUTPUT = 0, diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index 9d8e0f7547..4dfbe5f079 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -73,8 +73,8 @@ World2D::World2D() { // Create and configure space2D to be more friendly with pixels than meters space = PhysicsServer2D::get_singleton()->space_create(); PhysicsServer2D::get_singleton()->space_set_active(space, true); - PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/2d/default_gravity", 980.0)); - PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/2d/default_gravity_vector", Vector2(0, 1))); + PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY, GLOBAL_DEF_BASIC("physics/2d/default_gravity", 980.0)); + PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF_BASIC("physics/2d/default_gravity_vector", Vector2(0, 1))); PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF("physics/2d/default_linear_damp", 0.1)); ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/default_linear_damp", PropertyInfo(Variant::FLOAT, "physics/2d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater")); PhysicsServer2D::get_singleton()->area_set_param(space, PhysicsServer2D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/2d/default_angular_damp", 1.0)); diff --git a/scene/resources/world_3d.cpp b/scene/resources/world_3d.cpp index eb0af63975..a84ee773b4 100644 --- a/scene/resources/world_3d.cpp +++ b/scene/resources/world_3d.cpp @@ -141,8 +141,8 @@ World3D::World3D() { scenario = RenderingServer::get_singleton()->scenario_create(); PhysicsServer3D::get_singleton()->space_set_active(space, true); - PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/3d/default_gravity", 9.8)); - PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/3d/default_gravity_vector", Vector3(0, -1, 0))); + PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY, GLOBAL_DEF_BASIC("physics/3d/default_gravity", 9.8)); + PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF_BASIC("physics/3d/default_gravity_vector", Vector3(0, -1, 0))); PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF("physics/3d/default_linear_damp", 0.1)); ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_linear_damp", PropertyInfo(Variant::FLOAT, "physics/3d/default_linear_damp", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater")); PhysicsServer3D::get_singleton()->area_set_param(space, PhysicsServer3D::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/3d/default_angular_damp", 0.1)); diff --git a/servers/SCsub b/servers/SCsub index 66a1b9b26f..2ce90e970b 100644 --- a/servers/SCsub +++ b/servers/SCsub @@ -14,6 +14,7 @@ SConscript("audio/SCsub") SConscript("text/SCsub") SConscript("debugger/SCsub") SConscript("extensions/SCsub") +SConscript("movie_writer/SCsub") lib = env.add_library("servers", env.servers_sources) diff --git a/servers/audio/audio_driver_dummy.cpp b/servers/audio/audio_driver_dummy.cpp index 635e4601c7..60eb657923 100644 --- a/servers/audio/audio_driver_dummy.cpp +++ b/servers/audio/audio_driver_dummy.cpp @@ -33,22 +33,24 @@ #include "core/config/project_settings.h" #include "core/os/os.h" +AudioDriverDummy *AudioDriverDummy::singleton = nullptr; + Error AudioDriverDummy::init() { active = false; thread_exited = false; exit_thread = false; samples_in = nullptr; - mix_rate = GLOBAL_GET("audio/driver/mix_rate"); - speaker_mode = SPEAKER_MODE_STEREO; - channels = 2; - - int latency = GLOBAL_GET("audio/driver/output_latency"); - buffer_frames = closest_power_of_2(latency * mix_rate / 1000); + if (mix_rate == -1) { + mix_rate = GLOBAL_GET("audio/driver/mix_rate"); + } + channels = get_channels(); samples_in = memnew_arr(int32_t, (size_t)buffer_frames * channels); - thread.start(AudioDriverDummy::thread_func, this); + if (use_threads) { + thread.start(AudioDriverDummy::thread_func, this); + } return OK; }; @@ -93,11 +95,56 @@ void AudioDriverDummy::unlock() { mutex.unlock(); }; +void AudioDriverDummy::set_use_threads(bool p_use_threads) { + use_threads = p_use_threads; +} + +void AudioDriverDummy::set_speaker_mode(SpeakerMode p_mode) { + speaker_mode = p_mode; +} + +void AudioDriverDummy::set_mix_rate(int p_rate) { + mix_rate = p_rate; +} + +uint32_t AudioDriverDummy::get_channels() const { + static const int channels_for_mode[4] = { 2, 4, 8, 16 }; + return channels_for_mode[speaker_mode]; +} + +void AudioDriverDummy::mix_audio(int p_frames, int32_t *p_buffer) { + ERR_FAIL_COND(!active); // If not active, should not mix. + ERR_FAIL_COND(use_threads == true); // If using threads, this will not work well. + + uint32_t todo = p_frames; + while (todo) { + uint32_t to_mix = MIN(buffer_frames, todo); + lock(); + audio_server_process(to_mix, samples_in); + unlock(); + + uint32_t total_samples = to_mix * channels; + + for (uint32_t i = 0; i < total_samples; i++) { + p_buffer[i] = samples_in[i]; + } + + todo -= to_mix; + p_buffer += total_samples; + } +} + void AudioDriverDummy::finish() { - exit_thread = true; - thread.wait_to_finish(); + if (use_threads) { + exit_thread = true; + thread.wait_to_finish(); + } if (samples_in) { memdelete_arr(samples_in); }; -}; +} + +AudioDriverDummy::AudioDriverDummy() { + singleton = this; +} diff --git a/servers/audio/audio_driver_dummy.h b/servers/audio/audio_driver_dummy.h index 68b523e086..232a8d5e1f 100644 --- a/servers/audio/audio_driver_dummy.h +++ b/servers/audio/audio_driver_dummy.h @@ -44,9 +44,9 @@ class AudioDriverDummy : public AudioDriver { static void thread_func(void *p_udata); - unsigned int buffer_frames; - unsigned int mix_rate; - SpeakerMode speaker_mode; + uint32_t buffer_frames = 4096; + int32_t mix_rate = -1; + SpeakerMode speaker_mode = SPEAKER_MODE_STEREO; int channels; @@ -54,6 +54,10 @@ class AudioDriverDummy : public AudioDriver { bool thread_exited; mutable bool exit_thread; + bool use_threads = true; + + static AudioDriverDummy *singleton; + public: const char *get_name() const { return "Dummy"; @@ -67,7 +71,17 @@ public: virtual void unlock(); virtual void finish(); - AudioDriverDummy() {} + void set_use_threads(bool p_use_threads); + void set_speaker_mode(SpeakerMode p_mode); + void set_mix_rate(int p_rate); + + uint32_t get_channels() const; + + void mix_audio(int p_frames, int32_t *p_buffer); + + static AudioDriverDummy *get_dummy_singleton() { return singleton; } + + AudioDriverDummy(); ~AudioDriverDummy() {} }; diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp index 8399a92be9..5d9a9e61dc 100644 --- a/servers/audio/audio_stream.cpp +++ b/servers/audio/audio_stream.cpp @@ -135,9 +135,10 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale, uint64_t mix_increment = uint64_t(((get_stream_sampling_rate() * p_rate_scale * playback_speed_scale) / double(target_rate)) * double(FP_LEN)); - int mixed_frames_total = p_frames; + int mixed_frames_total = -1; - for (int i = 0; i < p_frames; i++) { + int i; + for (i = 0; i < p_frames; i++) { uint32_t idx = CUBIC_INTERP_HISTORY + uint32_t(mix_offset >> FP_BITS); //standard cubic interpolation (great quality/performance ratio) //this used to be moved to a LUT for greater performance, but nowadays CPU speed is generally faster than memory. @@ -147,7 +148,7 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale, AudioFrame y2 = internal_buffer[idx - 1]; AudioFrame y3 = internal_buffer[idx - 0]; - if (idx <= internal_buffer_end && idx >= internal_buffer_end && mixed_frames_total == p_frames) { + if (idx >= internal_buffer_end && mixed_frames_total == -1) { // The internal buffer ends somewhere in this range, and we haven't yet recorded the number of good frames we have. mixed_frames_total = i; } @@ -167,24 +168,20 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale, internal_buffer[1] = internal_buffer[INTERNAL_BUFFER_LEN + 1]; internal_buffer[2] = internal_buffer[INTERNAL_BUFFER_LEN + 2]; internal_buffer[3] = internal_buffer[INTERNAL_BUFFER_LEN + 3]; - if (is_playing()) { - int mixed_frames = _mix_internal(internal_buffer + 4, INTERNAL_BUFFER_LEN); - if (mixed_frames != INTERNAL_BUFFER_LEN) { - // internal_buffer[mixed_frames] is the first frame of silence. - internal_buffer_end = mixed_frames; - } else { - // The internal buffer does not contain the first frame of silence. - internal_buffer_end = -1; - } + int mixed_frames = _mix_internal(internal_buffer + 4, INTERNAL_BUFFER_LEN); + if (mixed_frames != INTERNAL_BUFFER_LEN) { + // internal_buffer[mixed_frames] is the first frame of silence. + internal_buffer_end = mixed_frames; } else { - //fill with silence, not playing - for (int j = 0; j < INTERNAL_BUFFER_LEN; ++j) { - internal_buffer[j + 4] = AudioFrame(0, 0); - } + // The internal buffer does not contain the first frame of silence. + internal_buffer_end = -1; } mix_offset -= (INTERNAL_BUFFER_LEN << FP_BITS); } } + if (mixed_frames_total == -1 && i == p_frames) { + mixed_frames_total = p_frames; + } return mixed_frames_total; } @@ -699,7 +696,7 @@ void AudioStreamRandomizer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "streams_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_streams_count", "get_streams_count"); ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_mode", PROPERTY_HINT_ENUM, "Random (Avoid Repeats),Random,Sequential"), "set_playback_mode", "get_playback_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_pitch", PROPERTY_HINT_RANGE, "1,16,0.01"), "set_random_pitch", "get_random_pitch"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_volume_offset_db", PROPERTY_HINT_RANGE, "0,40,0"), "set_random_volume_offset_db", "get_random_volume_offset_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "random_volume_offset_db", PROPERTY_HINT_RANGE, "0,40,0,suffix:dB"), "set_random_volume_offset_db", "get_random_volume_offset_db"); BIND_ENUM_CONSTANT(PLAYBACK_RANDOM_NO_REPEATS); BIND_ENUM_CONSTANT(PLAYBACK_RANDOM); diff --git a/servers/audio/effects/audio_effect_capture.cpp b/servers/audio/effects/audio_effect_capture.cpp index f605cfc9d4..1f5f5e259a 100644 --- a/servers/audio/effects/audio_effect_capture.cpp +++ b/servers/audio/effects/audio_effect_capture.cpp @@ -70,7 +70,7 @@ void AudioEffectCapture::_bind_methods() { ClassDB::bind_method(D_METHOD("get_buffer_length_frames"), &AudioEffectCapture::get_buffer_length_frames); ClassDB::bind_method(D_METHOD("get_pushed_frames"), &AudioEffectCapture::get_pushed_frames); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.01,10,0.01"), "set_buffer_length", "get_buffer_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.01,10,0.01,suffix:s"), "set_buffer_length", "get_buffer_length"); } Ref<AudioEffectInstance> AudioEffectCapture::instantiate() { diff --git a/servers/audio/effects/audio_effect_chorus.cpp b/servers/audio/effects/audio_effect_chorus.cpp index 8b1fe9cfd2..e5434eac02 100644 --- a/servers/audio/effects/audio_effect_chorus.cpp +++ b/servers/audio/effects/audio_effect_chorus.cpp @@ -313,32 +313,32 @@ void AudioEffectChorus::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "dry", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_dry", "get_dry"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wet", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_wet", "get_wet"); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01"), "set_voice_delay_ms", "get_voice_delay_ms", 0); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1"), "set_voice_rate_hz", "get_voice_rate_hz", 0); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01"), "set_voice_depth_ms", "get_voice_depth_ms", 0); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1"), "set_voice_level_db", "get_voice_level_db", 0); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 0); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01,suffix:ms"), "set_voice_delay_ms", "get_voice_delay_ms", 0); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1,suffix:Hz"), "set_voice_rate_hz", "get_voice_rate_hz", 0); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01,suffix:ms"), "set_voice_depth_ms", "get_voice_depth_ms", 0); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1,suffix:dB"), "set_voice_level_db", "get_voice_level_db", 0); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 0); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/1/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_voice_pan", "get_voice_pan", 0); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01"), "set_voice_delay_ms", "get_voice_delay_ms", 1); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1"), "set_voice_rate_hz", "get_voice_rate_hz", 1); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01"), "set_voice_depth_ms", "get_voice_depth_ms", 1); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1"), "set_voice_level_db", "get_voice_level_db", 1); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 1); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01,suffix:ms"), "set_voice_delay_ms", "get_voice_delay_ms", 1); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1,suffix:Hz"), "set_voice_rate_hz", "get_voice_rate_hz", 1); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01,suffix:ms"), "set_voice_depth_ms", "get_voice_depth_ms", 1); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1,suffix:dB"), "set_voice_level_db", "get_voice_level_db", 1); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 1); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/2/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_voice_pan", "get_voice_pan", 1); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01"), "set_voice_delay_ms", "get_voice_delay_ms", 2); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1"), "set_voice_rate_hz", "get_voice_rate_hz", 2); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01"), "set_voice_depth_ms", "get_voice_depth_ms", 2); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1"), "set_voice_level_db", "get_voice_level_db", 2); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 2); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01,suffix:ms"), "set_voice_delay_ms", "get_voice_delay_ms", 2); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1,suffix:Hz"), "set_voice_rate_hz", "get_voice_rate_hz", 2); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01,suffix:ms"), "set_voice_depth_ms", "get_voice_depth_ms", 2); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1,suffix:dB"), "set_voice_level_db", "get_voice_level_db", 2); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 2); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/3/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_voice_pan", "get_voice_pan", 2); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01"), "set_voice_delay_ms", "get_voice_delay_ms", 3); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1"), "set_voice_rate_hz", "get_voice_rate_hz", 3); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01"), "set_voice_depth_ms", "get_voice_depth_ms", 3); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1"), "set_voice_level_db", "get_voice_level_db", 3); - ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 3); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/delay_ms", PROPERTY_HINT_RANGE, "0,50,0.01,suffix:ms"), "set_voice_delay_ms", "get_voice_delay_ms", 3); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/rate_hz", PROPERTY_HINT_RANGE, "0.1,20,0.1,suffix:Hz"), "set_voice_rate_hz", "get_voice_rate_hz", 3); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/depth_ms", PROPERTY_HINT_RANGE, "0,20,0.01,suffix:ms"), "set_voice_depth_ms", "get_voice_depth_ms", 3); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/level_db", PROPERTY_HINT_RANGE, "-60,24,0.1,suffix:dB"), "set_voice_level_db", "get_voice_level_db", 3); + ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_voice_cutoff_hz", "get_voice_cutoff_hz", 3); ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "voice/4/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_voice_pan", "get_voice_pan", 3); } diff --git a/servers/audio/effects/audio_effect_compressor.cpp b/servers/audio/effects/audio_effect_compressor.cpp index f75d092dd3..ee71a6dba7 100644 --- a/servers/audio/effects/audio_effect_compressor.cpp +++ b/servers/audio/effects/audio_effect_compressor.cpp @@ -221,8 +221,8 @@ void AudioEffectCompressor::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "threshold", PROPERTY_HINT_RANGE, "-60,0,0.1"), "set_threshold", "get_threshold"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ratio", PROPERTY_HINT_RANGE, "1,48,0.1"), "set_ratio", "get_ratio"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gain", PROPERTY_HINT_RANGE, "-20,20,0.1"), "set_gain", "get_gain"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "attack_us", PROPERTY_HINT_RANGE, "20,2000,1"), "set_attack_us", "get_attack_us"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "release_ms", PROPERTY_HINT_RANGE, "20,2000,1"), "set_release_ms", "get_release_ms"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "attack_us", PROPERTY_HINT_RANGE, U"20,2000,1,suffix:\u00B5s"), "set_attack_us", "get_attack_us"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "release_ms", PROPERTY_HINT_RANGE, "20,2000,1,suffix:ms"), "set_release_ms", "get_release_ms"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "mix", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_mix", "get_mix"); ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "sidechain", PROPERTY_HINT_ENUM), "set_sidechain", "get_sidechain"); } diff --git a/servers/audio/effects/audio_effect_delay.cpp b/servers/audio/effects/audio_effect_delay.cpp index 1909ab6eae..80e7a8223c 100644 --- a/servers/audio/effects/audio_effect_delay.cpp +++ b/servers/audio/effects/audio_effect_delay.cpp @@ -287,18 +287,18 @@ void AudioEffectDelay::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "dry", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_dry", "get_dry"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "tap1/active"), "set_tap1_active", "is_tap1_active"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap1/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1"), "set_tap1_delay_ms", "get_tap1_delay_ms"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap1/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01"), "set_tap1_level_db", "get_tap1_level_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap1/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1,suffix:ms"), "set_tap1_delay_ms", "get_tap1_delay_ms"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap1/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01,suffix:dB"), "set_tap1_level_db", "get_tap1_level_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap1/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_tap1_pan", "get_tap1_pan"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "tap2/active"), "set_tap2_active", "is_tap2_active"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap2/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1"), "set_tap2_delay_ms", "get_tap2_delay_ms"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap2/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01"), "set_tap2_level_db", "get_tap2_level_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap2/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1,suffix:ms"), "set_tap2_delay_ms", "get_tap2_delay_ms"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap2/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01,suffix:dB"), "set_tap2_level_db", "get_tap2_level_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap2/pan", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_tap2_pan", "get_tap2_pan"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "feedback/active"), "set_feedback_active", "is_feedback_active"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1"), "set_feedback_delay_ms", "get_feedback_delay_ms"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01"), "set_feedback_level_db", "get_feedback_level_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback/delay_ms", PROPERTY_HINT_RANGE, "0,1500,1,suffix:ms"), "set_feedback_delay_ms", "get_feedback_delay_ms"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback/level_db", PROPERTY_HINT_RANGE, "-60,0,0.01,suffix:dB"), "set_feedback_level_db", "get_feedback_level_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback/lowpass", PROPERTY_HINT_RANGE, "1,16000,1"), "set_feedback_lowpass", "get_feedback_lowpass"); } diff --git a/servers/audio/effects/audio_effect_distortion.cpp b/servers/audio/effects/audio_effect_distortion.cpp index afc4353bd7..6820d796a4 100644 --- a/servers/audio/effects/audio_effect_distortion.cpp +++ b/servers/audio/effects/audio_effect_distortion.cpp @@ -161,7 +161,7 @@ void AudioEffectDistortion::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Clip,ATan,LoFi,Overdrive,Wave Shape"), "set_mode", "get_mode"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pre_gain", PROPERTY_HINT_RANGE, "-60,60,0.01"), "set_pre_gain", "get_pre_gain"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "keep_hf_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_keep_hf_hz", "get_keep_hf_hz"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "keep_hf_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_keep_hf_hz", "get_keep_hf_hz"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "drive", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_drive", "get_drive"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "post_gain", PROPERTY_HINT_RANGE, "-80,24,0.01"), "set_post_gain", "get_post_gain"); diff --git a/servers/audio/effects/audio_effect_filter.cpp b/servers/audio/effects/audio_effect_filter.cpp index 06e66f22b1..a9409076cd 100644 --- a/servers/audio/effects/audio_effect_filter.cpp +++ b/servers/audio/effects/audio_effect_filter.cpp @@ -153,7 +153,7 @@ void AudioEffectFilter::_bind_methods() { ClassDB::bind_method(D_METHOD("set_db", "amount"), &AudioEffectFilter::set_db); ClassDB::bind_method(D_METHOD("get_db"), &AudioEffectFilter::get_db); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1"), "set_cutoff", "get_cutoff"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "cutoff_hz", PROPERTY_HINT_RANGE, "1,20500,1,suffix:Hz"), "set_cutoff", "get_cutoff"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "resonance", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_resonance", "get_resonance"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gain", PROPERTY_HINT_RANGE, "0,4,0.01"), "set_gain", "get_gain"); ADD_PROPERTY(PropertyInfo(Variant::INT, "db", PROPERTY_HINT_ENUM, "6 dB,12 dB,18 dB,24 dB"), "set_db", "get_db"); diff --git a/servers/audio/effects/audio_effect_limiter.cpp b/servers/audio/effects/audio_effect_limiter.cpp index 5923cf8cf5..7bcd68d48b 100644 --- a/servers/audio/effects/audio_effect_limiter.cpp +++ b/servers/audio/effects/audio_effect_limiter.cpp @@ -120,9 +120,9 @@ void AudioEffectLimiter::_bind_methods() { ClassDB::bind_method(D_METHOD("set_soft_clip_ratio", "soft_clip"), &AudioEffectLimiter::set_soft_clip_ratio); ClassDB::bind_method(D_METHOD("get_soft_clip_ratio"), &AudioEffectLimiter::get_soft_clip_ratio); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ceiling_db", PROPERTY_HINT_RANGE, "-20,-0.1,0.1"), "set_ceiling_db", "get_ceiling_db"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "threshold_db", PROPERTY_HINT_RANGE, "-30,0,0.1"), "set_threshold_db", "get_threshold_db"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "soft_clip_db", PROPERTY_HINT_RANGE, "0,6,0.1"), "set_soft_clip_db", "get_soft_clip_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ceiling_db", PROPERTY_HINT_RANGE, "-20,-0.1,0.1,suffix:dB"), "set_ceiling_db", "get_ceiling_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "threshold_db", PROPERTY_HINT_RANGE, "-30,0,0.1,suffix:dB"), "set_threshold_db", "get_threshold_db"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "soft_clip_db", PROPERTY_HINT_RANGE, "0,6,0.1,suffix:dB"), "set_soft_clip_db", "get_soft_clip_db"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "soft_clip_ratio", PROPERTY_HINT_RANGE, "3,20,0.1"), "set_soft_clip_ratio", "get_soft_clip_ratio"); } diff --git a/servers/audio/effects/audio_effect_phaser.cpp b/servers/audio/effects/audio_effect_phaser.cpp index af5dce707e..2f86630ce9 100644 --- a/servers/audio/effects/audio_effect_phaser.cpp +++ b/servers/audio/effects/audio_effect_phaser.cpp @@ -144,9 +144,9 @@ void AudioEffectPhaser::_bind_methods() { ClassDB::bind_method(D_METHOD("set_depth", "depth"), &AudioEffectPhaser::set_depth); ClassDB::bind_method(D_METHOD("get_depth"), &AudioEffectPhaser::get_depth); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "range_min_hz", PROPERTY_HINT_RANGE, "10,10000"), "set_range_min_hz", "get_range_min_hz"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "range_max_hz", PROPERTY_HINT_RANGE, "10,10000"), "set_range_max_hz", "get_range_max_hz"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rate_hz", PROPERTY_HINT_RANGE, "0.01,20"), "set_rate_hz", "get_rate_hz"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "range_min_hz", PROPERTY_HINT_RANGE, "10,10000,suffix:Hz"), "set_range_min_hz", "get_range_min_hz"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "range_max_hz", PROPERTY_HINT_RANGE, "10,10000,suffix:Hz"), "set_range_max_hz", "get_range_max_hz"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rate_hz", PROPERTY_HINT_RANGE, "0.01,20,suffix:Hz"), "set_rate_hz", "get_rate_hz"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "feedback", PROPERTY_HINT_RANGE, "0.1,0.9,0.1"), "set_feedback", "get_feedback"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_RANGE, "0.1,4,0.1"), "set_depth", "get_depth"); } diff --git a/servers/audio/effects/audio_effect_record.cpp b/servers/audio/effects/audio_effect_record.cpp index d68522e5b9..a6553e1431 100644 --- a/servers/audio/effects/audio_effect_record.cpp +++ b/servers/audio/effects/audio_effect_record.cpp @@ -71,8 +71,6 @@ bool AudioEffectRecordInstance::process_silence() const { } void AudioEffectRecordInstance::_io_thread_process() { - thread_active = true; - while (is_recording) { //Check: The current recording has been requested to stop if (!base->recording_active) { @@ -86,8 +84,6 @@ void AudioEffectRecordInstance::_io_thread_process() { OS::get_singleton()->delay_usec(500); } } - - thread_active = false; } void AudioEffectRecordInstance::_io_store_buffer() { diff --git a/servers/audio/effects/audio_effect_record.h b/servers/audio/effects/audio_effect_record.h index 305484d1cb..8a6247e27a 100644 --- a/servers/audio/effects/audio_effect_record.h +++ b/servers/audio/effects/audio_effect_record.h @@ -48,7 +48,6 @@ class AudioEffectRecordInstance : public AudioEffectInstance { bool is_recording; Thread io_thread; - bool thread_active = false; Vector<AudioFrame> ring_buffer; Vector<float> recording_data; diff --git a/servers/audio/effects/audio_effect_reverb.cpp b/servers/audio/effects/audio_effect_reverb.cpp index 0d4eb14e6a..bfc68152a4 100644 --- a/servers/audio/effects/audio_effect_reverb.cpp +++ b/servers/audio/effects/audio_effect_reverb.cpp @@ -176,7 +176,7 @@ void AudioEffectReverb::_bind_methods() { ClassDB::bind_method(D_METHOD("get_hpf"), &AudioEffectReverb::get_hpf); ADD_GROUP("Predelay", "predelay_"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "predelay_msec", PROPERTY_HINT_RANGE, "20,500,1"), "set_predelay_msec", "get_predelay_msec"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "predelay_msec", PROPERTY_HINT_RANGE, "20,500,1,suffix:ms"), "set_predelay_msec", "get_predelay_msec"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "predelay_feedback", PROPERTY_HINT_RANGE, "0,0.98,0.01"), "set_predelay_feedback", "get_predelay_feedback"); ADD_GROUP("", ""); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "room_size", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_room_size", "get_room_size"); diff --git a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp index 10627be74c..30ebf626ae 100644 --- a/servers/audio/effects/audio_effect_spectrum_analyzer.cpp +++ b/servers/audio/effects/audio_effect_spectrum_analyzer.cpp @@ -264,7 +264,7 @@ void AudioEffectSpectrumAnalyzer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_fft_size", "size"), &AudioEffectSpectrumAnalyzer::set_fft_size); ClassDB::bind_method(D_METHOD("get_fft_size"), &AudioEffectSpectrumAnalyzer::get_fft_size); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.1,4,0.1"), "set_buffer_length", "get_buffer_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.1,4,0.1,suffix:s"), "set_buffer_length", "get_buffer_length"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "tap_back_pos", PROPERTY_HINT_RANGE, "0.1,4,0.1"), "set_tap_back_pos", "get_tap_back_pos"); ADD_PROPERTY(PropertyInfo(Variant::INT, "fft_size", PROPERTY_HINT_ENUM, "256,512,1024,2048,4096"), "set_fft_size", "get_fft_size"); diff --git a/servers/audio/effects/audio_effect_stereo_enhance.cpp b/servers/audio/effects/audio_effect_stereo_enhance.cpp index 7bb62bcbed..e567add3e7 100644 --- a/servers/audio/effects/audio_effect_stereo_enhance.cpp +++ b/servers/audio/effects/audio_effect_stereo_enhance.cpp @@ -138,7 +138,7 @@ void AudioEffectStereoEnhance::_bind_methods() { ClassDB::bind_method(D_METHOD("get_surround"), &AudioEffectStereoEnhance::get_surround); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pan_pullout", PROPERTY_HINT_RANGE, "0,4,0.01"), "set_pan_pullout", "get_pan_pullout"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "time_pullout_ms", PROPERTY_HINT_RANGE, "0,50,0.01"), "set_time_pullout", "get_time_pullout"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "time_pullout_ms", PROPERTY_HINT_RANGE, "0,50,0.01,suffix:ms"), "set_time_pullout", "get_time_pullout"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "surround", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_surround", "get_surround"); } diff --git a/servers/audio/effects/audio_stream_generator.cpp b/servers/audio/effects/audio_stream_generator.cpp index a3d615b925..46de1692e4 100644 --- a/servers/audio/effects/audio_stream_generator.cpp +++ b/servers/audio/effects/audio_stream_generator.cpp @@ -75,8 +75,8 @@ void AudioStreamGenerator::_bind_methods() { ClassDB::bind_method(D_METHOD("set_buffer_length", "seconds"), &AudioStreamGenerator::set_buffer_length); ClassDB::bind_method(D_METHOD("get_buffer_length"), &AudioStreamGenerator::get_buffer_length); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "mix_rate", PROPERTY_HINT_RANGE, "20,192000,1"), "set_mix_rate", "get_mix_rate"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.01,10,0.01"), "set_buffer_length", "get_buffer_length"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "mix_rate", PROPERTY_HINT_RANGE, "20,192000,1,suffix:Hz"), "set_mix_rate", "get_mix_rate"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "buffer_length", PROPERTY_HINT_RANGE, "0.01,10,0.01,suffix:s"), "set_buffer_length", "get_buffer_length"); } AudioStreamGenerator::AudioStreamGenerator() { diff --git a/servers/movie_writer/SCsub b/servers/movie_writer/SCsub new file mode 100644 index 0000000000..86681f9c74 --- /dev/null +++ b/servers/movie_writer/SCsub @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/movie_writer/movie_writer.cpp b/servers/movie_writer/movie_writer.cpp new file mode 100644 index 0000000000..ac60dc3b9a --- /dev/null +++ b/servers/movie_writer/movie_writer.cpp @@ -0,0 +1,306 @@ +/*************************************************************************/ +/* movie_writer.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "movie_writer.h" +#include "core/config/project_settings.h" +#include "core/io/dir_access.h" + +MovieWriter *MovieWriter::writers[MovieWriter::MAX_WRITERS]; +uint32_t MovieWriter::writer_count = 0; + +void MovieWriter::add_writer(MovieWriter *p_writer) { + ERR_FAIL_COND(writer_count == MAX_WRITERS); + writers[writer_count++] = p_writer; +} + +MovieWriter *MovieWriter::find_writer_for_file(const String &p_file) { + for (int32_t i = writer_count - 1; i >= 0; i--) { // More recent last, to have override ability. + if (writers[i]->handles_file(p_file)) { + return writers[i]; + } + } + return nullptr; +} + +uint32_t MovieWriter::get_audio_mix_rate() const { + uint32_t ret = 0; + if (GDVIRTUAL_REQUIRED_CALL(_get_audio_mix_rate, ret)) { + return ret; + } + return 48000; +} +AudioServer::SpeakerMode MovieWriter::get_audio_speaker_mode() const { + AudioServer::SpeakerMode ret = AudioServer::SPEAKER_MODE_STEREO; + if (GDVIRTUAL_REQUIRED_CALL(_get_audio_speaker_mode, ret)) { + return ret; + } + return AudioServer::SPEAKER_MODE_STEREO; +} + +Error MovieWriter::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) { + Error ret = OK; + if (GDVIRTUAL_REQUIRED_CALL(_write_begin, p_movie_size, p_fps, p_base_path, ret)) { + return ret; + } + return ERR_UNCONFIGURED; +} + +Error MovieWriter::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) { + Error ret = OK; + if (GDVIRTUAL_REQUIRED_CALL(_write_frame, p_image, p_audio_data, ret)) { + return ret; + } + return ERR_UNCONFIGURED; +} + +void MovieWriter::write_end() { + GDVIRTUAL_REQUIRED_CALL(_write_end); +} + +bool MovieWriter::handles_file(const String &p_path) const { + bool ret = false; + if (GDVIRTUAL_REQUIRED_CALL(_handles_file, p_path, ret)) { + return ret; + } + return false; +} + +void MovieWriter::get_supported_extensions(List<String> *r_extensions) const { + Vector<String> exts; + if (GDVIRTUAL_REQUIRED_CALL(_get_supported_extensions, exts)) { + for (int i = 0; i < exts.size(); i++) { + r_extensions->push_back(exts[i]); + } + } +} + +void MovieWriter::begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) { + mix_rate = get_audio_mix_rate(); + AudioDriverDummy::get_dummy_singleton()->set_mix_rate(mix_rate); + AudioDriverDummy::get_dummy_singleton()->set_speaker_mode(AudioDriver::SpeakerMode(get_audio_speaker_mode())); + fps = p_fps; + if ((mix_rate % fps) != 0) { + WARN_PRINT("Audio mix rate (" + itos(mix_rate) + ") can not be divided by fps (" + itos(fps) + "). Audio may go out of sync over time."); + } + + audio_channels = AudioDriverDummy::get_dummy_singleton()->get_channels(); + audio_mix_buffer.resize(mix_rate * audio_channels / fps); + + write_begin(p_movie_size, p_fps, p_base_path); +} + +void MovieWriter::_bind_methods() { + ClassDB::bind_static_method("MovieWriter", D_METHOD("add_writer", "writer"), &MovieWriter::add_writer); + + GDVIRTUAL_BIND(_get_audio_mix_rate) + GDVIRTUAL_BIND(_get_audio_speaker_mode) + + GDVIRTUAL_BIND(_handles_file, "path") + + GDVIRTUAL_BIND(_write_begin, "movie_size", "fps", "base_path") + GDVIRTUAL_BIND(_write_frame, "frame_image", "audio_frame_block") + GDVIRTUAL_BIND(_write_end) + + GLOBAL_DEF("editor/movie_writer/mix_rate_hz", 48000); + GLOBAL_DEF("editor/movie_writer/speaker_mode", 0); + ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/speaker_mode", PropertyInfo(Variant::INT, "editor/movie_writer/speaker_mode", PROPERTY_HINT_ENUM, "Stereo,3.1,5.1,7.1")); + GLOBAL_DEF("editor/movie_writer/mjpeg_quality", 0.75); + // used by the editor + GLOBAL_DEF_BASIC("editor/movie_writer/movie_file", ""); + GLOBAL_DEF_BASIC("editor/movie_writer/disable_vsync", false); + GLOBAL_DEF_BASIC("editor/movie_writer/fps", 60); + ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/fps", PropertyInfo(Variant::INT, "editor/movie_writer/fps", PROPERTY_HINT_RANGE, "1,300,1")); +} + +void MovieWriter::set_extensions_hint() { + RBSet<String> found; + for (uint32_t i = 0; i < writer_count; i++) { + List<String> extensions; + writers[i]->get_supported_extensions(&extensions); + for (const String &ext : extensions) { + found.insert(ext); + } + } + + String ext_hint; + + for (const String &S : found) { + if (ext_hint != "") { + ext_hint += ","; + } + ext_hint += "*." + S; + } + ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/movie_file", PropertyInfo(Variant::STRING, "editor/movie_writer/movie_file", PROPERTY_HINT_GLOBAL_SAVE_FILE, ext_hint)); +} + +void MovieWriter::add_frame(const Ref<Image> &p_image) { + AudioDriverDummy::get_dummy_singleton()->mix_audio(mix_rate / fps, audio_mix_buffer.ptr()); + write_frame(p_image, audio_mix_buffer.ptr()); +} + +void MovieWriter::end() { + write_end(); +} +///////////////////////////////////////// + +uint32_t MovieWriterPNGWAV::get_audio_mix_rate() const { + return mix_rate; +} +AudioServer::SpeakerMode MovieWriterPNGWAV::get_audio_speaker_mode() const { + return speaker_mode; +} + +void MovieWriterPNGWAV::get_supported_extensions(List<String> *r_extensions) const { + r_extensions->push_back("png"); +} + +bool MovieWriterPNGWAV::handles_file(const String &p_path) const { + return p_path.get_extension().to_lower() == "png"; +} + +String MovieWriterPNGWAV::zeros_str(uint32_t p_index) { + char zeros[MAX_TRAILING_ZEROS + 1]; + for (uint32_t i = 0; i < MAX_TRAILING_ZEROS; i++) { + uint32_t idx = MAX_TRAILING_ZEROS - i - 1; + uint32_t digit = (p_index / uint32_t(Math::pow(double(10), double(idx)))) % 10; + zeros[i] = '0' + digit; + } + zeros[MAX_TRAILING_ZEROS] = 0; + return zeros; +} + +Error MovieWriterPNGWAV::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) { + // Quick & Dirty PNGWAV Code based on - https://docs.microsoft.com/en-us/windows/win32/directshow/avi-riff-file-reference + + base_path = p_base_path.get_basename(); + if (base_path.is_relative_path()) { + base_path = "res://" + base_path; + } + + { + //Remove existing files before writing anew + uint32_t idx = 0; + Ref<DirAccess> d = DirAccess::open(base_path.get_base_dir()); + String file = base_path.get_file(); + while (true) { + String path = file + zeros_str(idx) + ".png"; + if (d->remove(path) != OK) { + break; + } + } + } + + f_wav = FileAccess::open(base_path + ".wav", FileAccess::WRITE_READ); + ERR_FAIL_COND_V(f_wav.is_null(), ERR_CANT_OPEN); + + fps = p_fps; + + f_wav->store_buffer((const uint8_t *)"RIFF", 4); + int total_size = 4 /* WAVE */ + 8 /* fmt+size */ + 16 /* format */ + 8 /* data+size */; + f_wav->store_32(total_size); //will store final later + f_wav->store_buffer((const uint8_t *)"WAVE", 4); + + /* FORMAT CHUNK */ + + f_wav->store_buffer((const uint8_t *)"fmt ", 4); + + uint32_t channels = 2; + switch (speaker_mode) { + case AudioServer::SPEAKER_MODE_STEREO: + channels = 2; + break; + case AudioServer::SPEAKER_SURROUND_31: + channels = 4; + break; + case AudioServer::SPEAKER_SURROUND_51: + channels = 6; + break; + case AudioServer::SPEAKER_SURROUND_71: + channels = 8; + break; + } + + f_wav->store_32(16); //standard format, no extra fields + f_wav->store_16(1); // compression code, standard PCM + f_wav->store_16(channels); //CHANNELS: 2 + + f_wav->store_32(mix_rate); + + /* useless stuff the format asks for */ + + int bits_per_sample = 32; + int blockalign = bits_per_sample / 8 * channels; + int bytes_per_sec = mix_rate * blockalign; + + audio_block_size = (mix_rate / fps) * blockalign; + + f_wav->store_32(bytes_per_sec); + f_wav->store_16(blockalign); // block align (unused) + f_wav->store_16(bits_per_sample); + + /* DATA CHUNK */ + + f_wav->store_buffer((const uint8_t *)"data", 4); + + f_wav->store_32(0); //data size... wooh + wav_data_size_pos = f_wav->get_position(); + + return OK; +} + +Error MovieWriterPNGWAV::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) { + ERR_FAIL_COND_V(!f_wav.is_valid(), ERR_UNCONFIGURED); + + Vector<uint8_t> png_buffer = p_image->save_png_to_buffer(); + + Ref<FileAccess> fi = FileAccess::open(base_path + zeros_str(frame_count) + ".png", FileAccess::WRITE); + fi->store_buffer(png_buffer.ptr(), png_buffer.size()); + f_wav->store_buffer((const uint8_t *)p_audio_data, audio_block_size); + + frame_count++; + + return OK; +} + +void MovieWriterPNGWAV::write_end() { + if (f_wav.is_valid()) { + uint32_t total_size = 4 /* WAVE */ + 8 /* fmt+size */ + 16 /* format */ + 8 /* data+size */; + uint32_t datasize = f_wav->get_position() - wav_data_size_pos; + f_wav->seek(4); + f_wav->store_32(total_size + datasize); + f_wav->seek(0x28); + f_wav->store_32(datasize); + } +} + +MovieWriterPNGWAV::MovieWriterPNGWAV() { + mix_rate = GLOBAL_GET("editor/movie_writer/mix_rate_hz"); + speaker_mode = AudioServer::SpeakerMode(int(GLOBAL_GET("editor/movie_writer/speaker_mode"))); +} diff --git a/servers/movie_writer/movie_writer.h b/servers/movie_writer/movie_writer.h new file mode 100644 index 0000000000..11e739df39 --- /dev/null +++ b/servers/movie_writer/movie_writer.h @@ -0,0 +1,123 @@ +/*************************************************************************/ +/* movie_writer.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef MOVIE_WRITER_H +#define MOVIE_WRITER_H + +#include "core/templates/local_vector.h" +#include "servers/audio/audio_driver_dummy.h" +#include "servers/audio_server.h" + +class MovieWriter : public Object { + GDCLASS(MovieWriter, Object); + + uint64_t fps = 0; + uint64_t mix_rate = 0; + uint32_t audio_channels = 0; + + LocalVector<int32_t> audio_mix_buffer; + + enum { + MAX_WRITERS = 8 + }; + static MovieWriter *writers[]; + static uint32_t writer_count; + +protected: + virtual uint32_t get_audio_mix_rate() const; + virtual AudioServer::SpeakerMode get_audio_speaker_mode() const; + + virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path); + virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data); + virtual void write_end(); + + GDVIRTUAL0RC(uint32_t, _get_audio_mix_rate) + GDVIRTUAL0RC(AudioServer::SpeakerMode, _get_audio_speaker_mode) + + GDVIRTUAL1RC(bool, _handles_file, const String &) + GDVIRTUAL0RC(Vector<String>, _get_supported_extensions) + + GDVIRTUAL3R(Error, _write_begin, const Size2i &, uint32_t, const String &) + GDVIRTUAL2R(Error, _write_frame, const Ref<Image> &, GDNativeConstPtr<int32_t>) + GDVIRTUAL0(_write_end) + + static void _bind_methods(); + +public: + virtual bool handles_file(const String &p_path) const; + virtual void get_supported_extensions(List<String> *r_extensions) const; + + static void add_writer(MovieWriter *p_writer); + static MovieWriter *find_writer_for_file(const String &p_file); + + void begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path); + void add_frame(const Ref<Image> &p_image); + + static void set_extensions_hint(); + + void end(); +}; + +class MovieWriterPNGWAV : public MovieWriter { + GDCLASS(MovieWriterPNGWAV, MovieWriter) + + enum { + MAX_TRAILING_ZEROS = 8 // more than 10 days at 60fps, no hard drive can put up with this anyway :) + }; + + uint32_t mix_rate = 48000; + AudioServer::SpeakerMode speaker_mode = AudioServer::SPEAKER_MODE_STEREO; + String base_path; + uint32_t frame_count = 0; + uint32_t fps = 0; + + uint32_t audio_block_size = 0; + + Ref<FileAccess> f_wav; + uint32_t wav_data_size_pos = 0; + + String zeros_str(uint32_t p_index); + +protected: + virtual uint32_t get_audio_mix_rate() const override; + virtual AudioServer::SpeakerMode get_audio_speaker_mode() const override; + virtual void get_supported_extensions(List<String> *r_extensions) const override; + + virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) override; + virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) override; + virtual void write_end() override; + + virtual bool handles_file(const String &p_path) const override; + +public: + MovieWriterPNGWAV(); +}; + +#endif // VIDEO_WRITER_H diff --git a/servers/movie_writer/movie_writer_mjpeg.cpp b/servers/movie_writer/movie_writer_mjpeg.cpp new file mode 100644 index 0000000000..b0c65e768d --- /dev/null +++ b/servers/movie_writer/movie_writer_mjpeg.cpp @@ -0,0 +1,263 @@ +/*************************************************************************/ +/* movie_writer_mjpeg.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "movie_writer_mjpeg.h" +#include "core/config/project_settings.h" + +uint32_t MovieWriterMJPEG::get_audio_mix_rate() const { + return mix_rate; +} +AudioServer::SpeakerMode MovieWriterMJPEG::get_audio_speaker_mode() const { + return speaker_mode; +} + +bool MovieWriterMJPEG::handles_file(const String &p_path) const { + return p_path.get_extension().to_lower() == "avi"; +} + +void MovieWriterMJPEG::get_supported_extensions(List<String> *r_extensions) const { + r_extensions->push_back("avi"); +} + +Error MovieWriterMJPEG::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) { + // Quick & Dirty MJPEG Code based on - https://docs.microsoft.com/en-us/windows/win32/directshow/avi-riff-file-reference + + base_path = p_base_path.get_basename(); + if (base_path.is_relative_path()) { + base_path = "res://" + base_path; + } + + base_path += ".avi"; + + f = FileAccess::open(base_path, FileAccess::WRITE_READ); + + fps = p_fps; + + ERR_FAIL_COND_V(f.is_null(), ERR_CANT_OPEN); + + f->store_buffer((const uint8_t *)"RIFF", 4); + f->store_32(0); // Total length (update later) + f->store_buffer((const uint8_t *)"AVI ", 4); + f->store_buffer((const uint8_t *)"LIST", 4); + f->store_32(300); // 4 + 4 + 4 + 56 + 4 + 4 + 132 + 4 + 4 + 84 + f->store_buffer((const uint8_t *)"hdrl", 4); + f->store_buffer((const uint8_t *)"avih", 4); + f->store_32(56); + + f->store_32(1000000 / p_fps); // Microsecs per frame. + f->store_32(7000); // Max bytes per second + f->store_32(0); // Padding Granularity + f->store_32(16); + total_frames_ofs = f->get_position(); + f->store_32(0); // Total frames (update later) + f->store_32(0); // Initial frames + f->store_32(1); // Streams + f->store_32(0); // Suggested buffer size + f->store_32(p_movie_size.width); // Movie Width + f->store_32(p_movie_size.height); // Movie Height + for (uint32_t i = 0; i < 4; i++) { + f->store_32(0); // Reserved. + } + f->store_buffer((const uint8_t *)"LIST", 4); + f->store_32(132); // 4 + 4 + 4 + 48 + 4 + 4 + 40 + 4 + 4 + 16 + f->store_buffer((const uint8_t *)"strl", 4); + f->store_buffer((const uint8_t *)"strh", 4); + f->store_32(48); + f->store_buffer((const uint8_t *)"vids", 4); + f->store_buffer((const uint8_t *)"MJPG", 4); + f->store_32(0); // Flags + f->store_16(0); // Priority + f->store_16(0); // Language + f->store_32(0); // Initial Frames + f->store_32(1); // Scale + f->store_32(p_fps); // FPS + f->store_32(0); // Start + total_frames_ofs2 = f->get_position(); + f->store_32(0); // Number of frames (to be updated later) + f->store_32(0); // Suggested Buffer Size + f->store_32(0); // Quality + f->store_32(0); // Sample Size + + f->store_buffer((const uint8_t *)"strf", 4); + f->store_32(40); // Size. + f->store_32(40); // Size. + + f->store_32(p_movie_size.width); // Width + f->store_32(p_movie_size.height); // Width + f->store_16(1); // Planes + f->store_16(24); // Bitcount + f->store_buffer((const uint8_t *)"MJPG", 4); // Compression + + f->store_32(((p_movie_size.width * 24 / 8 + 3) & 0xFFFFFFFC) * p_movie_size.height); // SizeImage + f->store_32(0); // XPelsXMeter + f->store_32(0); // YPelsXMeter + f->store_32(0); // ClrUsed + f->store_32(0); // ClrImportant + + f->store_buffer((const uint8_t *)"LIST", 4); + f->store_32(16); + + f->store_buffer((const uint8_t *)"odml", 4); + f->store_buffer((const uint8_t *)"dmlh", 4); + f->store_32(4); // sizes + + total_frames_ofs3 = f->get_position(); + f->store_32(0); // Number of frames (to be updated later) + + // Audio // + + const uint32_t bit_depth = 32; + uint32_t channels = 2; + switch (speaker_mode) { + case AudioServer::SPEAKER_MODE_STEREO: + channels = 2; + break; + case AudioServer::SPEAKER_SURROUND_31: + channels = 4; + break; + case AudioServer::SPEAKER_SURROUND_51: + channels = 6; + break; + case AudioServer::SPEAKER_SURROUND_71: + channels = 8; + break; + } + uint32_t blockalign = bit_depth / 8 * channels; + + f->store_buffer((const uint8_t *)"LIST", 4); + f->store_32(84); // 4 + 4 + 4 + 48 + 4 + 4 + 16 + f->store_buffer((const uint8_t *)"strl", 4); + f->store_buffer((const uint8_t *)"strh", 4); + f->store_32(48); + f->store_buffer((const uint8_t *)"auds", 4); + f->store_32(0); // Handler + f->store_32(0); // Flags + f->store_16(0); // Priority + f->store_16(0); // Language + f->store_32(0); // Initial Frames + f->store_32(blockalign); // Scale + f->store_32(mix_rate * blockalign); // mix rate + f->store_32(0); // Start + total_audio_frames_ofs4 = f->get_position(); + f->store_32(0); // Number of frames (to be updated later) + f->store_32(12288); // Suggested Buffer Size + f->store_32(0xFFFFFFFF); // Quality + f->store_32(blockalign); // Block Align to 32 bits + + audio_block_size = (mix_rate / fps) * blockalign; + + f->store_buffer((const uint8_t *)"strf", 4); + f->store_32(16); // Standard format, no extra fields + f->store_16(1); // Compression code, standard PCM + f->store_16(channels); + f->store_32(mix_rate); // Samples (frames) / Sec + f->store_32(mix_rate * blockalign); // Bytes / sec + f->store_16(blockalign); // Bytes / sec + f->store_16(bit_depth); // Bytes / sec + + f->store_buffer((const uint8_t *)"LIST", 4); + movi_data_ofs = f->get_position(); + f->store_32(0); // Number of frames (to be updated later) + f->store_buffer((const uint8_t *)"movi", 4); + + return OK; +} + +Error MovieWriterMJPEG::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) { + ERR_FAIL_COND_V(!f.is_valid(), ERR_UNCONFIGURED); + + Vector<uint8_t> jpg_buffer = p_image->save_jpg_to_buffer(quality); + uint32_t s = jpg_buffer.size(); + + f->store_buffer((const uint8_t *)"00db", 4); // Stream 0, Video + f->store_32(jpg_buffer.size()); // sizes + f->store_buffer(jpg_buffer.ptr(), jpg_buffer.size()); + if (jpg_buffer.size() & 1) { + f->store_8(0); + s++; + } + jpg_frame_sizes.push_back(s); + + f->store_buffer((const uint8_t *)"01wb", 4); // Stream 1, Audio. + f->store_32(audio_block_size); + f->store_buffer((const uint8_t *)p_audio_data, audio_block_size); + + frame_count++; + + return OK; +} + +void MovieWriterMJPEG::write_end() { + if (f.is_valid()) { + // Finalize the file (frame indices) + f->store_buffer((const uint8_t *)"idx1", 4); + f->store_32(8 * 4 * frame_count); + uint32_t ofs = 4; + uint32_t all_data_size = 0; + for (uint32_t i = 0; i < frame_count; i++) { + f->store_buffer((const uint8_t *)"00db", 4); + f->store_32(16); // AVI_KEYFRAME + f->store_32(ofs); + f->store_32(jpg_frame_sizes[i]); + + ofs += jpg_frame_sizes[i] + 8; + + f->store_buffer((const uint8_t *)"01wb", 4); + f->store_32(16); // AVI_KEYFRAME + f->store_32(ofs); + f->store_32(audio_block_size); + + ofs += audio_block_size + 8; + all_data_size += jpg_frame_sizes[i] + audio_block_size; + } + + uint32_t file_size = f->get_position(); + f->seek(4); + f->store_32(file_size - 78); + f->seek(total_frames_ofs); + f->store_32(frame_count); + f->seek(total_frames_ofs2); + f->store_32(frame_count); + f->seek(total_frames_ofs3); + f->store_32(frame_count); + f->seek(total_audio_frames_ofs4); + f->store_32(frame_count * mix_rate / fps); + f->seek(movi_data_ofs); + f->store_32(all_data_size + 4 + 16 * frame_count); + + f.unref(); + } +} + +MovieWriterMJPEG::MovieWriterMJPEG() { + mix_rate = GLOBAL_GET("editor/movie_writer/mix_rate_hz"); + speaker_mode = AudioServer::SpeakerMode(int(GLOBAL_GET("editor/movie_writer/speaker_mode"))); + quality = GLOBAL_GET("editor/movie_writer/mjpeg_quality"); +} diff --git a/servers/movie_writer/movie_writer_mjpeg.h b/servers/movie_writer/movie_writer_mjpeg.h new file mode 100644 index 0000000000..822bedfedf --- /dev/null +++ b/servers/movie_writer/movie_writer_mjpeg.h @@ -0,0 +1,73 @@ +/*************************************************************************/ +/* movie_writer_mjpeg.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef MOVIE_WRITER_MJPEG_H +#define MOVIE_WRITER_MJPEG_H + +#include "servers/movie_writer/movie_writer.h" + +class MovieWriterMJPEG : public MovieWriter { + GDCLASS(MovieWriterMJPEG, MovieWriter) + + uint32_t mix_rate = 48000; + AudioServer::SpeakerMode speaker_mode = AudioServer::SPEAKER_MODE_STEREO; + String base_path; + uint32_t frame_count = 0; + uint32_t fps = 0; + float quality = 0.75; + + uint32_t audio_block_size = 0; + + Vector<uint32_t> jpg_frame_sizes; + + uint64_t total_frames_ofs = 0; + uint64_t total_frames_ofs2 = 0; + uint64_t total_frames_ofs3 = 0; + uint64_t total_audio_frames_ofs4 = 0; + uint64_t movi_data_ofs = 0; + + Ref<FileAccess> f; + +protected: + virtual uint32_t get_audio_mix_rate() const override; + virtual AudioServer::SpeakerMode get_audio_speaker_mode() const override; + virtual void get_supported_extensions(List<String> *r_extensions) const override; + + virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) override; + virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) override; + virtual void write_end() override; + + virtual bool handles_file(const String &p_path) const override; + +public: + MovieWriterMJPEG(); +}; + +#endif // MOVIE_WRITER_AVIJPEG_H diff --git a/servers/navigation_server_2d.cpp b/servers/navigation_server_2d.cpp index ab323e76e8..0442089503 100644 --- a/servers/navigation_server_2d.cpp +++ b/servers/navigation_server_2d.cpp @@ -166,7 +166,7 @@ void NavigationServer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("map_get_cell_size", "map"), &NavigationServer2D::map_get_cell_size); ClassDB::bind_method(D_METHOD("map_set_edge_connection_margin", "map", "margin"), &NavigationServer2D::map_set_edge_connection_margin); ClassDB::bind_method(D_METHOD("map_get_edge_connection_margin", "map"), &NavigationServer2D::map_get_edge_connection_margin); - ClassDB::bind_method(D_METHOD("map_get_path", "map", "origin", "destination", "optimize", "layers"), &NavigationServer2D::map_get_path, DEFVAL(1)); + ClassDB::bind_method(D_METHOD("map_get_path", "map", "origin", "destination", "optimize", "navigation_layers"), &NavigationServer2D::map_get_path, DEFVAL(1)); ClassDB::bind_method(D_METHOD("map_get_closest_point", "map", "to_point"), &NavigationServer2D::map_get_closest_point); ClassDB::bind_method(D_METHOD("map_get_closest_point_owner", "map", "to_point"), &NavigationServer2D::map_get_closest_point_owner); @@ -180,8 +180,8 @@ void NavigationServer2D::_bind_methods() { ClassDB::bind_method(D_METHOD("region_get_travel_cost", "region"), &NavigationServer2D::region_get_travel_cost); ClassDB::bind_method(D_METHOD("region_set_map", "region", "map"), &NavigationServer2D::region_set_map); ClassDB::bind_method(D_METHOD("region_get_map", "region"), &NavigationServer2D::region_get_map); - ClassDB::bind_method(D_METHOD("region_set_layers", "region", "layers"), &NavigationServer2D::region_set_layers); - ClassDB::bind_method(D_METHOD("region_get_layers", "region"), &NavigationServer2D::region_get_layers); + ClassDB::bind_method(D_METHOD("region_set_navigation_layers", "region", "navigation_layers"), &NavigationServer2D::region_set_navigation_layers); + ClassDB::bind_method(D_METHOD("region_get_navigation_layers", "region"), &NavigationServer2D::region_get_navigation_layers); ClassDB::bind_method(D_METHOD("region_set_transform", "region", "transform"), &NavigationServer2D::region_set_transform); ClassDB::bind_method(D_METHOD("region_set_navpoly", "region", "nav_poly"), &NavigationServer2D::region_set_navpoly); ClassDB::bind_method(D_METHOD("region_get_connections_count", "region"), &NavigationServer2D::region_get_connections_count); @@ -250,8 +250,8 @@ void FORWARD_2_C(region_set_travel_cost, RID, p_region, real_t, p_travel_cost, r real_t FORWARD_1_C(region_get_travel_cost, RID, p_region, rid_to_rid); void FORWARD_2_C(region_set_map, RID, p_region, RID, p_map, rid_to_rid, rid_to_rid); -void FORWARD_2_C(region_set_layers, RID, p_region, uint32_t, p_layers, rid_to_rid, uint32_to_uint32); -uint32_t FORWARD_1_C(region_get_layers, RID, p_region, rid_to_rid); +void FORWARD_2_C(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers, rid_to_rid, uint32_to_uint32); +uint32_t FORWARD_1_C(region_get_navigation_layers, RID, p_region, rid_to_rid); void FORWARD_2_C(region_set_transform, RID, p_region, Transform2D, p_transform, rid_to_rid, trf2_to_trf3); void NavigationServer2D::region_set_navpoly(RID p_region, Ref<NavigationPolygon> p_nav_mesh) const { diff --git a/servers/navigation_server_2d.h b/servers/navigation_server_2d.h index 8e285147b1..30f553d10b 100644 --- a/servers/navigation_server_2d.h +++ b/servers/navigation_server_2d.h @@ -75,7 +75,7 @@ public: virtual real_t map_get_edge_connection_margin(RID p_map) const; /// Returns the navigation path to reach the destination from the origin. - virtual Vector<Vector2> map_get_path(RID p_map, Vector2 p_origin, Vector2 p_destination, bool p_optimize, uint32_t p_layers = 1) const; + virtual Vector<Vector2> map_get_path(RID p_map, Vector2 p_origin, Vector2 p_destination, bool p_optimize, uint32_t p_navigation_layers = 1) const; virtual Vector2 map_get_closest_point(RID p_map, const Vector2 &p_point) const; virtual RID map_get_closest_point_owner(RID p_map, const Vector2 &p_point) const; @@ -99,8 +99,8 @@ public: virtual RID region_get_map(RID p_region) const; /// Set the region's layers - virtual void region_set_layers(RID p_region, uint32_t p_layers) const; - virtual uint32_t region_get_layers(RID p_region) const; + virtual void region_set_navigation_layers(RID p_region, uint32_t p_navigation_layers) const; + virtual uint32_t region_get_navigation_layers(RID p_region) const; /// Set the global transformation of this region. virtual void region_set_transform(RID p_region, Transform2D p_transform) const; diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_server_3d.cpp index 6d99f6dfbb..60bbcec8d4 100644 --- a/servers/navigation_server_3d.cpp +++ b/servers/navigation_server_3d.cpp @@ -42,7 +42,7 @@ void NavigationServer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("map_get_cell_size", "map"), &NavigationServer3D::map_get_cell_size); ClassDB::bind_method(D_METHOD("map_set_edge_connection_margin", "map", "margin"), &NavigationServer3D::map_set_edge_connection_margin); ClassDB::bind_method(D_METHOD("map_get_edge_connection_margin", "map"), &NavigationServer3D::map_get_edge_connection_margin); - ClassDB::bind_method(D_METHOD("map_get_path", "map", "origin", "destination", "optimize", "layers"), &NavigationServer3D::map_get_path, DEFVAL(1)); + ClassDB::bind_method(D_METHOD("map_get_path", "map", "origin", "destination", "optimize", "navigation_layers"), &NavigationServer3D::map_get_path, DEFVAL(1)); ClassDB::bind_method(D_METHOD("map_get_closest_point_to_segment", "map", "start", "end", "use_collision"), &NavigationServer3D::map_get_closest_point_to_segment, DEFVAL(false)); ClassDB::bind_method(D_METHOD("map_get_closest_point", "map", "to_point"), &NavigationServer3D::map_get_closest_point); ClassDB::bind_method(D_METHOD("map_get_closest_point_normal", "map", "to_point"), &NavigationServer3D::map_get_closest_point_normal); @@ -58,8 +58,8 @@ void NavigationServer3D::_bind_methods() { ClassDB::bind_method(D_METHOD("region_get_travel_cost", "region"), &NavigationServer3D::region_get_travel_cost); ClassDB::bind_method(D_METHOD("region_set_map", "region", "map"), &NavigationServer3D::region_set_map); ClassDB::bind_method(D_METHOD("region_get_map", "region"), &NavigationServer3D::region_get_map); - ClassDB::bind_method(D_METHOD("region_set_layers", "region", "layers"), &NavigationServer3D::region_set_layers); - ClassDB::bind_method(D_METHOD("region_get_layers", "region"), &NavigationServer3D::region_get_layers); + ClassDB::bind_method(D_METHOD("region_set_navigation_layers", "region", "navigation_layers"), &NavigationServer3D::region_set_navigation_layers); + ClassDB::bind_method(D_METHOD("region_get_navigation_layers", "region"), &NavigationServer3D::region_get_navigation_layers); ClassDB::bind_method(D_METHOD("region_set_transform", "region", "transform"), &NavigationServer3D::region_set_transform); ClassDB::bind_method(D_METHOD("region_set_navmesh", "region", "nav_mesh"), &NavigationServer3D::region_set_navmesh); ClassDB::bind_method(D_METHOD("region_bake_navmesh", "mesh", "node"), &NavigationServer3D::region_bake_navmesh); diff --git a/servers/navigation_server_3d.h b/servers/navigation_server_3d.h index 9b7e48e8d1..9c04d68622 100644 --- a/servers/navigation_server_3d.h +++ b/servers/navigation_server_3d.h @@ -84,7 +84,7 @@ public: virtual real_t map_get_edge_connection_margin(RID p_map) const = 0; /// Returns the navigation path to reach the destination from the origin. - virtual Vector<Vector3> map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigable_layers = 1) const = 0; + virtual Vector<Vector3> map_get_path(RID p_map, Vector3 p_origin, Vector3 p_destination, bool p_optimize, uint32_t p_navigation_layers = 1) const = 0; virtual Vector3 map_get_closest_point_to_segment(RID p_map, const Vector3 &p_from, const Vector3 &p_to, const bool p_use_collision = false) const = 0; virtual Vector3 map_get_closest_point(RID p_map, const Vector3 &p_point) const = 0; @@ -110,8 +110,8 @@ public: virtual RID region_get_map(RID p_region) const = 0; /// Set the region's layers - virtual void region_set_layers(RID p_region, uint32_t p_layers) const = 0; - virtual uint32_t region_get_layers(RID p_region) const = 0; + virtual void region_set_navigation_layers(RID p_region, uint32_t p_navigation_layers) const = 0; + virtual uint32_t region_get_navigation_layers(RID p_region) const = 0; /// Set the global transformation of this region. virtual void region_set_transform(RID p_region, Transform3D p_transform) const = 0; diff --git a/servers/physics_2d/godot_area_2d.h b/servers/physics_2d/godot_area_2d.h index 35dad9d2c3..221982cf78 100644 --- a/servers/physics_2d/godot_area_2d.h +++ b/servers/physics_2d/godot_area_2d.h @@ -70,9 +70,9 @@ class GodotArea2D : public GodotCollisionObject2D { static uint32_t hash(const BodyKey &p_key) { uint32_t h = hash_one_uint64(p_key.rid.get_id()); - h = hash_djb2_one_64(p_key.instance_id, h); - h = hash_djb2_one_32(p_key.area_shape, h); - return hash_djb2_one_32(p_key.body_shape, h); + h = hash_murmur3_one_64(p_key.instance_id, h); + h = hash_murmur3_one_32(p_key.area_shape, h); + return hash_fmix32(hash_murmur3_one_32(p_key.body_shape, h)); } _FORCE_INLINE_ bool operator==(const BodyKey &p_key) const { diff --git a/servers/physics_3d/godot_area_3d.h b/servers/physics_3d/godot_area_3d.h index a00451f602..51b435eb00 100644 --- a/servers/physics_3d/godot_area_3d.h +++ b/servers/physics_3d/godot_area_3d.h @@ -74,9 +74,9 @@ class GodotArea3D : public GodotCollisionObject3D { static uint32_t hash(const BodyKey &p_key) { uint32_t h = hash_one_uint64(p_key.rid.get_id()); - h = hash_djb2_one_64(p_key.instance_id, h); - h = hash_djb2_one_32(p_key.area_shape, h); - return hash_djb2_one_32(p_key.body_shape, h); + h = hash_murmur3_one_64(p_key.instance_id, h); + h = hash_murmur3_one_32(p_key.area_shape, h); + return hash_fmix32(hash_murmur3_one_32(p_key.body_shape, h)); } _FORCE_INLINE_ bool operator==(const BodyKey &p_key) const { diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 8bbe987cb7..d7d2340119 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -57,6 +57,8 @@ #include "camera_server.h" #include "debugger/servers_debugger.h" #include "display_server.h" +#include "movie_writer/movie_writer.h" +#include "movie_writer/movie_writer_mjpeg.h" #include "navigation_server_2d.h" #include "navigation_server_3d.h" #include "physics_2d/godot_physics_server_2d.h" @@ -107,6 +109,9 @@ static bool has_server_feature_callback(const String &p_feature) { return false; } +static MovieWriterMJPEG *writer_mjpeg = nullptr; +static MovieWriterPNGWAV *writer_pngwav = nullptr; + void register_server_types() { shader_types = memnew(ShaderTypes); @@ -239,6 +244,8 @@ void register_server_types() { GDREGISTER_CLASS(PhysicsTestMotionParameters3D); GDREGISTER_CLASS(PhysicsTestMotionResult3D); + GDREGISTER_VIRTUAL_CLASS(MovieWriter); + ServersDebugger::initialize(); // Physics 2D @@ -254,11 +261,19 @@ void register_server_types() { PhysicsServer3DManager::register_server("GodotPhysics3D", &_createGodotPhysics3DCallback); PhysicsServer3DManager::set_default_server("GodotPhysics3D"); + + writer_mjpeg = memnew(MovieWriterMJPEG); + MovieWriter::add_writer(writer_mjpeg); + + writer_pngwav = memnew(MovieWriterPNGWAV); + MovieWriter::add_writer(writer_pngwav); } void unregister_server_types() { ServersDebugger::deinitialize(); memdelete(shader_types); + memdelete(writer_mjpeg); + memdelete(writer_pngwav); } void register_server_singletons() { diff --git a/servers/rendering/dummy/environment/gi.h b/servers/rendering/dummy/environment/gi.h new file mode 100644 index 0000000000..374f0c8923 --- /dev/null +++ b/servers/rendering/dummy/environment/gi.h @@ -0,0 +1,85 @@ +/*************************************************************************/ +/* gi.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef GI_DUMMY_H +#define GI_DUMMY_H + +#include "servers/rendering/environment/renderer_gi.h" + +namespace RendererDummy { + +class GI : public RendererGI { +public: + /* VOXEL GI API */ + + virtual RID voxel_gi_allocate() override { return RID(); } + virtual void voxel_gi_free(RID p_rid) override {} + virtual void voxel_gi_initialize(RID p_rid) override {} + virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override {} + + virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override { return AABB(); } + virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override { return Vector3i(); } + virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); } + virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); } + virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override { return Vector<uint8_t>(); } + + virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override { return Vector<int>(); } + virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override { return Transform3D(); } + + virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override {} + virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override { return 0; } + + virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override {} + virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override { return 0; } + + virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override {} + virtual float voxel_gi_get_energy(RID p_voxel_gi) const override { return 0.0; } + + virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override {} + virtual float voxel_gi_get_bias(RID p_voxel_gi) const override { return 0.0; } + + virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override {} + virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override { return 0.0; } + + virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override {} + virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override { return false; } + + virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override {} + virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override { return false; } + + virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override {} + virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override { return 0; } + + virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override { return 0; } +}; + +} // namespace RendererDummy + +#endif // !GI_DUMMY_H diff --git a/servers/rendering/dummy/rasterizer_dummy.h b/servers/rendering/dummy/rasterizer_dummy.h index 5c6fcc8386..9c2bd45cce 100644 --- a/servers/rendering/dummy/rasterizer_dummy.h +++ b/servers/rendering/dummy/rasterizer_dummy.h @@ -34,6 +34,7 @@ #include "core/templates/rid_owner.h" #include "core/templates/self_list.h" #include "scene/resources/mesh.h" +#include "servers/rendering/dummy/environment/gi.h" #include "servers/rendering/dummy/rasterizer_canvas_dummy.h" #include "servers/rendering/dummy/rasterizer_scene_dummy.h" #include "servers/rendering/dummy/rasterizer_storage_dummy.h" @@ -57,6 +58,7 @@ protected: RendererDummy::MeshStorage mesh_storage; RendererDummy::ParticlesStorage particles_storage; RendererDummy::TextureStorage texture_storage; + RendererDummy::GI gi; RasterizerStorageDummy storage; RasterizerSceneDummy scene; @@ -66,6 +68,7 @@ public: RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; }; RendererParticlesStorage *get_particles_storage() override { return &particles_storage; }; RendererTextureStorage *get_texture_storage() override { return &texture_storage; }; + RendererGI *get_gi() override { return &gi; }; RendererStorage *get_storage() override { return &storage; } RendererCanvasRender *get_canvas() override { return &canvas; } RendererSceneRender *get_scene() override { return &scene; } diff --git a/servers/rendering/dummy/rasterizer_storage_dummy.h b/servers/rendering/dummy/rasterizer_storage_dummy.h index 596960786a..7f637d2c42 100644 --- a/servers/rendering/dummy/rasterizer_storage_dummy.h +++ b/servers/rendering/dummy/rasterizer_storage_dummy.h @@ -38,47 +38,6 @@ class RasterizerStorageDummy : public RendererStorage { public: void base_update_dependency(RID p_base, DependencyTracker *p_instance) override {} - /* VOXEL GI API */ - - RID voxel_gi_allocate() override { return RID(); } - void voxel_gi_initialize(RID p_rid) override {} - void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override {} - - AABB voxel_gi_get_bounds(RID p_voxel_gi) const override { return AABB(); } - Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override { return Vector3i(); } - Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); } - Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); } - Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override { return Vector<uint8_t>(); } - - Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override { return Vector<int>(); } - Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override { return Transform3D(); } - - void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override {} - float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override { return 0; } - - void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override {} - float voxel_gi_get_propagation(RID p_voxel_gi) const override { return 0; } - - void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override {} - float voxel_gi_get_energy(RID p_voxel_gi) const override { return 0.0; } - - void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override {} - float voxel_gi_get_bias(RID p_voxel_gi) const override { return 0.0; } - - void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override {} - float voxel_gi_get_normal_bias(RID p_voxel_gi) const override { return 0.0; } - - void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override {} - bool voxel_gi_is_interior(RID p_voxel_gi) const override { return false; } - - void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override {} - bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override { return false; } - - void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override {} - float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override { return 0; } - - uint32_t voxel_gi_get_version(RID p_voxel_gi) override { return 0; } - /* OCCLUDER */ void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) {} diff --git a/servers/rendering/environment/renderer_gi.h b/servers/rendering/environment/renderer_gi.h new file mode 100644 index 0000000000..c4f63b7b6b --- /dev/null +++ b/servers/rendering/environment/renderer_gi.h @@ -0,0 +1,85 @@ +/*************************************************************************/ +/* renderer_gi.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef RENDERER_GI_H +#define RENDERER_GI_H + +#include "servers/rendering/renderer_storage.h" +#include "servers/rendering_server.h" + +class RendererGI { +public: + virtual ~RendererGI() {} + + /* VOXEL GI API */ + + virtual RID voxel_gi_allocate() = 0; + virtual void voxel_gi_free(RID p_rid) = 0; + virtual void voxel_gi_initialize(RID p_rid) = 0; + + virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) = 0; + + virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const = 0; + virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const = 0; + virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const = 0; + virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const = 0; + virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const = 0; + + virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const = 0; + virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) = 0; + virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) = 0; + virtual float voxel_gi_get_propagation(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) = 0; + virtual float voxel_gi_get_energy(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) = 0; + virtual float voxel_gi_get_bias(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) = 0; + virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) = 0; + virtual bool voxel_gi_is_interior(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) = 0; + virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const = 0; + + virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) = 0; + virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const = 0; + + virtual uint32_t voxel_gi_get_version(RID p_probe) const = 0; +}; + +#endif // !RENDERER_GI_H diff --git a/servers/rendering/renderer_compositor.h b/servers/rendering/renderer_compositor.h index df3df1077a..f58bc851ef 100644 --- a/servers/rendering/renderer_compositor.h +++ b/servers/rendering/renderer_compositor.h @@ -31,6 +31,7 @@ #ifndef RENDERING_SERVER_COMPOSITOR_H #define RENDERING_SERVER_COMPOSITOR_H +#include "servers/rendering/environment/renderer_gi.h" #include "servers/rendering/renderer_canvas_render.h" #include "servers/rendering/renderer_scene.h" #include "servers/rendering/renderer_storage.h" @@ -81,6 +82,7 @@ public: virtual RendererMeshStorage *get_mesh_storage() = 0; virtual RendererParticlesStorage *get_particles_storage() = 0; virtual RendererTextureStorage *get_texture_storage() = 0; + virtual RendererGI *get_gi() = 0; virtual RendererStorage *get_storage() = 0; virtual RendererCanvasRender *get_canvas() = 0; virtual RendererSceneRender *get_scene() = 0; diff --git a/servers/rendering/renderer_rd/SCsub b/servers/rendering/renderer_rd/SCsub index 774a6b7951..10b83dca11 100644 --- a/servers/rendering/renderer_rd/SCsub +++ b/servers/rendering/renderer_rd/SCsub @@ -5,6 +5,7 @@ Import("env") env.add_source_files(env.servers_sources, "*.cpp") SConscript("effects/SCsub") +SConscript("environment/SCsub") SConscript("forward_clustered/SCsub") SConscript("forward_mobile/SCsub") SConscript("shaders/SCsub") diff --git a/servers/rendering/renderer_rd/effects/resolve.cpp b/servers/rendering/renderer_rd/effects/resolve.cpp new file mode 100644 index 0000000000..6c49a2ebce --- /dev/null +++ b/servers/rendering/renderer_rd/effects/resolve.cpp @@ -0,0 +1,130 @@ +/*************************************************************************/ +/* resolve.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "resolve.h" +#include "servers/rendering/renderer_rd/renderer_compositor_rd.h" +#include "servers/rendering/renderer_rd/storage_rd/material_storage.h" +#include "servers/rendering/renderer_rd/uniform_set_cache_rd.h" + +using namespace RendererRD; + +Resolve::Resolve() { + Vector<String> resolve_modes; + resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n"); + resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n#define VOXEL_GI_RESOLVE\n"); + resolve_modes.push_back("\n#define MODE_RESOLVE_DEPTH\n"); + + resolve.shader.initialize(resolve_modes); + + resolve.shader_version = resolve.shader.version_create(); + + for (int i = 0; i < RESOLVE_MODE_MAX; i++) { + resolve.pipelines[i] = RD::get_singleton()->compute_pipeline_create(resolve.shader.version_get_shader(resolve.shader_version, i)); + } +} + +Resolve::~Resolve() { + resolve.shader.version_free(resolve.shader_version); +} + +void Resolve::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) { + UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton(); + ERR_FAIL_NULL(uniform_set_cache); + MaterialStorage *material_storage = MaterialStorage::get_singleton(); + ERR_FAIL_NULL(material_storage); + + ResolvePushConstant push_constant; + push_constant.screen_size[0] = p_screen_size.x; + push_constant.screen_size[1] = p_screen_size.y; + push_constant.samples = p_samples; + + // setup our uniforms + RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED); + + RD::Uniform u_source_depth(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_depth })); + RD::Uniform u_source_normal_roughness(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 1, Vector<RID>({ default_sampler, p_source_normal_roughness })); + RD::Uniform u_dest_depth(RD::UNIFORM_TYPE_IMAGE, 0, Vector<RID>({ p_dest_depth })); + RD::Uniform u_dest_normal_roughness(RD::UNIFORM_TYPE_IMAGE, 1, Vector<RID>({ p_dest_normal_roughness })); + + ResolveMode mode = p_source_voxel_gi.is_valid() ? RESOLVE_MODE_GI_VOXEL_GI : RESOLVE_MODE_GI; + RID shader = resolve.shader.version_get_shader(resolve.shader_version, mode); + ERR_FAIL_COND(shader.is_null()); + + RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); + RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[mode]); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_depth, u_source_normal_roughness), 0); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_depth, u_dest_normal_roughness), 1); + if (p_source_voxel_gi.is_valid()) { + RD::Uniform u_source_voxel_gi(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_voxel_gi })); + RD::Uniform u_dest_voxel_gi(RD::UNIFORM_TYPE_IMAGE, 0, p_dest_voxel_gi); + + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 2, u_source_voxel_gi), 2); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 3, u_dest_voxel_gi), 3); + } + + RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant)); + + RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1); + + RD::get_singleton()->compute_list_end(p_barrier); +} + +void Resolve::resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) { + UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton(); + ERR_FAIL_NULL(uniform_set_cache); + MaterialStorage *material_storage = MaterialStorage::get_singleton(); + ERR_FAIL_NULL(material_storage); + + ResolvePushConstant push_constant; + push_constant.screen_size[0] = p_screen_size.x; + push_constant.screen_size[1] = p_screen_size.y; + push_constant.samples = p_samples; + + // setup our uniforms + RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED); + + RD::Uniform u_source_depth(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_depth })); + RD::Uniform u_dest_depth(RD::UNIFORM_TYPE_IMAGE, 0, p_dest_depth); + + ResolveMode mode = RESOLVE_MODE_DEPTH; + RID shader = resolve.shader.version_get_shader(resolve.shader_version, mode); + ERR_FAIL_COND(shader.is_null()); + + RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); + RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[mode]); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_depth), 0); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_depth), 1); + + RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant)); + + RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1); + + RD::get_singleton()->compute_list_end(p_barrier); +} diff --git a/servers/rendering/renderer_rd/effects/resolve.h b/servers/rendering/renderer_rd/effects/resolve.h new file mode 100644 index 0000000000..d4b24a610f --- /dev/null +++ b/servers/rendering/renderer_rd/effects/resolve.h @@ -0,0 +1,74 @@ +/*************************************************************************/ +/* resolve.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef RESOLVE_RD_H +#define RESOLVE_RD_H + +#include "servers/rendering/renderer_rd/pipeline_cache_rd.h" +#include "servers/rendering/renderer_rd/shaders/effects/resolve.glsl.gen.h" +#include "servers/rendering/renderer_scene_render.h" + +#include "servers/rendering_server.h" + +namespace RendererRD { + +class Resolve { +private: + struct ResolvePushConstant { + int32_t screen_size[2]; + int32_t samples; + uint32_t pad; + }; + + enum ResolveMode { + RESOLVE_MODE_GI, + RESOLVE_MODE_GI_VOXEL_GI, + RESOLVE_MODE_DEPTH, + RESOLVE_MODE_MAX + }; + + struct ResolveShader { + ResolvePushConstant push_constant; + ResolveShaderRD shader; + RID shader_version; + RID pipelines[RESOLVE_MODE_MAX]; //3 quality levels + } resolve; + +public: + Resolve(); + ~Resolve(); + + void resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL); + void resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL); +}; + +} // namespace RendererRD + +#endif // !RESOLVE_RD_H diff --git a/servers/rendering/renderer_rd/effects_rd.cpp b/servers/rendering/renderer_rd/effects_rd.cpp index bf97c6fbe9..4c542fa2e2 100644 --- a/servers/rendering/renderer_rd/effects_rd.cpp +++ b/servers/rendering/renderer_rd/effects_rd.cpp @@ -1396,46 +1396,6 @@ void EffectsRD::cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuff RD::get_singleton()->draw_list_end(); } -void EffectsRD::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) { - ResolvePushConstant push_constant; - push_constant.screen_size[0] = p_screen_size.x; - push_constant.screen_size[1] = p_screen_size.y; - push_constant.samples = p_samples; - - RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); - RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[p_source_voxel_gi.is_valid() ? RESOLVE_MODE_GI_VOXEL_GI : RESOLVE_MODE_GI]); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture_pair(p_source_depth, p_source_normal_roughness), 0); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_image_pair(p_dest_depth, p_dest_normal_roughness), 1); - if (p_source_voxel_gi.is_valid()) { - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_voxel_gi), 2); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_voxel_gi), 3); - } - - RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant)); - - RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1); - - RD::get_singleton()->compute_list_end(p_barrier); -} - -void EffectsRD::resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) { - ResolvePushConstant push_constant; - push_constant.screen_size[0] = p_screen_size.x; - push_constant.screen_size[1] = p_screen_size.y; - push_constant.samples = p_samples; - - RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); - RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[RESOLVE_MODE_DEPTH]); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_depth), 0); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_depth), 1); - - RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant)); - - RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1); - - RD::get_singleton()->compute_list_end(p_barrier); -} - void EffectsRD::sort_buffer(RID p_uniform_set, int p_size) { Sort::PushConstant push_constant; push_constant.total_elements = p_size; @@ -2009,21 +1969,6 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) { ssil.pipelines[i] = RD::get_singleton()->compute_pipeline_create(ssil.interleave_shader.version_get_shader(ssil.interleave_shader_version, i - SSIL_INTERLEAVE)); } } - - { - Vector<String> resolve_modes; - resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n"); - resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n#define VOXEL_GI_RESOLVE\n"); - resolve_modes.push_back("\n#define MODE_RESOLVE_DEPTH\n"); - - resolve.shader.initialize(resolve_modes); - - resolve.shader_version = resolve.shader.version_create(); - - for (int i = 0; i < RESOLVE_MODE_MAX; i++) { - resolve.pipelines[i] = RD::get_singleton()->compute_pipeline_create(resolve.shader.version_get_shader(resolve.shader_version, i)); - } - } } { @@ -2110,7 +2055,6 @@ EffectsRD::~EffectsRD() { filter.compute_shader.version_free(filter.shader_version); } if (!prefer_raster_effects) { - resolve.shader.version_free(resolve.shader_version); specular_merge.shader.version_free(specular_merge.shader_version); ss_effects.downsample_shader.version_free(ss_effects.downsample_shader_version); ssao.blur_shader.version_free(ssao.blur_shader_version); diff --git a/servers/rendering/renderer_rd/effects_rd.h b/servers/rendering/renderer_rd/effects_rd.h index 787873642e..af4ed5a6ae 100644 --- a/servers/rendering/renderer_rd/effects_rd.h +++ b/servers/rendering/renderer_rd/effects_rd.h @@ -43,7 +43,6 @@ #include "servers/rendering/renderer_rd/shaders/fsr_upscale.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/luminance_reduce.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/luminance_reduce_raster.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/resolve.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/roughness_limiter.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/screen_space_reflection.glsl.gen.h" #include "servers/rendering/renderer_rd/shaders/screen_space_reflection_filter.glsl.gen.h" @@ -579,26 +578,6 @@ private: RID pipelines[3]; //3 quality levels } sss; - struct ResolvePushConstant { - int32_t screen_size[2]; - int32_t samples; - uint32_t pad; - }; - - enum ResolveMode { - RESOLVE_MODE_GI, - RESOLVE_MODE_GI_VOXEL_GI, - RESOLVE_MODE_DEPTH, - RESOLVE_MODE_MAX - }; - - struct Resolve { - ResolvePushConstant push_constant; - ResolveShaderRD shader; - RID shader_version; - RID pipelines[RESOLVE_MODE_MAX]; //3 quality levels - } resolve; - enum SortMode { SORT_MODE_BLOCK, SORT_MODE_STEP, @@ -733,9 +712,6 @@ public: void merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection); void sub_surface_scattering(RID p_diffuse, RID p_diffuse2, RID p_depth, const CameraMatrix &p_camera, const Size2i &p_screen_size, float p_scale, float p_depth_scale, RS::SubSurfaceScatteringQuality p_quality); - void resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL); - void resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL); - void sort_buffer(RID p_uniform_set, int p_size); EffectsRD(bool p_prefer_raster_effects); diff --git a/servers/rendering/renderer_rd/environment/SCsub b/servers/rendering/renderer_rd/environment/SCsub new file mode 100644 index 0000000000..86681f9c74 --- /dev/null +++ b/servers/rendering/renderer_rd/environment/SCsub @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +Import("env") + +env.add_source_files(env.servers_sources, "*.cpp") diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp b/servers/rendering/renderer_rd/environment/gi.cpp index 7aede6bb48..f3be4a7085 100644 --- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp +++ b/servers/rendering/renderer_rd/environment/gi.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* renderer_scene_gi_rd.cpp */ +/* gi.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,20 +28,365 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "renderer_scene_gi_rd.h" +#include "gi.h" #include "core/config/project_settings.h" +#include "servers/rendering/renderer_rd/renderer_compositor_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" +#include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_rd/storage_rd/texture_storage.h" #include "servers/rendering/rendering_server_default.h" -const Vector3i RendererSceneGIRD::SDFGI::Cascade::DIRTY_ALL = Vector3i(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF); +using namespace RendererRD; + +const Vector3i GI::SDFGI::Cascade::DIRTY_ALL = Vector3i(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF); + +GI *GI::singleton = nullptr; + +//////////////////////////////////////////////////////////////////////////////// +// VOXEL GI STORAGE + +RID GI::voxel_gi_allocate() { + return voxel_gi_owner.allocate_rid(); +} + +void GI::voxel_gi_free(RID p_voxel_gi) { + voxel_gi_allocate_data(p_voxel_gi, Transform3D(), AABB(), Vector3i(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<int>()); //deallocate + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + voxel_gi->dependency.deleted_notify(p_voxel_gi); + voxel_gi_owner.free(p_voxel_gi); +} + +void GI::voxel_gi_initialize(RID p_voxel_gi) { + voxel_gi_owner.initialize_rid(p_voxel_gi, VoxelGI()); +} + +void GI::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + if (voxel_gi->octree_buffer.is_valid()) { + RD::get_singleton()->free(voxel_gi->octree_buffer); + RD::get_singleton()->free(voxel_gi->data_buffer); + if (voxel_gi->sdf_texture.is_valid()) { + RD::get_singleton()->free(voxel_gi->sdf_texture); + } + + voxel_gi->sdf_texture = RID(); + voxel_gi->octree_buffer = RID(); + voxel_gi->data_buffer = RID(); + voxel_gi->octree_buffer_size = 0; + voxel_gi->data_buffer_size = 0; + voxel_gi->cell_count = 0; + } + + voxel_gi->to_cell_xform = p_to_cell_xform; + voxel_gi->bounds = p_aabb; + voxel_gi->octree_size = p_octree_size; + voxel_gi->level_counts = p_level_counts; + + if (p_octree_cells.size()) { + ERR_FAIL_COND(p_octree_cells.size() % 32 != 0); //cells size must be a multiple of 32 + + uint32_t cell_count = p_octree_cells.size() / 32; + + ERR_FAIL_COND(p_data_cells.size() != (int)cell_count * 16); //see that data size matches + + voxel_gi->cell_count = cell_count; + voxel_gi->octree_buffer = RD::get_singleton()->storage_buffer_create(p_octree_cells.size(), p_octree_cells); + voxel_gi->octree_buffer_size = p_octree_cells.size(); + voxel_gi->data_buffer = RD::get_singleton()->storage_buffer_create(p_data_cells.size(), p_data_cells); + voxel_gi->data_buffer_size = p_data_cells.size(); + + if (p_distance_field.size()) { + RD::TextureFormat tf; + tf.format = RD::DATA_FORMAT_R8_UNORM; + tf.width = voxel_gi->octree_size.x; + tf.height = voxel_gi->octree_size.y; + tf.depth = voxel_gi->octree_size.z; + tf.texture_type = RD::TEXTURE_TYPE_3D; + tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT; + Vector<Vector<uint8_t>> s; + s.push_back(p_distance_field); + voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView(), s); + } +#if 0 + { + RD::TextureFormat tf; + tf.format = RD::DATA_FORMAT_R8_UNORM; + tf.width = voxel_gi->octree_size.x; + tf.height = voxel_gi->octree_size.y; + tf.depth = voxel_gi->octree_size.z; + tf.type = RD::TEXTURE_TYPE_3D; + tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT; + tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UNORM); + tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UINT); + voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView()); + } + RID shared_tex; + { + RD::TextureView tv; + tv.format_override = RD::DATA_FORMAT_R8_UINT; + shared_tex = RD::get_singleton()->texture_create_shared(tv, voxel_gi->sdf_texture); + } + //update SDF texture + Vector<RD::Uniform> uniforms; + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; + u.binding = 1; + u.append_id(voxel_gi->octree_buffer); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; + u.binding = 2; + u.append_id(voxel_gi->data_buffer); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_IMAGE; + u.binding = 3; + u.append_id(shared_tex); + uniforms.push_back(u); + } + + RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, voxel_gi_sdf_shader_version_shader, 0); + + { + uint32_t push_constant[4] = { 0, 0, 0, 0 }; + + for (int i = 0; i < voxel_gi->level_counts.size() - 1; i++) { + push_constant[0] += voxel_gi->level_counts[i]; + } + push_constant[1] = push_constant[0] + voxel_gi->level_counts[voxel_gi->level_counts.size() - 1]; + + print_line("offset: " + itos(push_constant[0])); + print_line("size: " + itos(push_constant[1])); + //create SDF + RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); + RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, voxel_gi_sdf_shader_pipeline); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set, 0); + RD::get_singleton()->compute_list_set_push_constant(compute_list, push_constant, sizeof(uint32_t) * 4); + RD::get_singleton()->compute_list_dispatch(compute_list, voxel_gi->octree_size.x / 4, voxel_gi->octree_size.y / 4, voxel_gi->octree_size.z / 4); + RD::get_singleton()->compute_list_end(); + } + + RD::get_singleton()->free(uniform_set); + RD::get_singleton()->free(shared_tex); + } +#endif + } + + voxel_gi->version++; + voxel_gi->data_version++; + + voxel_gi->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB); +} + +AABB GI::voxel_gi_get_bounds(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, AABB()); + + return voxel_gi->bounds; +} + +Vector3i GI::voxel_gi_get_octree_size(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Vector3i()); + return voxel_gi->octree_size; +} + +Vector<uint8_t> GI::voxel_gi_get_octree_cells(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); + + if (voxel_gi->octree_buffer.is_valid()) { + return RD::get_singleton()->buffer_get_data(voxel_gi->octree_buffer); + } + return Vector<uint8_t>(); +} + +Vector<uint8_t> GI::voxel_gi_get_data_cells(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); + + if (voxel_gi->data_buffer.is_valid()) { + return RD::get_singleton()->buffer_get_data(voxel_gi->data_buffer); + } + return Vector<uint8_t>(); +} + +Vector<uint8_t> GI::voxel_gi_get_distance_field(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); + + if (voxel_gi->data_buffer.is_valid()) { + return RD::get_singleton()->texture_get_data(voxel_gi->sdf_texture, 0); + } + return Vector<uint8_t>(); +} + +Vector<int> GI::voxel_gi_get_level_counts(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Vector<int>()); + + return voxel_gi->level_counts; +} + +Transform3D GI::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, Transform3D()); + + return voxel_gi->to_cell_xform; +} + +void GI::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->dynamic_range = p_range; + voxel_gi->version++; +} + +float GI::voxel_gi_get_dynamic_range(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + + return voxel_gi->dynamic_range; +} + +void GI::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->propagation = p_range; + voxel_gi->version++; +} + +float GI::voxel_gi_get_propagation(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->propagation; +} + +void GI::voxel_gi_set_energy(RID p_voxel_gi, float p_energy) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->energy = p_energy; +} + +float GI::voxel_gi_get_energy(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->energy; +} + +void GI::voxel_gi_set_bias(RID p_voxel_gi, float p_bias) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->bias = p_bias; +} + +float GI::voxel_gi_get_bias(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->bias; +} + +void GI::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_normal_bias) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->normal_bias = p_normal_bias; +} + +float GI::voxel_gi_get_normal_bias(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->normal_bias; +} + +void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->anisotropy_strength = p_strength; +} + +float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->anisotropy_strength; +} + +void GI::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->interior = p_enable; +} + +void GI::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND(!voxel_gi); + + voxel_gi->use_two_bounces = p_enable; + voxel_gi->version++; +} + +bool GI::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, false); + return voxel_gi->use_two_bounces; +} + +bool GI::voxel_gi_is_interior(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->interior; +} + +uint32_t GI::voxel_gi_get_version(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->version; +} + +uint32_t GI::voxel_gi_get_data_version(RID p_voxel_gi) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, 0); + return voxel_gi->data_version; +} + +RID GI::voxel_gi_get_octree_buffer(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, RID()); + return voxel_gi->octree_buffer; +} + +RID GI::voxel_gi_get_data_buffer(RID p_voxel_gi) const { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, RID()); + return voxel_gi->data_buffer; +} + +RID GI::voxel_gi_get_sdf_texture(RID p_voxel_gi) { + VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); + ERR_FAIL_COND_V(!voxel_gi, RID()); + + return voxel_gi->sdf_texture; +} //////////////////////////////////////////////////////////////////////////////// // SDFGI -void RendererSceneGIRD::SDFGI::create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, RendererSceneGIRD *p_gi) { +void GI::SDFGI::create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, GI *p_gi) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); @@ -755,7 +1100,7 @@ void RendererSceneGIRD::SDFGI::create(RendererSceneEnvironmentRD *p_env, const V reads_sky = p_env->sdfgi_read_sky_light; } -void RendererSceneGIRD::SDFGI::erase() { +void GI::SDFGI::erase() { for (uint32_t i = 0; i < cascades.size(); i++) { const SDFGI::Cascade &c = cascades[i]; RD::get_singleton()->free(c.light_data); @@ -791,9 +1136,26 @@ void RendererSceneGIRD::SDFGI::erase() { RD::get_singleton()->free(ambient_texture); RD::get_singleton()->free(cascades_ubo); + + for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) { + if (RD::get_singleton()->uniform_set_is_valid(debug_uniform_set[v])) { + RD::get_singleton()->free(debug_uniform_set[v]); + } + debug_uniform_set[v] = RID(); + } + + if (RD::get_singleton()->uniform_set_is_valid(debug_probes_uniform_set)) { + RD::get_singleton()->free(debug_probes_uniform_set); + } + debug_probes_uniform_set = RID(); + + if (debug_probes_scene_data_ubo.is_valid()) { + RD::get_singleton()->free(debug_probes_scene_data_ubo); + debug_probes_scene_data_ubo = RID(); + } } -void RendererSceneGIRD::SDFGI::update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position) { +void GI::SDFGI::update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position) { bounce_feedback = p_env->sdfgi_bounce_feedback; energy = p_env->sdfgi_energy; normal_bias = p_env->sdfgi_normal_bias; @@ -851,7 +1213,7 @@ void RendererSceneGIRD::SDFGI::update(RendererSceneEnvironmentRD *p_env, const V } } -void RendererSceneGIRD::SDFGI::update_light() { +void GI::SDFGI::update_light() { RD::get_singleton()->draw_command_begin_label("SDFGI Update dynamic Light"); /* Update dynamic light */ @@ -898,7 +1260,7 @@ void RendererSceneGIRD::SDFGI::update_light() { RD::get_singleton()->draw_command_end_label(); } -void RendererSceneGIRD::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RendererSceneSkyRD::Sky *p_sky) { +void GI::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RendererSceneSkyRD::Sky *p_sky) { RD::get_singleton()->draw_command_begin_label("SDFGI Update Probes"); SDFGIShader::IntegratePushConstant push_constant; @@ -990,7 +1352,7 @@ void RendererSceneGIRD::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RD::get_singleton()->draw_command_end_label(); } -void RendererSceneGIRD::SDFGI::store_probes() { +void GI::SDFGI::store_probes() { RD::get_singleton()->barrier(RD::BARRIER_MASK_COMPUTE, RD::BARRIER_MASK_COMPUTE); RD::get_singleton()->draw_command_begin_label("SDFGI Store Probes"); @@ -1035,7 +1397,7 @@ void RendererSceneGIRD::SDFGI::store_probes() { RD::get_singleton()->draw_command_end_label(); } -int RendererSceneGIRD::SDFGI::get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const { +int GI::SDFGI::get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const { int dirty_count = 0; for (uint32_t i = 0; i < cascades.size(); i++) { const SDFGI::Cascade &c = cascades[i]; @@ -1091,7 +1453,7 @@ int RendererSceneGIRD::SDFGI::get_pending_region_data(int p_region, Vector3i &r_ return -1; } -void RendererSceneGIRD::SDFGI::update_cascades() { +void GI::SDFGI::update_cascades() { //update cascades SDFGI::Cascade::UBO cascade_data[SDFGI::MAX_CASCADES]; int32_t probe_divisor = cascade_size / SDFGI::PROBE_DIVISOR; @@ -1112,160 +1474,177 @@ void RendererSceneGIRD::SDFGI::update_cascades() { RD::get_singleton()->buffer_update(cascades_ubo, 0, sizeof(SDFGI::Cascade::UBO) * SDFGI::MAX_CASCADES, cascade_data, RD::BARRIER_MASK_COMPUTE); } -void RendererSceneGIRD::SDFGI::debug_draw(const CameraMatrix &p_projection, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture) { +void GI::SDFGI::debug_draw(uint32_t p_view_count, const CameraMatrix *p_projections, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture, const Vector<RID> &p_texture_views) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton(); - if (!debug_uniform_set.is_valid() || !RD::get_singleton()->uniform_set_is_valid(debug_uniform_set)) { - Vector<RD::Uniform> uniforms; - { - RD::Uniform u; - u.binding = 1; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { - if (i < cascades.size()) { - u.append_id(cascades[i].sdf_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + for (uint32_t v = 0; v < p_view_count; v++) { + if (!debug_uniform_set[v].is_valid() || !RD::get_singleton()->uniform_set_is_valid(debug_uniform_set[v])) { + Vector<RD::Uniform> uniforms; + { + RD::Uniform u; + u.binding = 1; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { + if (i < cascades.size()) { + u.append_id(cascades[i].sdf_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 2; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { - if (i < cascades.size()) { - u.append_id(cascades[i].light_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + { + RD::Uniform u; + u.binding = 2; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { + if (i < cascades.size()) { + u.append_id(cascades[i].light_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 3; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { - if (i < cascades.size()) { - u.append_id(cascades[i].light_aniso_0_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + { + RD::Uniform u; + u.binding = 3; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { + if (i < cascades.size()) { + u.append_id(cascades[i].light_aniso_0_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 4; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { - if (i < cascades.size()) { - u.append_id(cascades[i].light_aniso_1_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + { + RD::Uniform u; + u.binding = 4; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) { + if (i < cascades.size()) { + u.append_id(cascades[i].light_aniso_1_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 5; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.append_id(occlusion_texture); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 8; - u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; - u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 9; - u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; - u.append_id(cascades_ubo); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 10; - u.uniform_type = RD::UNIFORM_TYPE_IMAGE; - u.append_id(p_texture); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 11; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.append_id(lightprobe_texture); - uniforms.push_back(u); + { + RD::Uniform u; + u.binding = 5; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.append_id(occlusion_texture); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 8; + u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; + u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 9; + u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; + u.append_id(cascades_ubo); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 10; + u.uniform_type = RD::UNIFORM_TYPE_IMAGE; + u.append_id(p_texture_views[v]); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 11; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.append_id(lightprobe_texture); + uniforms.push_back(u); + } + debug_uniform_set[v] = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_shader_version, 0); } - debug_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_shader_version, 0); - } - - RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); - RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, gi->sdfgi_shader.debug_pipeline); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, debug_uniform_set, 0); - - SDFGIShader::DebugPushConstant push_constant; - push_constant.grid_size[0] = cascade_size; - push_constant.grid_size[1] = cascade_size; - push_constant.grid_size[2] = cascade_size; - push_constant.max_cascades = cascades.size(); - push_constant.screen_size[0] = p_width; - push_constant.screen_size[1] = p_height; - push_constant.probe_axis_size = probe_axis_count; - push_constant.use_occlusion = uses_occlusion; - push_constant.y_mult = y_mult; - Vector2 vp_half = p_projection.get_viewport_half_extents(); - push_constant.cam_extent[0] = vp_half.x; - push_constant.cam_extent[1] = vp_half.y; - push_constant.cam_extent[2] = -p_projection.get_z_near(); - - push_constant.cam_transform[0] = p_transform.basis.rows[0][0]; - push_constant.cam_transform[1] = p_transform.basis.rows[1][0]; - push_constant.cam_transform[2] = p_transform.basis.rows[2][0]; - push_constant.cam_transform[3] = 0; - push_constant.cam_transform[4] = p_transform.basis.rows[0][1]; - push_constant.cam_transform[5] = p_transform.basis.rows[1][1]; - push_constant.cam_transform[6] = p_transform.basis.rows[2][1]; - push_constant.cam_transform[7] = 0; - push_constant.cam_transform[8] = p_transform.basis.rows[0][2]; - push_constant.cam_transform[9] = p_transform.basis.rows[1][2]; - push_constant.cam_transform[10] = p_transform.basis.rows[2][2]; - push_constant.cam_transform[11] = 0; - push_constant.cam_transform[12] = p_transform.origin.x; - push_constant.cam_transform[13] = p_transform.origin.y; - push_constant.cam_transform[14] = p_transform.origin.z; - push_constant.cam_transform[15] = 1; - - RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(SDFGIShader::DebugPushConstant)); - - RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_width, p_height, 1); - RD::get_singleton()->compute_list_end(); + RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); + RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, gi->sdfgi_shader.debug_pipeline); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, debug_uniform_set[v], 0); + + SDFGIShader::DebugPushConstant push_constant; + push_constant.grid_size[0] = cascade_size; + push_constant.grid_size[1] = cascade_size; + push_constant.grid_size[2] = cascade_size; + push_constant.max_cascades = cascades.size(); + push_constant.screen_size[0] = p_width; + push_constant.screen_size[1] = p_height; + push_constant.probe_axis_size = probe_axis_count; + push_constant.use_occlusion = uses_occlusion; + push_constant.y_mult = y_mult; + + push_constant.z_near = -p_projections[v].get_z_near(); + + push_constant.cam_transform[0] = p_transform.basis.rows[0][0]; + push_constant.cam_transform[1] = p_transform.basis.rows[1][0]; + push_constant.cam_transform[2] = p_transform.basis.rows[2][0]; + push_constant.cam_transform[3] = 0; + push_constant.cam_transform[4] = p_transform.basis.rows[0][1]; + push_constant.cam_transform[5] = p_transform.basis.rows[1][1]; + push_constant.cam_transform[6] = p_transform.basis.rows[2][1]; + push_constant.cam_transform[7] = 0; + push_constant.cam_transform[8] = p_transform.basis.rows[0][2]; + push_constant.cam_transform[9] = p_transform.basis.rows[1][2]; + push_constant.cam_transform[10] = p_transform.basis.rows[2][2]; + push_constant.cam_transform[11] = 0; + push_constant.cam_transform[12] = p_transform.origin.x; + push_constant.cam_transform[13] = p_transform.origin.y; + push_constant.cam_transform[14] = p_transform.origin.z; + push_constant.cam_transform[15] = 1; + + // need to properly unproject for asymmetric projection matrices in stereo.. + CameraMatrix inv_projection = p_projections[v].inverse(); + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + push_constant.inv_projection[i * 4 + j] = inv_projection.matrix[i][j]; + } + } + + RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(SDFGIShader::DebugPushConstant)); + + RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_width, p_height, 1); + RD::get_singleton()->compute_list_end(); + } Size2 rtsize = texture_storage->render_target_get_size(p_render_target); - copy_effects->copy_to_fb_rect(p_texture, texture_storage->render_target_get_rd_framebuffer(p_render_target), Rect2(Vector2(), rtsize), true); + copy_effects->copy_to_fb_rect(p_texture, texture_storage->render_target_get_rd_framebuffer(p_render_target), Rect2(Vector2(), rtsize), true, false, false, false, RID(), p_view_count > 1); } -void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform) { +void GI::SDFGI::debug_probes(RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth) { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - SDFGIShader::DebugProbesPushConstant push_constant; + // setup scene data + { + SDFGIShader::DebugProbesSceneData scene_data; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - push_constant.projection[i * 4 + j] = p_camera_with_transform.matrix[i][j]; + if (debug_probes_scene_data_ubo.is_null()) { + debug_probes_scene_data_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SDFGIShader::DebugProbesSceneData)); } + + for (uint32_t v = 0; v < p_view_count; v++) { + RendererStorageRD::store_camera(p_camera_with_transforms[v], scene_data.projection[v]); + } + + RD::get_singleton()->buffer_update(debug_probes_scene_data_ubo, 0, sizeof(SDFGIShader::DebugProbesSceneData), &scene_data, RD::BARRIER_MASK_RASTER); } + // setup push constant + SDFGIShader::DebugProbesPushConstant push_constant; + //gen spheres from strips uint32_t band_points = 16; push_constant.band_power = 4; @@ -1314,14 +1693,26 @@ void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_fr u.append_id(occlusion_texture); uniforms.push_back(u); } + { + RD::Uniform u; + u.binding = 5; + u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; + u.append_id(debug_probes_scene_data_ubo); + uniforms.push_back(u); + } debug_probes_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_probes.version_get_shader(gi->sdfgi_shader.debug_probes_shader, 0), 0); } - RD::get_singleton()->draw_list_bind_render_pipeline(p_draw_list, gi->sdfgi_shader.debug_probes_pipeline[SDFGIShader::PROBE_DEBUG_PROBES].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer))); - RD::get_singleton()->draw_list_bind_uniform_set(p_draw_list, debug_probes_uniform_set, 0); - RD::get_singleton()->draw_list_set_push_constant(p_draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant)); - RD::get_singleton()->draw_list_draw(p_draw_list, false, total_probes, total_points); + SDFGIShader::ProbeDebugMode mode = p_view_count > 1 ? SDFGIShader::PROBE_DEBUG_PROBES_MULTIVIEW : SDFGIShader::PROBE_DEBUG_PROBES; + + RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_framebuffer, RD::INITIAL_ACTION_CONTINUE, p_will_continue_color ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_CONTINUE, p_will_continue_depth ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ); + RD::get_singleton()->draw_command_begin_label("Debug SDFGI"); + + RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, gi->sdfgi_shader.debug_probes_pipeline[mode].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer))); + RD::get_singleton()->draw_list_bind_uniform_set(draw_list, debug_probes_uniform_set, 0); + RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant)); + RD::get_singleton()->draw_list_draw(draw_list, false, total_probes, total_points); if (gi->sdfgi_debug_probe_dir != Vector3()) { uint32_t cascade = 0; @@ -1373,14 +1764,17 @@ void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_fr uint32_t cell_count = probe_cells * 2 * probe_cells * 2 * probe_cells * 2; - RD::get_singleton()->draw_list_bind_render_pipeline(p_draw_list, gi->sdfgi_shader.debug_probes_pipeline[SDFGIShader::PROBE_DEBUG_VISIBILITY].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer))); - RD::get_singleton()->draw_list_bind_uniform_set(p_draw_list, debug_probes_uniform_set, 0); - RD::get_singleton()->draw_list_set_push_constant(p_draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant)); - RD::get_singleton()->draw_list_draw(p_draw_list, false, cell_count, total_points); + RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, gi->sdfgi_shader.debug_probes_pipeline[p_view_count > 1 ? SDFGIShader::PROBE_DEBUG_VISIBILITY_MULTIVIEW : SDFGIShader::PROBE_DEBUG_VISIBILITY].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer))); + RD::get_singleton()->draw_list_bind_uniform_set(draw_list, debug_probes_uniform_set, 0); + RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant)); + RD::get_singleton()->draw_list_draw(draw_list, false, cell_count, total_points); } + + RD::get_singleton()->draw_command_end_label(); + RD::get_singleton()->draw_list_end(); } -void RendererSceneGIRD::SDFGI::pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render) { +void GI::SDFGI::pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render) { /* Update general SDFGI Buffer */ SDFGIData sdfgi_data; @@ -1545,7 +1939,7 @@ void RendererSceneGIRD::SDFGI::pre_process_gi(const Transform3D &p_transform, Re } } -void RendererSceneGIRD::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) { +void GI::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) { //print_line("rendering region " + itos(p_region)); RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND(!rb); // we wouldn't be here if this failed but... @@ -1904,7 +2298,7 @@ void RendererSceneGIRD::SDFGI::render_region(RID p_render_buffers, int p_region, } } -void RendererSceneGIRD::SDFGI::render_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result, RendererSceneRenderRD *p_scene_render) { +void GI::SDFGI::render_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result, RendererSceneRenderRD *p_scene_render) { RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND(!rb); // we wouldn't be here if this failed but... @@ -2026,10 +2420,10 @@ void RendererSceneGIRD::SDFGI::render_static_lights(RID p_render_buffers, uint32 //////////////////////////////////////////////////////////////////////////////// // VoxelGIInstance -void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) { +void GI::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); - uint32_t data_version = storage->voxel_gi_get_data_version(probe); + uint32_t data_version = gi->voxel_gi_get_data_version(probe); // (RE)CREATE IF NEEDED @@ -2048,11 +2442,11 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c dynamic_maps.clear(); - Vector3i octree_size = storage->voxel_gi_get_octree_size(probe); + Vector3i octree_size = gi->voxel_gi_get_octree_size(probe); if (octree_size != Vector3i()) { //can create a 3D texture - Vector<int> levels = storage->voxel_gi_get_level_counts(probe); + Vector<int> levels = gi->voxel_gi_get_level_counts(probe); RD::TextureFormat tf; tf.format = RD::DATA_FORMAT_R8G8B8A8_UNORM; @@ -2092,14 +2486,14 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; u.binding = 1; - u.append_id(storage->voxel_gi_get_octree_buffer(probe)); + u.append_id(gi->voxel_gi_get_octree_buffer(probe)); uniforms.push_back(u); } { RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; u.binding = 2; - u.append_id(storage->voxel_gi_get_data_buffer(probe)); + u.append_id(gi->voxel_gi_get_data_buffer(probe)); uniforms.push_back(u); } @@ -2114,7 +2508,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; u.binding = 9; - u.append_id(storage->voxel_gi_get_sdf_texture(probe)); + u.append_id(gi->voxel_gi_get_sdf_texture(probe)); uniforms.push_back(u); } { @@ -2268,7 +2662,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; u.binding = 9; - u.append_id(storage->voxel_gi_get_sdf_texture(probe)); + u.append_id(gi->voxel_gi_get_sdf_texture(probe)); uniforms.push_back(u); } { @@ -2337,7 +2731,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; u.binding = 9; - u.append_id(storage->voxel_gi_get_sdf_texture(probe)); + u.append_id(gi->voxel_gi_get_sdf_texture(probe)); uniforms.push_back(u); } { @@ -2388,7 +2782,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c light_count = MIN(gi->voxel_gi_max_lights, (uint32_t)p_light_instances.size()); { - Transform3D to_cell = storage->voxel_gi_get_to_cell_xform(probe); + Transform3D to_cell = gi->voxel_gi_get_to_cell_xform(probe); Transform3D to_probe_xform = (transform * to_cell.affine_inverse()).affine_inverse(); //update lights @@ -2439,7 +2833,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c if (mipmaps.size()) { //can update mipmaps - Vector3i probe_size = storage->voxel_gi_get_octree_size(probe); + Vector3i probe_size = gi->voxel_gi_get_octree_size(probe); VoxelGIPushConstant push_constant; @@ -2448,8 +2842,8 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c push_constant.limits[2] = probe_size.z; push_constant.stack_size = mipmaps.size(); push_constant.emission_scale = 1.0; - push_constant.propagation = storage->voxel_gi_get_propagation(probe); - push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe); + push_constant.propagation = gi->voxel_gi_get_propagation(probe); + push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe); push_constant.light_count = light_count; push_constant.aniso_strength = 0; @@ -2461,7 +2855,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c int passes; if (p_update_light_instances) { - passes = storage->voxel_gi_is_using_two_bounces(probe) ? 2 : 1; + passes = gi->voxel_gi_is_using_two_bounces(probe) ? 2 : 1; } else { passes = 1; //only re-blitting is necessary } @@ -2528,13 +2922,13 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c has_dynamic_object_data = false; //clear until dynamic object data is used again if (p_dynamic_objects.size() && dynamic_maps.size()) { - Vector3i octree_size = storage->voxel_gi_get_octree_size(probe); + Vector3i octree_size = gi->voxel_gi_get_octree_size(probe); int multiplier = dynamic_maps[0].size / MAX(MAX(octree_size.x, octree_size.y), octree_size.z); Transform3D oversample_scale; oversample_scale.basis.scale(Vector3(multiplier, multiplier, multiplier)); - Transform3D to_cell = oversample_scale * storage->voxel_gi_get_to_cell_xform(probe); + Transform3D to_cell = oversample_scale * gi->voxel_gi_get_to_cell_xform(probe); Transform3D to_world_xform = transform * to_cell.affine_inverse(); Transform3D to_probe_xform = to_world_xform.affine_inverse(); @@ -2634,7 +3028,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c push_constant.z_base = xform.origin[z_axis]; push_constant.z_sign = (z_flip ? -1.0 : 1.0); push_constant.pos_multiplier = float(1.0) / multiplier; - push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe); + push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe); push_constant.flip_x = x_flip; push_constant.flip_y = y_flip; push_constant.rect_pos[0] = rect.position[0]; @@ -2646,7 +3040,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c push_constant.prev_rect_size[0] = 0; push_constant.prev_rect_size[1] = 0; push_constant.on_mipmap = false; - push_constant.propagation = storage->voxel_gi_get_propagation(probe); + push_constant.propagation = gi->voxel_gi_get_propagation(probe); push_constant.pad[0] = 0; push_constant.pad[1] = 0; push_constant.pad[2] = 0; @@ -2728,24 +3122,24 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c has_dynamic_object_data = true; //clear until dynamic object data is used again } - last_probe_version = storage->voxel_gi_get_version(probe); + last_probe_version = gi->voxel_gi_get_version(probe); } -void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) { +void GI::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); if (mipmaps.size() == 0) { return; } - CameraMatrix cam_transform = (p_camera_with_transform * CameraMatrix(transform)) * CameraMatrix(storage->voxel_gi_get_to_cell_xform(probe).affine_inverse()); + CameraMatrix cam_transform = (p_camera_with_transform * CameraMatrix(transform)) * CameraMatrix(gi->voxel_gi_get_to_cell_xform(probe).affine_inverse()); int level = 0; - Vector3i octree_size = storage->voxel_gi_get_octree_size(probe); + Vector3i octree_size = gi->voxel_gi_get_octree_size(probe); VoxelGIDebugPushConstant push_constant; push_constant.alpha = p_alpha; - push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe); + push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe); push_constant.cell_offset = mipmaps[level].cell_offset; push_constant.level = level; @@ -2768,7 +3162,7 @@ void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; u.binding = 1; - u.append_id(storage->voxel_gi_get_data_buffer(probe)); + u.append_id(gi->voxel_gi_get_data_buffer(probe)); uniforms.push_back(u); } { @@ -2810,18 +3204,21 @@ void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p } //////////////////////////////////////////////////////////////////////////////// -// GIRD +// GI + +GI::GI() { + singleton = this; -RendererSceneGIRD::RendererSceneGIRD() { sdfgi_ray_count = RS::EnvironmentSDFGIRayCount(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/probe_ray_count")), 0, int32_t(RS::ENV_SDFGI_RAY_COUNT_MAX - 1))); sdfgi_frames_to_converge = RS::EnvironmentSDFGIFramesToConverge(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/frames_to_converge")), 0, int32_t(RS::ENV_SDFGI_CONVERGE_MAX - 1))); sdfgi_frames_to_update_light = RS::EnvironmentSDFGIFramesToUpdateLight(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/frames_to_update_lights")), 0, int32_t(RS::ENV_SDFGI_UPDATE_LIGHT_MAX - 1))); } -RendererSceneGIRD::~RendererSceneGIRD() { +GI::~GI() { + singleton = nullptr; } -void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky) { +void GI::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); @@ -2962,17 +3359,38 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p //calculate tables String defines = "\n#define SDFGI_OCT_SIZE " + itos(SDFGI::LIGHTPROBE_OCT_SIZE) + "\n"; Vector<String> gi_modes; - gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n"); - gi_modes.push_back("\n#define USE_SDFGI\n"); - gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); - gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n"); - gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n"); - gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); + gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_VOXEL_GI + gi_modes.push_back("\n#define USE_SDFGI\n"); // MODE_SDFGI + gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_COMBINED + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_HALF_RES_VOXEL_GI + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n"); // MODE_HALF_RES_SDFGI + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_HALF_RES_COMBINED + + gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_VOXEL_GI_MULTIVIEW + gi_modes.push_back("\n#define USE_SDFGI\n#define USE_MULTIVIEW\n"); // MODE_SDFGI_MULTIVIEW + gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_COMBINED_MULTIVIEW + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_VOXEL_GI_MULTIVIEW + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_SDFGI_MULTIVIEW + gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_COMBINED_MULTIVIEW shader.initialize(gi_modes, defines); + + if (!RendererCompositorRD::singleton->is_xr_enabled()) { + shader.set_variant_enabled(MODE_VOXEL_GI_MULTIVIEW, false); + shader.set_variant_enabled(MODE_SDFGI_MULTIVIEW, false); + shader.set_variant_enabled(MODE_COMBINED_MULTIVIEW, false); + shader.set_variant_enabled(MODE_HALF_RES_VOXEL_GI_MULTIVIEW, false); + shader.set_variant_enabled(MODE_HALF_RES_SDFGI_MULTIVIEW, false); + shader.set_variant_enabled(MODE_HALF_RES_COMBINED_MULTIVIEW, false); + } + shader_version = shader.version_create(); for (int i = 0; i < MODE_MAX; i++) { - pipelines[i] = RD::get_singleton()->compute_pipeline_create(shader.version_get_shader(shader_version, i)); + if (shader.is_variant_enabled(i)) { + pipelines[i] = RD::get_singleton()->compute_pipeline_create(shader.version_get_shader(shader_version, i)); + } else { + pipelines[i] = RID(); + } } sdfgi_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SDFGIData)); @@ -2991,9 +3409,14 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p Vector<String> versions; versions.push_back("\n#define MODE_PROBES\n"); + versions.push_back("\n#define MODE_PROBES\n#define USE_MULTIVIEW\n"); versions.push_back("\n#define MODE_VISIBILITY\n"); + versions.push_back("\n#define MODE_VISIBILITY\n#define USE_MULTIVIEW\n"); sdfgi_shader.debug_probes.initialize(versions, defines); + + // TODO disable multiview versions if turned off + sdfgi_shader.debug_probes_shader = sdfgi_shader.debug_probes.version_create(); { @@ -3004,6 +3427,8 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p ds.enable_depth_write = true; ds.depth_compare_operator = RD::COMPARE_OP_LESS_OR_EQUAL; for (int i = 0; i < SDFGIShader::PROBE_DEBUG_MAX; i++) { + // TODO check if version is enabled + RID debug_probes_shader_version = sdfgi_shader.debug_probes.version_get_shader(sdfgi_shader.debug_probes_shader, i); sdfgi_shader.debug_probes_pipeline[i].setup(debug_probes_shader_version, RD::RENDER_PRIMITIVE_TRIANGLE_STRIPS, rs, RD::PipelineMultisampleState(), ds, RD::PipelineColorBlendState::create_disabled(), 0); } @@ -3013,7 +3438,7 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p half_resolution = GLOBAL_GET("rendering/global_illumination/gi/use_half_resolution"); } -void RendererSceneGIRD::free() { +void GI::free() { RD::get_singleton()->free(default_voxel_gi_buffer); RD::get_singleton()->free(voxel_gi_lights_uniform); RD::get_singleton()->free(sdfgi_ubo); @@ -3032,7 +3457,7 @@ void RendererSceneGIRD::free() { } } -RendererSceneGIRD::SDFGI *RendererSceneGIRD::create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size) { +GI::SDFGI *GI::create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size) { SDFGI *sdfgi = memnew(SDFGI); sdfgi->create(p_env, p_world_position, p_requested_history_size, this); @@ -3040,7 +3465,7 @@ RendererSceneGIRD::SDFGI *RendererSceneGIRD::create_sdfgi(RendererSceneEnvironme return sdfgi; } -void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render) { +void GI::setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); r_voxel_gi_instances_used = 0; @@ -3069,7 +3494,7 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra RID base_probe = gipi->probe; - Transform3D to_cell = storage->voxel_gi_get_to_cell_xform(gipi->probe) * gipi->transform.affine_inverse() * to_camera; + Transform3D to_cell = voxel_gi_get_to_cell_xform(gipi->probe) * gipi->transform.affine_inverse() * to_camera; gipd.xform[0] = to_cell.basis.rows[0][0]; gipd.xform[1] = to_cell.basis.rows[1][0]; @@ -3088,16 +3513,16 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra gipd.xform[14] = to_cell.origin.z; gipd.xform[15] = 1; - Vector3 bounds = storage->voxel_gi_get_octree_size(base_probe); + Vector3 bounds = voxel_gi_get_octree_size(base_probe); gipd.bounds[0] = bounds.x; gipd.bounds[1] = bounds.y; gipd.bounds[2] = bounds.z; - gipd.dynamic_range = storage->voxel_gi_get_dynamic_range(base_probe) * storage->voxel_gi_get_energy(base_probe); - gipd.bias = storage->voxel_gi_get_bias(base_probe); - gipd.normal_bias = storage->voxel_gi_get_normal_bias(base_probe); - gipd.blend_ambient = !storage->voxel_gi_is_interior(base_probe); + gipd.dynamic_range = voxel_gi_get_dynamic_range(base_probe) * voxel_gi_get_energy(base_probe); + gipd.bias = voxel_gi_get_bias(base_probe); + gipd.normal_bias = voxel_gi_get_normal_bias(base_probe); + gipd.blend_ambient = !voxel_gi_is_interior(base_probe); gipd.mipmaps = gipi->mipmaps.size(); } @@ -3108,17 +3533,19 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra texture = texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE); } - if (texture != rb->gi.voxel_gi_textures[i]) { + if (texture != rb->rbgi.voxel_gi_textures[i]) { voxel_gi_instances_changed = true; - rb->gi.voxel_gi_textures[i] = texture; + rb->rbgi.voxel_gi_textures[i] = texture; } } if (voxel_gi_instances_changed) { - if (RD::get_singleton()->uniform_set_is_valid(rb->gi.uniform_set)) { - RD::get_singleton()->free(rb->gi.uniform_set); + for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) { + if (RD::get_singleton()->uniform_set_is_valid(rb->rbgi.uniform_set[v])) { + RD::get_singleton()->free(rb->rbgi.uniform_set[v]); + } + rb->rbgi.uniform_set[v] = RID(); } - rb->gi.uniform_set = RID(); if (rb->volumetric_fog) { if (RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->fog_uniform_set)) { RD::get_singleton()->free(rb->volumetric_fog->fog_uniform_set); @@ -3140,21 +3567,78 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra } } -void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer, RID p_environment, const CameraMatrix &p_projection, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render) { +void GI::RenderBuffersGI::free() { + for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) { + if (RD::get_singleton()->uniform_set_is_valid(uniform_set[v])) { + RD::get_singleton()->free(uniform_set[v]); + } + uniform_set[v] = RID(); + } + + if (scene_data_ubo.is_valid()) { + RD::get_singleton()->free(scene_data_ubo); + scene_data_ubo = RID(); + } + + if (ambient_buffer.is_valid()) { + if (view_count == 1) { + // Only one view? then these are copies of our main buffers. + ambient_view[0] = RID(); + reflection_view[0] = RID(); + } else { + // Multiple views? free our slices. + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(ambient_view[v]); + RD::get_singleton()->free(reflection_view[v]); + ambient_view[v] = RID(); + reflection_view[v] = RID(); + } + } + + // Now we can free our buffers. + RD::get_singleton()->free(ambient_buffer); + RD::get_singleton()->free(reflection_buffer); + ambient_buffer = RID(); + reflection_buffer = RID(); + view_count = 0; + } + + if (voxel_gi_buffer.is_valid()) { + RD::get_singleton()->free(voxel_gi_buffer); + voxel_gi_buffer = RID(); + } +} + +void GI::process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_voxel_gi_buffer, RID p_environment, uint32_t p_view_count, const CameraMatrix *p_projections, const Vector3 *p_eye_offsets, const Transform3D &p_cam_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render) { RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); + ERR_FAIL_COND_MSG(p_view_count > 2, "Maximum of 2 views supported for Processing GI."); + RD::get_singleton()->draw_command_begin_label("GI Render"); RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND(rb == nullptr); - if (rb->ambient_buffer.is_null() || rb->gi.using_half_size_gi != half_resolution) { - if (rb->ambient_buffer.is_valid()) { - RD::get_singleton()->free(rb->ambient_buffer); - RD::get_singleton()->free(rb->reflection_buffer); + if (rb->rbgi.ambient_buffer.is_null() || rb->rbgi.using_half_size_gi != half_resolution || rb->rbgi.view_count != p_view_count) { + // Free our old buffer if applicable + if (rb->rbgi.ambient_buffer.is_valid()) { + if (rb->rbgi.view_count > 1) { + for (uint32_t v = 0; v < rb->rbgi.view_count; v++) { + RD::get_singleton()->free(rb->rbgi.ambient_view[v]); + RD::get_singleton()->free(rb->rbgi.reflection_view[v]); + } + } + RD::get_singleton()->free(rb->rbgi.ambient_buffer); + RD::get_singleton()->free(rb->rbgi.reflection_buffer); } + print_line("Allocating GI buffers"); // TESTING REMOVE BEFORE MERGING + + // Remember the view count we're using + rb->rbgi.view_count = p_view_count; + + // Create textures for our ambient and reflection data RD::TextureFormat tf; tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT; tf.width = rb->internal_width; @@ -3163,222 +3647,280 @@ void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_ tf.width >>= 1; tf.height >>= 1; } + if (p_view_count > 1) { + tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY; + tf.array_layers = p_view_count; + } else { + tf.texture_type = RD::TEXTURE_TYPE_2D; + tf.array_layers = 1; + } tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT; - rb->reflection_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView()); - rb->ambient_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView()); - rb->gi.using_half_size_gi = half_resolution; - } - - PushConstant push_constant; - - push_constant.screen_size[0] = rb->internal_width; - push_constant.screen_size[1] = rb->internal_height; - push_constant.z_near = p_projection.get_z_near(); - push_constant.z_far = p_projection.get_z_far(); - push_constant.orthogonal = p_projection.is_orthogonal(); - push_constant.proj_info[0] = -2.0f / (rb->internal_width * p_projection.matrix[0][0]); - push_constant.proj_info[1] = -2.0f / (rb->internal_height * p_projection.matrix[1][1]); - push_constant.proj_info[2] = (1.0f - p_projection.matrix[0][2]) / p_projection.matrix[0][0]; - push_constant.proj_info[3] = (1.0f + p_projection.matrix[1][2]) / p_projection.matrix[1][1]; - push_constant.max_voxel_gi_instances = MIN((uint64_t)MAX_VOXEL_GI_INSTANCES, p_voxel_gi_instances.size()); - push_constant.high_quality_vct = voxel_gi_quality == RS::VOXEL_GI_QUALITY_HIGH; - - bool use_sdfgi = rb->sdfgi != nullptr; - bool use_voxel_gi_instances = push_constant.max_voxel_gi_instances > 0; - - push_constant.cam_rotation[0] = p_transform.basis[0][0]; - push_constant.cam_rotation[1] = p_transform.basis[1][0]; - push_constant.cam_rotation[2] = p_transform.basis[2][0]; - push_constant.cam_rotation[3] = 0; - push_constant.cam_rotation[4] = p_transform.basis[0][1]; - push_constant.cam_rotation[5] = p_transform.basis[1][1]; - push_constant.cam_rotation[6] = p_transform.basis[2][1]; - push_constant.cam_rotation[7] = 0; - push_constant.cam_rotation[8] = p_transform.basis[0][2]; - push_constant.cam_rotation[9] = p_transform.basis[1][2]; - push_constant.cam_rotation[10] = p_transform.basis[2][2]; - push_constant.cam_rotation[11] = 0; - - if (rb->gi.uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->gi.uniform_set)) { - Vector<RD::Uniform> uniforms; - { - RD::Uniform u; - u.binding = 1; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { - if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { - u.append_id(rb->sdfgi->cascades[j].sdf_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); - } + rb->rbgi.ambient_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView()); + rb->rbgi.reflection_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView()); + rb->rbgi.using_half_size_gi = half_resolution; + + if (p_view_count == 1) { + // Just one view? Copy our buffers + rb->rbgi.ambient_view[0] = rb->rbgi.ambient_buffer; + rb->rbgi.reflection_view[0] = rb->rbgi.reflection_buffer; + } else { + // More then one view? Create slices for each view + for (uint32_t v = 0; v < p_view_count; v++) { + rb->rbgi.ambient_view[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->rbgi.ambient_buffer, v, 0); + rb->rbgi.reflection_view[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->rbgi.reflection_buffer, v, 0); } - uniforms.push_back(u); } - { - RD::Uniform u; - u.binding = 2; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { - if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { - u.append_id(rb->sdfgi->cascades[j].light_tex); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } + + // Setup our scene data + { + SceneData scene_data; + + if (rb->rbgi.scene_data_ubo.is_null()) { + rb->rbgi.scene_data_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SceneData)); + } + + for (uint32_t v = 0; v < p_view_count; v++) { + RendererStorageRD::store_camera(p_projections[v].inverse(), scene_data.inv_projection[v]); + scene_data.eye_offset[v][0] = p_eye_offsets[v].x; + scene_data.eye_offset[v][1] = p_eye_offsets[v].y; + scene_data.eye_offset[v][2] = p_eye_offsets[v].z; + scene_data.eye_offset[v][3] = 0.0; + } + + // Note that we will be ignoring the origin of this transform. + RendererStorageRD::store_transform(p_cam_transform, scene_data.cam_transform); + + scene_data.screen_size[0] = rb->internal_width; + scene_data.screen_size[1] = rb->internal_height; + + RD::get_singleton()->buffer_update(rb->rbgi.scene_data_ubo, 0, sizeof(SceneData), &scene_data, RD::BARRIER_MASK_COMPUTE); + } + + // Now compute the contents of our buffers. + RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(true); + + for (uint32_t v = 0; v < p_view_count; v++) { + // Render each eye seperately. + // We need to look into whether we can make our compute shader use Multiview but not sure that works or makes a difference.. + + // setup our push constant + + PushConstant push_constant; + + push_constant.view_index = v; + push_constant.orthogonal = p_projections[v].is_orthogonal(); + push_constant.max_voxel_gi_instances = MIN((uint64_t)MAX_VOXEL_GI_INSTANCES, p_voxel_gi_instances.size()); + push_constant.high_quality_vct = voxel_gi_quality == RS::VOXEL_GI_QUALITY_HIGH; + + push_constant.z_near = p_projections[v].get_z_near(); + push_constant.z_far = p_projections[v].get_z_far(); + + push_constant.proj_info[0] = -2.0f / (rb->internal_width * p_projections[v].matrix[0][0]); + push_constant.proj_info[1] = -2.0f / (rb->internal_height * p_projections[v].matrix[1][1]); + push_constant.proj_info[2] = (1.0f - p_projections[v].matrix[0][2]) / p_projections[v].matrix[0][0]; + push_constant.proj_info[3] = (1.0f + p_projections[v].matrix[1][2]) / p_projections[v].matrix[1][1]; + + bool use_sdfgi = rb->sdfgi != nullptr; + bool use_voxel_gi_instances = push_constant.max_voxel_gi_instances > 0; + + // setup our uniform set + if (rb->rbgi.uniform_set[v].is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->rbgi.uniform_set[v])) { + Vector<RD::Uniform> uniforms; + { + RD::Uniform u; + u.binding = 1; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { + if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { + u.append_id(rb->sdfgi->cascades[j].sdf_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 3; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { - if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { - u.append_id(rb->sdfgi->cascades[j].light_aniso_0_tex); + { + RD::Uniform u; + u.binding = 2; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { + if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { + u.append_id(rb->sdfgi->cascades[j].light_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } + } + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 3; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { + if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { + u.append_id(rb->sdfgi->cascades[j].light_aniso_0_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } + } + uniforms.push_back(u); + } + { + RD::Uniform u; + u.binding = 4; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { + if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { + u.append_id(rb->sdfgi->cascades[j].light_aniso_1_tex); + } else { + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + } + } + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 5; + if (rb->sdfgi) { + u.append_id(rb->sdfgi->occlusion_texture); } else { u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.binding = 4; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) { - if (rb->sdfgi && j < rb->sdfgi->cascades.size()) { - u.append_id(rb->sdfgi->cascades[j].light_aniso_1_tex); + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; + u.binding = 6; + u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; + u.binding = 7; + u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); + uniforms.push_back(u); + } + + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_IMAGE; + u.binding = 9; + u.append_id(rb->rbgi.ambient_view[v]); + uniforms.push_back(u); + } + + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_IMAGE; + u.binding = 10; + u.append_id(rb->rbgi.reflection_view[v]); + uniforms.push_back(u); + } + + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 11; + if (rb->sdfgi) { + u.append_id(rb->sdfgi->lightprobe_texture); } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE)); } + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 5; - if (rb->sdfgi) { - u.append_id(rb->sdfgi->occlusion_texture); - } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE)); + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 12; + u.append_id(rb->views[v].view_depth); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 13; + u.append_id(p_normal_roughness_views[v]); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 14; + RID buffer = p_voxel_gi_buffer.is_valid() ? p_voxel_gi_buffer : texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_BLACK); + u.append_id(buffer); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; + u.binding = 15; + u.append_id(sdfgi_ubo); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; + u.binding = 16; + u.append_id(rb->rbgi.voxel_gi_buffer); + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; + u.binding = 17; + for (int i = 0; i < MAX_VOXEL_GI_INSTANCES; i++) { + u.append_id(rb->rbgi.voxel_gi_textures[i]); + } + uniforms.push_back(u); + } + { + RD::Uniform u; + u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; + u.binding = 18; + u.append_id(rb->rbgi.scene_data_ubo); + uniforms.push_back(u); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; - u.binding = 6; - u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_SAMPLER; - u.binding = 7; - u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_IMAGE; - u.binding = 9; - u.append_id(rb->ambient_buffer); - uniforms.push_back(u); + rb->rbgi.uniform_set[v] = RD::get_singleton()->uniform_set_create(uniforms, shader.version_get_shader(shader_version, 0), 0); } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_IMAGE; - u.binding = 10; - u.append_id(rb->reflection_buffer); - uniforms.push_back(u); - } + Mode mode; - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 11; - if (rb->sdfgi) { - u.append_id(rb->sdfgi->lightprobe_texture); + if (p_view_count > 1) { + if (rb->rbgi.using_half_size_gi) { + mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED_MULTIVIEW : (use_sdfgi ? MODE_HALF_RES_SDFGI_MULTIVIEW : MODE_HALF_RES_VOXEL_GI_MULTIVIEW); } else { - u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE)); + mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED_MULTIVIEW : (use_sdfgi ? MODE_SDFGI_MULTIVIEW : MODE_VOXEL_GI_MULTIVIEW); } - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 12; - u.append_id(rb->depth_texture); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 13; - u.append_id(p_normal_roughness_buffer); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 14; - RID buffer = p_voxel_gi_buffer.is_valid() ? p_voxel_gi_buffer : texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_BLACK); - u.append_id(buffer); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; - u.binding = 15; - u.append_id(sdfgi_ubo); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER; - u.binding = 16; - u.append_id(rb->gi.voxel_gi_buffer); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; - u.binding = 17; - for (int i = 0; i < MAX_VOXEL_GI_INSTANCES; i++) { - u.append_id(rb->gi.voxel_gi_textures[i]); + } else { + if (rb->rbgi.using_half_size_gi) { + mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED : (use_sdfgi ? MODE_HALF_RES_SDFGI : MODE_HALF_RES_VOXEL_GI); + } else { + mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED : (use_sdfgi ? MODE_SDFGI : MODE_VOXEL_GI); } - uniforms.push_back(u); } - rb->gi.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, shader.version_get_shader(shader_version, 0), 0); - } - - Mode mode; + RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, pipelines[mode]); + RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->rbgi.uniform_set[v], 0); + RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(PushConstant)); - if (rb->gi.using_half_size_gi) { - mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED : (use_sdfgi ? MODE_HALF_RES_SDFGI : MODE_HALF_RES_VOXEL_GI); - } else { - mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED : (use_sdfgi ? MODE_SDFGI : MODE_VOXEL_GI); + if (rb->rbgi.using_half_size_gi) { + RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width >> 1, rb->internal_height >> 1, 1); + } else { + RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width, rb->internal_height, 1); + } } - RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(true); - RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, pipelines[mode]); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->gi.uniform_set, 0); - RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(PushConstant)); - - if (rb->gi.using_half_size_gi) { - RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width >> 1, rb->internal_height >> 1, 1); - } else { - RD::get_singleton()->compute_list_dispatch_threads(compute_list, rb->internal_width, rb->internal_height, 1); - } //do barrier later to allow oeverlap //RD::get_singleton()->compute_list_end(RD::BARRIER_MASK_NO_BARRIER); //no barriers, let other compute, raster and transfer happen at the same time RD::get_singleton()->draw_command_end_label(); } -RID RendererSceneGIRD::voxel_gi_instance_create(RID p_base) { +RID GI::voxel_gi_instance_create(RID p_base) { VoxelGIInstance voxel_gi; voxel_gi.gi = this; voxel_gi.storage = storage; @@ -3387,28 +3929,28 @@ RID RendererSceneGIRD::voxel_gi_instance_create(RID p_base) { return rid; } -void RendererSceneGIRD::voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) { +void GI::voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) { VoxelGIInstance *voxel_gi = get_probe_instance(p_probe); ERR_FAIL_COND(!voxel_gi); voxel_gi->transform = p_xform; } -bool RendererSceneGIRD::voxel_gi_needs_update(RID p_probe) const { +bool GI::voxel_gi_needs_update(RID p_probe) const { VoxelGIInstance *voxel_gi = get_probe_instance(p_probe); ERR_FAIL_COND_V(!voxel_gi, false); - return voxel_gi->last_probe_version != storage->voxel_gi_get_version(voxel_gi->probe); + return voxel_gi->last_probe_version != voxel_gi_get_version(voxel_gi->probe); } -void RendererSceneGIRD::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) { +void GI::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) { VoxelGIInstance *voxel_gi = get_probe_instance(p_probe); ERR_FAIL_COND(!voxel_gi); voxel_gi->update(p_update_light_instances, p_light_instances, p_dynamic_objects, p_scene_render); } -void RendererSceneGIRD::debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) { +void GI::debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) { VoxelGIInstance *voxel_gi = voxel_gi_instance_owner.get_or_null(p_voxel_gi); ERR_FAIL_COND(!voxel_gi); diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.h b/servers/rendering/renderer_rd/environment/gi.h index 122644498b..b6ecfe42ea 100644 --- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.h +++ b/servers/rendering/renderer_rd/environment/gi.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* renderer_scene_gi_rd.h */ +/* gi.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,33 +28,77 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef RENDERING_SERVER_SCENE_GI_RD_H -#define RENDERING_SERVER_SCENE_GI_RD_H +#ifndef GI_RD_H +#define GI_RD_H #include "core/templates/local_vector.h" #include "core/templates/rid_owner.h" +#include "servers/rendering/environment/renderer_gi.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h" #include "servers/rendering/renderer_rd/renderer_storage_rd.h" -#include "servers/rendering/renderer_rd/shaders/gi.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/voxel_gi.glsl.gen.h" -#include "servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/gi.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl.gen.h" #include "servers/rendering/renderer_scene_render.h" +#include "servers/rendering/renderer_storage.h" #include "servers/rendering/rendering_device.h" // Forward declare RenderDataRD and RendererSceneRenderRD so we can pass it into some of our methods, these classes are pretty tightly bound struct RenderDataRD; class RendererSceneRenderRD; -class RendererSceneGIRD { +namespace RendererRD { + +class GI : public RendererGI { +public: + /* VOXEL GI STORAGE */ + + struct VoxelGI { + RID octree_buffer; + RID data_buffer; + RID sdf_texture; + + uint32_t octree_buffer_size = 0; + uint32_t data_buffer_size = 0; + + Vector<int> level_counts; + + int cell_count = 0; + + Transform3D to_cell_xform; + AABB bounds; + Vector3i octree_size; + + float dynamic_range = 2.0; + float energy = 1.0; + float bias = 1.4; + float normal_bias = 0.0; + float propagation = 0.7; + bool interior = false; + bool use_two_bounces = false; + + float anisotropy_strength = 0.5; + + uint32_t version = 1; + uint32_t data_version = 1; + + RendererStorage::Dependency dependency; + }; + private: RendererStorageRD *storage = nullptr; + static GI *singleton; + + /* VOXEL GI STORAGE */ + + mutable RID_Owner<VoxelGI, true> voxel_gi_owner; /* VOXEL_GI INSTANCE */ @@ -196,10 +240,13 @@ private: uint32_t use_occlusion; float y_mult; - float cam_extent[3]; uint32_t probe_axis_size; + float z_near; + float reserved1; + float reserved2; float cam_transform[16]; + float inv_projection[16]; }; SdfgiDebugShaderRD debug; @@ -209,13 +256,17 @@ private: enum ProbeDebugMode { PROBE_DEBUG_PROBES, + PROBE_DEBUG_PROBES_MULTIVIEW, PROBE_DEBUG_VISIBILITY, + PROBE_DEBUG_VISIBILITY_MULTIVIEW, PROBE_DEBUG_MAX }; - struct DebugProbesPushConstant { - float projection[16]; + struct DebugProbesSceneData { + float projection[2][16]; + }; + struct DebugProbesPushConstant { uint32_t band_power; uint32_t sections_in_band; uint32_t band_mask; @@ -324,6 +375,60 @@ private: } sdfgi_shader; public: + static GI *get_singleton() { return singleton; } + + /* VOXEL GI API */ + + VoxelGI *get_voxel_gi(RID p_rid) { return voxel_gi_owner.get_or_null(p_rid); }; + bool owns_voxel_gi(RID p_rid) { return voxel_gi_owner.owns(p_rid); }; + + virtual RID voxel_gi_allocate() override; + virtual void voxel_gi_free(RID p_voxel_gi) override; + virtual void voxel_gi_initialize(RID p_voxel_gi) override; + + virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override; + + virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override; + virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override; + virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override; + + virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override; + virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) override; + virtual float voxel_gi_get_energy(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) override; + virtual float voxel_gi_get_bias(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override; + virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override; + virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override; + virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override; + + virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override; + virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override; + + virtual uint32_t voxel_gi_get_version(RID p_probe) const override; + uint32_t voxel_gi_get_data_version(RID p_probe); + + RID voxel_gi_get_octree_buffer(RID p_voxel_gi) const; + RID voxel_gi_get_data_buffer(RID p_voxel_gi) const; + + RID voxel_gi_get_sdf_texture(RID p_voxel_gi); + /* VOXEL_GI INSTANCE */ //@TODO VoxelGIInstance is still directly used in the render code, we'll address this when we refactor the render code itself. @@ -331,7 +436,7 @@ public: struct VoxelGIInstance { // access to our containers RendererStorageRD *storage = nullptr; - RendererSceneGIRD *gi = nullptr; + GI *gi = nullptr; RID probe; RID texture; @@ -455,7 +560,7 @@ public: // access to our containers RendererStorageRD *storage = nullptr; - RendererSceneGIRD *gi = nullptr; + GI *gi = nullptr; // used for rendering (voxelization) RID render_albedo; @@ -497,7 +602,8 @@ public: float min_cell_size = 0; uint32_t probe_axis_count = 0; //amount of probes per axis, this is an odd number because it encloses endpoints - RID debug_uniform_set; + RID debug_uniform_set[RendererSceneRender::MAX_RENDER_VIEWS]; + RID debug_probes_scene_data_ubo; RID debug_probes_uniform_set; RID cascades_ubo; @@ -516,7 +622,7 @@ public: int32_t cascade_dynamic_light_count[SDFGI::MAX_CASCADES]; //used dynamically RID integrate_sky_uniform_set; - void create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, RendererSceneGIRD *p_gi); + void create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, GI *p_gi); void erase(); void update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position); void update_light(); @@ -525,8 +631,8 @@ public: int get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const; void update_cascades(); - void debug_draw(const CameraMatrix &p_projection, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture); - void debug_probes(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform); + void debug_draw(uint32_t p_view_count, const CameraMatrix *p_projections, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture, const Vector<RID> &p_texture_views); + void debug_probes(RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth); void pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render); void render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render); @@ -561,8 +667,18 @@ public: RID full_dispatch; RID full_mask; - RID uniform_set; + /* GI buffers */ + RID ambient_buffer; + RID reflection_buffer; + RID ambient_view[RendererSceneRender::MAX_RENDER_VIEWS]; + RID reflection_view[RendererSceneRender::MAX_RENDER_VIEWS]; + RID uniform_set[RendererSceneRender::MAX_RENDER_VIEWS]; bool using_half_size_gi = false; + uint32_t view_count = 1; + + RID scene_data_ubo; + + void free(); }; struct SDFGIData { @@ -611,19 +727,28 @@ public: uint32_t mipmaps; // 4 - 96 }; - struct PushConstant { - int32_t screen_size[2]; - float z_near; - float z_far; + struct SceneData { + float inv_projection[2][16]; + float cam_transform[16]; + float eye_offset[2][4]; - float proj_info[4]; + int32_t screen_size[2]; + float pad1; + float pad2; + }; + struct PushConstant { + uint32_t view_index; uint32_t max_voxel_gi_instances; uint32_t high_quality_vct; uint32_t orthogonal; - uint32_t pad; - float cam_rotation[12]; + float proj_info[4]; + + float z_near; + float z_far; + float pad1; + float pad2; }; RID sdfgi_ubo; @@ -634,6 +759,14 @@ public: MODE_HALF_RES_VOXEL_GI, MODE_HALF_RES_SDFGI, MODE_HALF_RES_COMBINED, + + MODE_VOXEL_GI_MULTIVIEW, + MODE_SDFGI_MULTIVIEW, + MODE_COMBINED_MULTIVIEW, + MODE_HALF_RES_VOXEL_GI_MULTIVIEW, + MODE_HALF_RES_SDFGI_MULTIVIEW, + MODE_HALF_RES_COMBINED_MULTIVIEW, + MODE_MAX }; @@ -644,8 +777,8 @@ public: RID shader_version; RID pipelines[MODE_MAX]; - RendererSceneGIRD(); - ~RendererSceneGIRD(); + GI(); + ~GI(); void init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky); void free(); @@ -653,7 +786,7 @@ public: SDFGI *create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size); void setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render); - void process_gi(RID p_render_buffers, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer, RID p_environment, const CameraMatrix &p_projection, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render); + void process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_voxel_gi_buffer, RID p_environment, uint32_t p_view_count, const CameraMatrix *p_projections, const Vector3 *p_eye_offsets, const Transform3D &p_cam_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render); RID voxel_gi_instance_create(RID p_base); void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform); @@ -662,4 +795,6 @@ public: void debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha); }; -#endif /* !RENDERING_SERVER_SCENE_GI_RD_H */ +} // namespace RendererRD + +#endif /* !GI_RD_H */ diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index 2d3998bd90..c7048289c8 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -48,6 +48,13 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular() if (!specular.is_valid()) { RD::TextureFormat tf; tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT; + if (view_count > 1) { + tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY; + tf.array_layers = view_count; + } else { + tf.texture_type = RD::TEXTURE_TYPE_2D; + tf.array_layers = 1; + } tf.width = width; tf.height = height; tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT; @@ -64,7 +71,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular() Vector<RID> fb; fb.push_back(specular); - specular_only_fb = RD::get_singleton()->framebuffer_create(fb); + specular_only_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count); } } else { @@ -76,7 +83,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular() Vector<RID> fb; fb.push_back(specular_msaa); - specular_only_fb = RD::get_singleton()->framebuffer_create(fb); + specular_only_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count); } } } @@ -106,6 +113,13 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_velocity() void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi() { if (!voxelgi_buffer.is_valid()) { RD::TextureFormat tf; + if (view_count > 1) { + tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY; + tf.array_layers = view_count; + } else { + tf.texture_type = RD::TEXTURE_TYPE_2D; + tf.array_layers = 1; + } tf.format = RD::DATA_FORMAT_R8G8_UINT; tf.width = width; tf.height = height; @@ -116,6 +130,14 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi() tf_aa.usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT; tf_aa.samples = texture_samples; voxelgi_buffer_msaa = RD::get_singleton()->texture_create(tf_aa, RD::TextureView()); + + if (view_count == 1) { + voxelgi_msaa_views[0] = voxelgi_buffer_msaa; + } else { + for (uint32_t v = 0; v < view_count; v++) { + voxelgi_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), voxelgi_buffer_msaa, v, 0); + } + } } else { tf.usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT; } @@ -124,6 +146,14 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi() voxelgi_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView()); + if (view_count == 1) { + voxelgi_views[0] = voxelgi_buffer; + } else { + for (uint32_t v = 0; v < view_count; v++) { + voxelgi_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), voxelgi_buffer, v, 0); + } + } + Vector<RID> fb; if (msaa != RS::VIEWPORT_MSAA_DISABLED) { fb.push_back(depth_msaa); @@ -135,7 +165,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi() fb.push_back(voxelgi_buffer); } - depth_normal_roughness_voxelgi_fb = RD::get_singleton()->framebuffer_create(fb); + depth_normal_roughness_voxelgi_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count); } } @@ -144,7 +174,25 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() { RD::get_singleton()->free(voxelgi_buffer); voxelgi_buffer = RID(); + if (view_count == 1) { + voxelgi_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(voxelgi_views[v]); + voxelgi_views[v] = RID(); + } + } + if (voxelgi_buffer_msaa.is_valid()) { + if (view_count == 1) { + voxelgi_msaa_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(voxelgi_msaa_views[v]); + voxelgi_msaa_views[v] = RID(); + } + } + RD::get_singleton()->free(voxelgi_buffer_msaa); voxelgi_buffer_msaa = RID(); } @@ -153,11 +201,35 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() { } if (color_msaa.is_valid()) { + if (view_count == 1) { + color_views[0] = RID(); + color_msaa_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(color_views[v]); + RD::get_singleton()->free(color_msaa_views[v]); + color_views[v] = RID(); + color_msaa_views[v] = RID(); + } + } + RD::get_singleton()->free(color_msaa); color_msaa = RID(); } if (depth_msaa.is_valid()) { + if (view_count == 1) { + depth_views[0] = RID(); + depth_msaa_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(depth_views[v]); + RD::get_singleton()->free(depth_msaa_views[v]); + depth_views[v] = RID(); + depth_msaa_views[v] = RID(); + } + } + RD::get_singleton()->free(depth_msaa); depth_msaa = RID(); } @@ -178,12 +250,31 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() { color_framebuffers.clear(); // Color pass framebuffers are freed automatically by their dependency relations if (normal_roughness_buffer.is_valid()) { + if (view_count == 1) { + normal_roughness_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(normal_roughness_views[v]); + normal_roughness_views[v] = RID(); + } + } + RD::get_singleton()->free(normal_roughness_buffer); + normal_roughness_buffer = RID(); + if (normal_roughness_buffer_msaa.is_valid()) { + if (view_count == 1) { + normal_roughness_msaa_views[0] = RID(); + } else { + for (uint32_t v = 0; v < view_count; v++) { + RD::get_singleton()->free(normal_roughness_msaa_views[v]); + normal_roughness_msaa_views[v] = RID(); + } + } RD::get_singleton()->free(normal_roughness_buffer_msaa); normal_roughness_buffer_msaa = RID(); } - normal_roughness_buffer = RID(); + depth_normal_roughness_fb = RID(); } @@ -259,6 +350,22 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::configure(RID p_c depth_msaa = RD::get_singleton()->texture_create(tf, RD::TextureView()); + if (view_count == 1) { + // just reuse + color_views[0] = color; + depth_views[0] = depth; + color_msaa_views[0] = color_msaa; + depth_msaa_views[0] = depth_msaa; + } else { + // create slices + for (uint32_t v = 0; v < view_count; v++) { + color_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), color, v, 0); + depth_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), depth, v, 0); + color_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), color_msaa, v, 0); + depth_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), depth_msaa, v, 0); + } + } + { Vector<RID> fb; fb.push_back(color_msaa); @@ -308,6 +415,8 @@ RID RenderForwardClustered::RenderBufferDataForwardClustered::get_color_pass_fb( } void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferDataForwardClustered *rb) { + ERR_FAIL_COND_MSG(rb->view_count > 2, "Only support up to two views for roughness texture"); + if (rb->normal_roughness_buffer.is_valid()) { return; } @@ -316,6 +425,13 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData tf.format = RD::DATA_FORMAT_R8G8B8A8_UNORM; tf.width = rb->width; tf.height = rb->height; + if (rb->view_count > 1) { + tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY; + tf.array_layers = rb->view_count; + } else { + tf.texture_type = RD::TEXTURE_TYPE_2D; + tf.array_layers = 1; + } tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT; if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) { @@ -330,7 +446,7 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData Vector<RID> fb; fb.push_back(rb->depth); fb.push_back(rb->normal_roughness_buffer); - rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb); + rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, rb->view_count); } else { tf.usage_bits = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT; tf.samples = rb->texture_samples; @@ -339,7 +455,21 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData Vector<RID> fb; fb.push_back(rb->depth_msaa); fb.push_back(rb->normal_roughness_buffer_msaa); - rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb); + rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, rb->view_count); + } + + if (rb->view_count == 1) { + rb->normal_roughness_views[0] = rb->normal_roughness_buffer; + if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) { + rb->normal_roughness_msaa_views[0] = rb->normal_roughness_buffer_msaa; + } + } else { + for (uint32_t v = 0; v < rb->view_count; v++) { + rb->normal_roughness_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->normal_roughness_buffer, v, 0); + if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) { + rb->normal_roughness_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->normal_roughness_buffer_msaa, v, 0); + } + } } } @@ -503,22 +633,21 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS; } break; case PASS_MODE_SHADOW_DP: { - ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for shadow DP pass"); + ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for shadow DP pass"); pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_DP; } break; case PASS_MODE_DEPTH_NORMAL_ROUGHNESS: { - ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for depth/roughness pass"); - pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS; + pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS; } break; case PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI: { - ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for voxel GI pass"); - pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI; + pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI; } break; case PASS_MODE_DEPTH_MATERIAL: { ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for material pass"); pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL; } break; case PASS_MODE_SDF: { + // Note, SDF is prepared in world space, this shouldn't be a multiview buffer even when stereoscopic rendering is used. ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for SDF pass"); pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_SDF; } break; @@ -692,6 +821,11 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat projection = correction * p_render_data->view_projection[v]; RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); + + scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x; + scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y; + scene_state.ubo.eye_offset[v][2] = p_render_data->view_eye_offset[v].z; + scene_state.ubo.eye_offset[v][3] = 0.0; } scene_state.ubo.taa_jitter[0] = p_render_data->taa_jitter.x; @@ -1318,9 +1452,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co using_voxelgi = true; } - if (p_render_data->view_count > 1) { - depth_pass_mode = PASS_MODE_DEPTH; - } else if (!p_render_data->environment.is_valid() && using_voxelgi) { + if (!p_render_data->environment.is_valid() && using_voxelgi) { depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI; } else if (p_render_data->environment.is_valid() && (environment_is_ssr_enabled(p_render_data->environment) || environment_is_sdfgi_enabled(p_render_data->environment) || using_voxelgi)) { if (environment_is_sdfgi_enabled(p_render_data->environment)) { @@ -1526,9 +1658,13 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co if (needs_pre_resolve) { RD::get_singleton()->barrier(RD::BARRIER_MASK_RASTER, RD::BARRIER_MASK_COMPUTE); } - storage->get_effects()->resolve_gi(render_buffer->depth_msaa, render_buffer->normal_roughness_buffer_msaa, using_voxelgi ? render_buffer->voxelgi_buffer_msaa : RID(), render_buffer->depth, render_buffer->normal_roughness_buffer, using_voxelgi ? render_buffer->voxelgi_buffer : RID(), Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + for (uint32_t v = 0; v < render_buffer->view_count; v++) { + resolve_effects->resolve_gi(render_buffer->depth_msaa_views[v], render_buffer->normal_roughness_msaa_views[v], using_voxelgi ? render_buffer->voxelgi_msaa_views[v] : RID(), render_buffer->depth_views[v], render_buffer->normal_roughness_views[v], using_voxelgi ? render_buffer->voxelgi_views[v] : RID(), Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + } } else if (finish_depth) { - storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + for (uint32_t v = 0; v < render_buffer->view_count; v++) { + resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + } } RD::get_singleton()->draw_command_end_label(); } @@ -1536,7 +1672,8 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co continue_depth = !finish_depth; } - _pre_opaque_render(p_render_data, using_ssao, using_ssil, using_sdfgi || using_voxelgi, render_buffer ? render_buffer->normal_roughness_buffer : RID(), render_buffer ? render_buffer->voxelgi_buffer : RID()); + RID null_rids[2]; + _pre_opaque_render(p_render_data, using_ssao, using_ssil, using_sdfgi || using_voxelgi, render_buffer ? render_buffer->normal_roughness_views : null_rids, render_buffer ? render_buffer->voxelgi_buffer : RID()); RD::get_singleton()->draw_command_begin_label("Render Opaque Pass"); @@ -1599,18 +1736,17 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co } if (debug_sdfgi_probes) { - //debug voxelgis + //debug sdfgi bool will_continue_color = (can_continue_color || draw_sky || draw_sky_fog_only); bool will_continue_depth = (can_continue_depth || draw_sky || draw_sky_fog_only); CameraMatrix dc; dc.set_depth_correction(true); - CameraMatrix cm = (dc * p_render_data->cam_projection) * CameraMatrix(p_render_data->cam_transform.affine_inverse()); - RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(color_only_framebuffer, RD::INITIAL_ACTION_CONTINUE, will_continue_color ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_CONTINUE, will_continue_depth ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ); - RD::get_singleton()->draw_command_begin_label("Debug SDFGI"); - _debug_sdfgi_probes(p_render_data->render_buffers, draw_list, color_only_framebuffer, cm); - RD::get_singleton()->draw_command_end_label(); - RD::get_singleton()->draw_list_end(); + CameraMatrix cms[RendererSceneRender::MAX_RENDER_VIEWS]; + for (uint32_t v = 0; v < p_render_data->view_count; v++) { + cms[v] = (dc * p_render_data->view_projection[v]) * CameraMatrix(p_render_data->cam_transform.affine_inverse()); + } + _debug_sdfgi_probes(p_render_data->render_buffers, color_only_framebuffer, p_render_data->view_count, cms, will_continue_color, will_continue_depth); } if (draw_sky || draw_sky_fog_only) { @@ -1630,14 +1766,20 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co } if (render_buffer && !can_continue_color && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) { - RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa, render_buffer->color); + // Handle views individual, might want to look at rewriting our resolve to do both layers in one pass. + for (uint32_t v = 0; v < render_buffer->view_count; v++) { + RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa_views[v], render_buffer->color_views[v]); + } + // TODO mame this do multiview if (using_separate_specular) { RD::get_singleton()->texture_resolve_multisample(render_buffer->specular_msaa, render_buffer->specular); } } if (render_buffer && !can_continue_depth && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) { - storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + for (uint32_t v = 0; v < render_buffer->view_count; v++) { + resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + } } if (using_separate_specular) { @@ -1692,11 +1834,13 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co RD::get_singleton()->draw_command_begin_label("Resolve"); if (render_buffer && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) { - RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa, render_buffer->color); - if (render_buffer->use_taa) { + for (uint32_t v = 0; v < render_buffer->view_count; v++) { + RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa_views[v], render_buffer->color_views[v]); + resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); + } + if (render_buffer->use_taa) { // TODO make TAA stereo capable, this will need to be handled in a separate PR RD::get_singleton()->texture_resolve_multisample(render_buffer->velocity_buffer_msaa, render_buffer->velocity_buffer); } - storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]); } RD::get_singleton()->draw_command_end_label(); @@ -3315,9 +3459,16 @@ RenderForwardClustered::RenderForwardClustered(RendererStorageRD *p_storage) : render_list_thread_threshold = GLOBAL_GET("rendering/limits/forward_renderer/threaded_render_minimum_instances"); _update_shader_quality_settings(); + + resolve_effects = memnew(RendererRD::Resolve()); } RenderForwardClustered::~RenderForwardClustered() { + if (resolve_effects != nullptr) { + memdelete(resolve_effects); + resolve_effects = nullptr; + } + directional_shadow_atlas_set_size(0); { diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h index 6ad42bf0ec..dd3d14f0a8 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h @@ -32,6 +32,7 @@ #define RENDERING_SERVER_SCENE_RENDER_FORWARD_CLUSTERED_H #include "core/templates/paged_allocator.h" +#include "servers/rendering/renderer_rd/effects/resolve.h" #include "servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h" #include "servers/rendering/renderer_rd/pipeline_cache_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_render_rd.h" @@ -72,7 +73,6 @@ class RenderForwardClustered : public RendererSceneRenderRD { RENDER_LIST_ALPHA, //used for transparent objects RENDER_LIST_SECONDARY, //used for shadows and other objects RENDER_LIST_MAX - }; /* Scene Shader */ @@ -99,7 +99,6 @@ class RenderForwardClustered : public RendererSceneRenderRD { RID depth_msaa; RID specular_msaa; RID normal_roughness_buffer_msaa; - RID roughness_buffer_msaa; RID voxelgi_buffer_msaa; RID velocity_buffer_msaa; @@ -110,7 +109,17 @@ class RenderForwardClustered : public RendererSceneRenderRD { RID specular_only_fb; int width, height; HashMap<uint32_t, RID> color_framebuffers; + + // for multiview uint32_t view_count; + RID color_views[RendererSceneRender::MAX_RENDER_VIEWS]; // we should rewrite this so we get access to the existing views in our renderer, something we can address when we reorg this + RID depth_views[RendererSceneRender::MAX_RENDER_VIEWS]; // we should rewrite this so we get access to the existing views in our renderer, something we can address when we reorg this + RID color_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS]; + RID depth_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS]; + RID normal_roughness_views[RendererSceneRender::MAX_RENDER_VIEWS]; + RID normal_roughness_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS]; + RID voxelgi_views[RendererSceneRender::MAX_RENDER_VIEWS]; + RID voxelgi_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS]; RID render_sdfgi_uniform_set; void ensure_specular(); @@ -237,6 +246,7 @@ class RenderForwardClustered : public RendererSceneRenderRD { float projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16]; float inv_projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16]; + float eye_offset[RendererSceneRender::MAX_RENDER_VIEWS][4]; float viewport_size[2]; float screen_pixel_size[2]; @@ -618,6 +628,8 @@ class RenderForwardClustered : public RendererSceneRenderRD { virtual void _update_shader_quality_settings() override; + RendererRD::Resolve *resolve_effects = nullptr; + protected: virtual void _render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) override; diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp index cfb30ef2f3..aada989bcb 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp @@ -282,6 +282,8 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) { SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL, SHADER_VERSION_DEPTH_PASS_WITH_SDF, SHADER_VERSION_DEPTH_PASS_MULTIVIEW, + SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, + SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, SHADER_VERSION_COLOR_PASS, }; @@ -349,9 +351,9 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) { if (k == PIPELINE_VERSION_DEPTH_PASS || k == PIPELINE_VERSION_DEPTH_PASS_DP || k == PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW) { //none, leave empty - } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS) { + } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS || k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW) { blend_state = blend_state_depth_normal_roughness; - } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI) { + } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI || k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW) { blend_state = blend_state_depth_normal_roughness_giprobe; } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL) { blend_state = RD::PipelineColorBlendState::create_disabled(5); //writes to normal and roughness in opaque way @@ -527,10 +529,12 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n"); // SHADER_VERSION_DEPTH_PASS shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_DUAL_PARABOLOID\n"); // SHADER_VERSION_DEPTH_PASS_DP shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS - shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_GIPROBE + shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_MATERIAL\n"); // SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_SDF\n"); // SHADER_VERSION_DEPTH_PASS_WITH_SDF shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n"); // SHADER_VERSION_DEPTH_PASS_MULTIVIEW + shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW + shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW Vector<String> color_pass_flags = { "\n#define MODE_SEPARATE_SPECULAR\n", // SHADER_COLOR_PASS_FLAG_SEPARATE_SPECULAR @@ -553,6 +557,8 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin if (!RendererCompositorRD::singleton->is_xr_enabled()) { shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_MULTIVIEW, false); + shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, false); + shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, false); // TODO Add a way to enable/disable color pass flags } } @@ -621,7 +627,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin //builtins - actions.renames["TIME"] = "scene_data_block.data.time"; + actions.renames["TIME"] = "global_time"; actions.renames["PI"] = _MKSTR(Math_PI); actions.renames["TAU"] = _MKSTR(Math_TAU); actions.renames["E"] = _MKSTR(Math_E); diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h index 79ccf10090..ffa3893b6a 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h @@ -52,6 +52,8 @@ public: SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL, SHADER_VERSION_DEPTH_PASS_WITH_SDF, SHADER_VERSION_DEPTH_PASS_MULTIVIEW, + SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, + SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, SHADER_VERSION_COLOR_PASS, SHADER_VERSION_MAX }; @@ -72,6 +74,8 @@ public: PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL, PIPELINE_VERSION_DEPTH_PASS_WITH_SDF, PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW, + PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, + PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, PIPELINE_VERSION_COLOR_PASS, PIPELINE_VERSION_MAX }; diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp index b2e0af06cd..25acd2e25f 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -675,7 +675,8 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color RD::get_singleton()->draw_command_end_label(); // Setup Sky resolution buffers } - _pre_opaque_render(p_render_data, false, false, false, RID(), RID()); + RID null_rids[2]; + _pre_opaque_render(p_render_data, false, false, false, null_rids, RID()); uint32_t spec_constant_base_flags = 0; @@ -1542,6 +1543,11 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, projection = correction * p_render_data->view_projection[v]; RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]); RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]); + + scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x; + scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y; + scene_state.ubo.eye_offset[v][2] = p_render_data->view_eye_offset[v].z; + scene_state.ubo.eye_offset[v][3] = 0.0; } scene_state.ubo.z_far = p_render_data->z_far; diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h index fc6f32ecb0..1b2df0ab9f 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h @@ -260,6 +260,7 @@ protected: float projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16]; float inv_projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16]; + float eye_offset[RendererSceneRender::MAX_RENDER_VIEWS][4]; float viewport_size[2]; float screen_pixel_size[2]; diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.h b/servers/rendering/renderer_rd/renderer_compositor_rd.h index aefc189f68..12bcfc4684 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.h +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.h @@ -98,11 +98,15 @@ protected: static uint64_t frame; public: - RendererLightStorage *get_light_storage() { return light_storage; }; - RendererMaterialStorage *get_material_storage() { return material_storage; }; - RendererMeshStorage *get_mesh_storage() { return mesh_storage; }; - RendererParticlesStorage *get_particles_storage() { return particles_storage; }; - RendererTextureStorage *get_texture_storage() { return texture_storage; }; + RendererLightStorage *get_light_storage() { return light_storage; } + RendererMaterialStorage *get_material_storage() { return material_storage; } + RendererMeshStorage *get_mesh_storage() { return mesh_storage; } + RendererParticlesStorage *get_particles_storage() { return particles_storage; } + RendererTextureStorage *get_texture_storage() { return texture_storage; } + RendererGI *get_gi() { + ERR_FAIL_NULL_V(scene, nullptr); + return scene->get_gi(); + } RendererStorage *get_storage() { return storage; } RendererCanvasRender *get_canvas() { return canvas; } RendererSceneRender *get_scene() { return scene; } diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index a1c6ff540d..6f16c0972e 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -74,7 +74,7 @@ void RendererSceneRenderRD::sdfgi_update(RID p_render_buffers, RID p_environment rb->sdfgi = nullptr; } - RendererSceneGIRD::SDFGI *sdfgi = rb->sdfgi; + RendererRD::GI::SDFGI *sdfgi = rb->sdfgi; if (sdfgi == nullptr) { // re-create rb->sdfgi = gi.create_sdfgi(env, p_world_position, requested_history_size); @@ -95,9 +95,9 @@ int RendererSceneRenderRD::sdfgi_get_pending_region_count(RID p_render_buffers) int dirty_count = 0; for (uint32_t i = 0; i < rb->sdfgi->cascades.size(); i++) { - const RendererSceneGIRD::SDFGI::Cascade &c = rb->sdfgi->cascades[i]; + const RendererRD::GI::SDFGI::Cascade &c = rb->sdfgi->cascades[i]; - if (c.dirty_regions == RendererSceneGIRD::SDFGI::Cascade::DIRTY_ALL) { + if (c.dirty_regions == RendererRD::GI::SDFGI::Cascade::DIRTY_ALL) { dirty_count++; } else { for (int j = 0; j < 3; j++) { @@ -1533,7 +1533,7 @@ void RendererSceneRenderRD::voxel_gi_update(RID p_probe, bool p_update_light_ins gi.voxel_gi_update(p_probe, p_update_light_instances, p_light_instances, p_dynamic_objects, this); } -void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform) { +void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth) { RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND(!rb); @@ -1541,7 +1541,7 @@ void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RD::DrawLi return; //nothing to debug } - rb->sdfgi->debug_probes(p_draw_list, p_framebuffer, p_camera_with_transform); + rb->sdfgi->debug_probes(p_framebuffer, p_view_count, p_camera_with_transforms, p_will_continue_color, p_will_continue_depth); } //////////////////////////////// @@ -1950,17 +1950,7 @@ void RendererSceneRenderRD::_free_render_buffer_data(RenderBuffers *rb) { rb->taa.prev_velocity = RID(); } - if (rb->ambient_buffer.is_valid()) { - RD::get_singleton()->free(rb->ambient_buffer); - RD::get_singleton()->free(rb->reflection_buffer); - rb->ambient_buffer = RID(); - rb->reflection_buffer = RID(); - } - - if (rb->gi.voxel_gi_buffer.is_valid()) { - RD::get_singleton()->free(rb->gi.voxel_gi_buffer); - rb->gi.voxel_gi_buffer = RID(); - } + rb->rbgi.free(); } void RendererSceneRenderRD::_process_sss(RID p_render_buffers, const CameraMatrix &p_camera) { @@ -2796,11 +2786,11 @@ void RendererSceneRenderRD::_render_buffers_debug_draw(RID p_render_buffers, RID copy_effects->copy_to_fb_rect(_render_buffers_get_normal_texture(p_render_buffers), texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false); } - if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_GI_BUFFER && rb->ambient_buffer.is_valid()) { + if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_GI_BUFFER && rb->rbgi.ambient_buffer.is_valid()) { Size2 rtsize = texture_storage->render_target_get_size(rb->render_target); - RID ambient_texture = rb->ambient_buffer; - RID reflection_texture = rb->reflection_buffer; - copy_effects->copy_to_fb_rect(ambient_texture, texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false, false, true, reflection_texture); + RID ambient_texture = rb->rbgi.ambient_buffer; + RID reflection_texture = rb->rbgi.reflection_buffer; + copy_effects->copy_to_fb_rect(ambient_texture, texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false, false, true, reflection_texture, rb->view_count > 1); } if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_OCCLUDERS) { @@ -2869,10 +2859,10 @@ RID RendererSceneRenderRD::render_buffers_get_ssil_texture(RID p_render_buffers) RID RendererSceneRenderRD::render_buffers_get_voxel_gi_buffer(RID p_render_buffers) { RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND_V(!rb, RID()); - if (rb->gi.voxel_gi_buffer.is_null()) { - rb->gi.voxel_gi_buffer = RD::get_singleton()->uniform_buffer_create(sizeof(RendererSceneGIRD::VoxelGIData) * RendererSceneGIRD::MAX_VOXEL_GI_INSTANCES); + if (rb->rbgi.voxel_gi_buffer.is_null()) { + rb->rbgi.voxel_gi_buffer = RD::get_singleton()->uniform_buffer_create(sizeof(RendererRD::GI::VoxelGIData) * RendererRD::GI::MAX_VOXEL_GI_INSTANCES); } - return rb->gi.voxel_gi_buffer; + return rb->rbgi.voxel_gi_buffer; } RID RendererSceneRenderRD::render_buffers_get_default_voxel_gi_buffer() { @@ -2882,12 +2872,13 @@ RID RendererSceneRenderRD::render_buffers_get_default_voxel_gi_buffer() { RID RendererSceneRenderRD::render_buffers_get_gi_ambient_texture(RID p_render_buffers) { RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND_V(!rb, RID()); - return rb->ambient_buffer; + + return rb->rbgi.ambient_buffer; } RID RendererSceneRenderRD::render_buffers_get_gi_reflection_texture(RID p_render_buffers) { RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers); ERR_FAIL_COND_V(!rb, RID()); - return rb->reflection_buffer; + return rb->rbgi.reflection_buffer; } uint32_t RendererSceneRenderRD::render_buffers_get_sdfgi_cascade_count(RID p_render_buffers) const { @@ -2925,7 +2916,7 @@ Vector3i RendererSceneRenderRD::render_buffers_get_sdfgi_cascade_probe_offset(RI ERR_FAIL_COND_V(!rb, Vector3i()); ERR_FAIL_COND_V(!rb->sdfgi, Vector3i()); ERR_FAIL_UNSIGNED_INDEX_V(p_cascade, rb->sdfgi->cascades.size(), Vector3i()); - int32_t probe_divisor = rb->sdfgi->cascade_size / RendererSceneGIRD::SDFGI::PROBE_DIVISOR; + int32_t probe_divisor = rb->sdfgi->cascade_size / RendererRD::GI::SDFGI::PROBE_DIVISOR; return rb->sdfgi->cascades[p_cascade].position / probe_divisor; } @@ -3457,7 +3448,9 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const // technically this will keep expanding until reaching the sun, but all we care // is expand until we reach the radius of the near plane (there can't be more occluders than that) angular_diameter = Math::tan(Math::deg2rad(angular_diameter)); - if (light_storage->light_has_shadow(base)) { + if (light_storage->light_has_shadow(base) && light_storage->light_get_param(base, RS::LIGHT_PARAM_SHADOW_BLUR) > 0.0) { + // Only enable PCSS-like soft shadows if blurring is enabled. + // Otherwise, performance would decrease with no visual difference. r_directional_light_soft_shadows = true; } } else { @@ -3736,7 +3729,9 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const RendererStorageRD::store_transform(proj, light_data.shadow_matrix); - if (size > 0.0) { + if (size > 0.0 && light_data.soft_shadow_scale > 0.0) { + // Only enable PCSS-like soft shadows if blurring is enabled. + // Otherwise, performance would decrease with no visual difference. light_data.soft_shadow_size = size; } else { light_data.soft_shadow_size = 0.0; @@ -3753,7 +3748,9 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const CameraMatrix shadow_mtx = bias * li->shadow_transform[0].camera * modelview; RendererStorageRD::store_camera(shadow_mtx, light_data.shadow_matrix); - if (size > 0.0) { + if (size > 0.0 && light_data.soft_shadow_scale > 0.0) { + // Only enable PCSS-like soft shadows if blurring is enabled. + // Otherwise, performance would decrease with no visual difference. CameraMatrix cm = li->shadow_transform[0].camera; float half_np = cm.get_z_near() * Math::tan(Math::deg2rad(spot_angle)); light_data.soft_shadow_size = (size * 0.5 / radius) / (half_np / cm.get_z_near()) * rect.size.width; @@ -4609,8 +4606,8 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_TEXTURE; u.binding = 12; - for (int i = 0; i < RendererSceneGIRD::MAX_VOXEL_GI_INSTANCES; i++) { - u.append_id(rb->gi.voxel_gi_textures[i]); + for (int i = 0; i < RendererRD::GI::MAX_VOXEL_GI_INSTANCES; i++) { + u.append_id(rb->rbgi.voxel_gi_textures[i]); } uniforms.push_back(u); copy_uniforms.push_back(u); @@ -4924,7 +4921,7 @@ void RendererSceneRenderRD::_pre_resolve_render(RenderDataRD *p_render_data, boo } } -void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer) { +void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID *p_normal_roughness_views, RID p_voxel_gi_buffer) { // Render shadows while GI is rendering, due to how barriers are handled, this should happen at the same time RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); @@ -4999,7 +4996,7 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool //start GI if (render_gi) { - gi.process_gi(p_render_data->render_buffers, p_normal_roughness_buffer, p_voxel_gi_buffer, p_render_data->environment, p_render_data->cam_projection, p_render_data->cam_transform, *p_render_data->voxel_gi_instances, this); + gi.process_gi(p_render_data->render_buffers, p_normal_roughness_views, p_voxel_gi_buffer, p_render_data->environment, p_render_data->view_count, p_render_data->view_projection, p_render_data->view_eye_offset, p_render_data->cam_transform, *p_render_data->voxel_gi_instances, this); } //Do shadow rendering (in parallel with GI) @@ -5040,11 +5037,13 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool } if (p_use_ssao) { - _process_ssao(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_buffer, p_render_data->cam_projection); + // TODO make these proper stereo and thus use p_normal_roughness_views correctly + _process_ssao(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_views[0], p_render_data->cam_projection); } if (p_use_ssil) { - _process_ssil(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_buffer, p_render_data->cam_projection, p_render_data->cam_transform); + // TODO make these proper stereo and thus use p_normal_roughness_views correctly + _process_ssil(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_views[0], p_render_data->cam_projection, p_render_data->cam_transform); } } @@ -5109,12 +5108,12 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData // Our first camera is used by default render_data.cam_transform = p_camera_data->main_transform; render_data.cam_projection = p_camera_data->main_projection; - render_data.view_projection[0] = p_camera_data->main_projection; render_data.cam_orthogonal = p_camera_data->is_orthogonal; render_data.taa_jitter = p_camera_data->taa_jitter; render_data.view_count = p_camera_data->view_count; for (uint32_t v = 0; v < p_camera_data->view_count; v++) { + render_data.view_eye_offset[v] = p_camera_data->view_offset[v].origin; render_data.view_projection[v] = p_camera_data->view_projection[v]; } @@ -5189,7 +5188,7 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData //assign render indices to voxel_gi_instances if (is_dynamic_gi_supported()) { for (uint32_t i = 0; i < (uint32_t)p_voxel_gi_instances.size(); i++) { - RendererSceneGIRD::VoxelGIInstance *voxel_gi_inst = gi.voxel_gi_instance_owner.get_or_null(p_voxel_gi_instances[i]); + RendererRD::GI::VoxelGIInstance *voxel_gi_inst = gi.voxel_gi_instance_owner.get_or_null(p_voxel_gi_instances[i]); if (voxel_gi_inst) { voxel_gi_inst->render_index = i; } @@ -5243,7 +5242,13 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData _render_buffers_debug_draw(p_render_buffers, p_shadow_atlas, p_occluder_debug_tex); if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_SDFGI && rb != nullptr && rb->sdfgi != nullptr) { - rb->sdfgi->debug_draw(render_data.cam_projection, render_data.cam_transform, rb->width, rb->height, rb->render_target, rb->texture); + Vector<RID> view_rids; + + for (int v = 0; v < rb->views.size(); v++) { + view_rids.push_back(rb->views[v].view_texture); + } + + rb->sdfgi->debug_draw(render_data.view_count, render_data.view_projection, render_data.cam_transform, rb->width, rb->height, rb->render_target, rb->texture, view_rids); } } } @@ -5512,7 +5517,7 @@ bool RendererSceneRenderRD::free(RID p_rid) { } else if (lightmap_instance_owner.owns(p_rid)) { lightmap_instance_owner.free(p_rid); } else if (gi.voxel_gi_instance_owner.owns(p_rid)) { - RendererSceneGIRD::VoxelGIInstance *voxel_gi = gi.voxel_gi_instance_owner.get_or_null(p_rid); + RendererRD::GI::VoxelGIInstance *voxel_gi = gi.voxel_gi_instance_owner.get_or_null(p_rid); if (voxel_gi->texture.is_valid()) { RD::get_singleton()->free(voxel_gi->texture); RD::get_singleton()->free(voxel_gi->write_buffer); diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h index 1b1df6469e..c87fd6703f 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h @@ -38,8 +38,8 @@ #include "servers/rendering/renderer_rd/effects/bokeh_dof.h" #include "servers/rendering/renderer_rd/effects/copy_effects.h" #include "servers/rendering/renderer_rd/effects/tone_mapper.h" +#include "servers/rendering/renderer_rd/environment/gi.h" #include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h" -#include "servers/rendering/renderer_rd/renderer_scene_gi_rd.h" #include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h" #include "servers/rendering/renderer_rd/renderer_storage_rd.h" #include "servers/rendering/renderer_rd/shaders/volumetric_fog.glsl.gen.h" @@ -58,6 +58,7 @@ struct RenderDataRD { // For stereo rendering uint32_t view_count = 1; + Vector3 view_eye_offset[RendererSceneRender::MAX_RENDER_VIEWS]; CameraMatrix view_projection[RendererSceneRender::MAX_RENDER_VIEWS]; Transform3D prev_cam_transform; @@ -98,7 +99,7 @@ struct RenderDataRD { class RendererSceneRenderRD : public RendererSceneRender { friend RendererSceneSkyRD; - friend RendererSceneGIRD; + friend RendererRD::GI; protected: RendererStorageRD *storage = nullptr; @@ -130,7 +131,7 @@ protected: virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) = 0; virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) = 0; - void _debug_sdfgi_probes(RID p_render_buffers, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform); + void _debug_sdfgi_probes(RID p_render_buffers, RID p_framebuffer, uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth); void _debug_draw_cluster(RID p_render_buffers); RenderBufferData *render_buffers_get_data(RID p_render_buffers); @@ -150,7 +151,7 @@ protected: void _post_prepass_render(RenderDataRD *p_render_data, bool p_use_gi); void _pre_resolve_render(RenderDataRD *p_render_data, bool p_use_gi); - void _pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer); + void _pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID *p_normal_roughness_views, RID p_voxel_gi_buffer); void _render_buffers_copy_screen_texture(const RenderDataRD *p_render_data); void _render_buffers_copy_depth_texture(const RenderDataRD *p_render_data); @@ -162,7 +163,7 @@ protected: PagedArrayPool<GeometryInstance *> cull_argument_pool; PagedArray<GeometryInstance *> cull_argument; //need this to exist - RendererSceneGIRD gi; + RendererRD::GI gi; RendererSceneSkyRD sky; RendererSceneEnvironmentRD *get_environment(RID p_environment) { @@ -502,9 +503,9 @@ private: }; Vector<View> views; - RendererSceneGIRD::SDFGI *sdfgi = nullptr; + RendererRD::GI::SDFGI *sdfgi = nullptr; VolumetricFog *volumetric_fog = nullptr; - RendererSceneGIRD::RenderBuffersGI gi; + RendererRD::GI::RenderBuffersGI rbgi; ClusterBuilderRD *cluster_builder = nullptr; @@ -605,9 +606,6 @@ private: RID temp; RID prev_velocity; // Last frame velocity buffer } taa; - - RID ambient_buffer; - RID reflection_buffer; }; /* GI */ @@ -996,6 +994,10 @@ public: virtual Transform3D geometry_instance_get_transform(GeometryInstance *p_instance) = 0; virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) = 0; + /* GI */ + + RendererRD::GI *get_gi() { return &gi; } + /* SHADOW ATLAS API */ virtual RID shadow_atlas_create() override; diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp index d5166c6905..8c55ff1d0a 100644 --- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp @@ -35,6 +35,7 @@ #include "core/io/resource_loader.h" #include "core/math/math_defs.h" #include "renderer_compositor_rd.h" +#include "servers/rendering/renderer_rd/environment/gi.h" #include "servers/rendering/renderer_rd/storage_rd/light_storage.h" #include "servers/rendering/renderer_rd/storage_rd/mesh_storage.h" #include "servers/rendering/renderer_rd/storage_rd/particles_storage.h" @@ -173,336 +174,6 @@ void RendererStorageRD::visibility_notifier_call(RID p_notifier, bool p_enter, b } } -/* VOXEL GI */ - -RID RendererStorageRD::voxel_gi_allocate() { - return voxel_gi_owner.allocate_rid(); -} -void RendererStorageRD::voxel_gi_initialize(RID p_voxel_gi) { - voxel_gi_owner.initialize_rid(p_voxel_gi, VoxelGI()); -} - -void RendererStorageRD::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - if (voxel_gi->octree_buffer.is_valid()) { - RD::get_singleton()->free(voxel_gi->octree_buffer); - RD::get_singleton()->free(voxel_gi->data_buffer); - if (voxel_gi->sdf_texture.is_valid()) { - RD::get_singleton()->free(voxel_gi->sdf_texture); - } - - voxel_gi->sdf_texture = RID(); - voxel_gi->octree_buffer = RID(); - voxel_gi->data_buffer = RID(); - voxel_gi->octree_buffer_size = 0; - voxel_gi->data_buffer_size = 0; - voxel_gi->cell_count = 0; - } - - voxel_gi->to_cell_xform = p_to_cell_xform; - voxel_gi->bounds = p_aabb; - voxel_gi->octree_size = p_octree_size; - voxel_gi->level_counts = p_level_counts; - - if (p_octree_cells.size()) { - ERR_FAIL_COND(p_octree_cells.size() % 32 != 0); //cells size must be a multiple of 32 - - uint32_t cell_count = p_octree_cells.size() / 32; - - ERR_FAIL_COND(p_data_cells.size() != (int)cell_count * 16); //see that data size matches - - voxel_gi->cell_count = cell_count; - voxel_gi->octree_buffer = RD::get_singleton()->storage_buffer_create(p_octree_cells.size(), p_octree_cells); - voxel_gi->octree_buffer_size = p_octree_cells.size(); - voxel_gi->data_buffer = RD::get_singleton()->storage_buffer_create(p_data_cells.size(), p_data_cells); - voxel_gi->data_buffer_size = p_data_cells.size(); - - if (p_distance_field.size()) { - RD::TextureFormat tf; - tf.format = RD::DATA_FORMAT_R8_UNORM; - tf.width = voxel_gi->octree_size.x; - tf.height = voxel_gi->octree_size.y; - tf.depth = voxel_gi->octree_size.z; - tf.texture_type = RD::TEXTURE_TYPE_3D; - tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT; - Vector<Vector<uint8_t>> s; - s.push_back(p_distance_field); - voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView(), s); - } -#if 0 - { - RD::TextureFormat tf; - tf.format = RD::DATA_FORMAT_R8_UNORM; - tf.width = voxel_gi->octree_size.x; - tf.height = voxel_gi->octree_size.y; - tf.depth = voxel_gi->octree_size.z; - tf.type = RD::TEXTURE_TYPE_3D; - tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT; - tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UNORM); - tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UINT); - voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView()); - } - RID shared_tex; - { - RD::TextureView tv; - tv.format_override = RD::DATA_FORMAT_R8_UINT; - shared_tex = RD::get_singleton()->texture_create_shared(tv, voxel_gi->sdf_texture); - } - //update SDF texture - Vector<RD::Uniform> uniforms; - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; - u.binding = 1; - u.append_id(voxel_gi->octree_buffer); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER; - u.binding = 2; - u.append_id(voxel_gi->data_buffer); - uniforms.push_back(u); - } - { - RD::Uniform u; - u.uniform_type = RD::UNIFORM_TYPE_IMAGE; - u.binding = 3; - u.append_id(shared_tex); - uniforms.push_back(u); - } - - RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, voxel_gi_sdf_shader_version_shader, 0); - - { - uint32_t push_constant[4] = { 0, 0, 0, 0 }; - - for (int i = 0; i < voxel_gi->level_counts.size() - 1; i++) { - push_constant[0] += voxel_gi->level_counts[i]; - } - push_constant[1] = push_constant[0] + voxel_gi->level_counts[voxel_gi->level_counts.size() - 1]; - - print_line("offset: " + itos(push_constant[0])); - print_line("size: " + itos(push_constant[1])); - //create SDF - RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); - RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, voxel_gi_sdf_shader_pipeline); - RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set, 0); - RD::get_singleton()->compute_list_set_push_constant(compute_list, push_constant, sizeof(uint32_t) * 4); - RD::get_singleton()->compute_list_dispatch(compute_list, voxel_gi->octree_size.x / 4, voxel_gi->octree_size.y / 4, voxel_gi->octree_size.z / 4); - RD::get_singleton()->compute_list_end(); - } - - RD::get_singleton()->free(uniform_set); - RD::get_singleton()->free(shared_tex); - } -#endif - } - - voxel_gi->version++; - voxel_gi->data_version++; - - voxel_gi->dependency.changed_notify(DEPENDENCY_CHANGED_AABB); -} - -AABB RendererStorageRD::voxel_gi_get_bounds(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, AABB()); - - return voxel_gi->bounds; -} - -Vector3i RendererStorageRD::voxel_gi_get_octree_size(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Vector3i()); - return voxel_gi->octree_size; -} - -Vector<uint8_t> RendererStorageRD::voxel_gi_get_octree_cells(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); - - if (voxel_gi->octree_buffer.is_valid()) { - return RD::get_singleton()->buffer_get_data(voxel_gi->octree_buffer); - } - return Vector<uint8_t>(); -} - -Vector<uint8_t> RendererStorageRD::voxel_gi_get_data_cells(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); - - if (voxel_gi->data_buffer.is_valid()) { - return RD::get_singleton()->buffer_get_data(voxel_gi->data_buffer); - } - return Vector<uint8_t>(); -} - -Vector<uint8_t> RendererStorageRD::voxel_gi_get_distance_field(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>()); - - if (voxel_gi->data_buffer.is_valid()) { - return RD::get_singleton()->texture_get_data(voxel_gi->sdf_texture, 0); - } - return Vector<uint8_t>(); -} - -Vector<int> RendererStorageRD::voxel_gi_get_level_counts(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Vector<int>()); - - return voxel_gi->level_counts; -} - -Transform3D RendererStorageRD::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, Transform3D()); - - return voxel_gi->to_cell_xform; -} - -void RendererStorageRD::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->dynamic_range = p_range; - voxel_gi->version++; -} - -float RendererStorageRD::voxel_gi_get_dynamic_range(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - - return voxel_gi->dynamic_range; -} - -void RendererStorageRD::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->propagation = p_range; - voxel_gi->version++; -} - -float RendererStorageRD::voxel_gi_get_propagation(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->propagation; -} - -void RendererStorageRD::voxel_gi_set_energy(RID p_voxel_gi, float p_energy) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->energy = p_energy; -} - -float RendererStorageRD::voxel_gi_get_energy(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->energy; -} - -void RendererStorageRD::voxel_gi_set_bias(RID p_voxel_gi, float p_bias) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->bias = p_bias; -} - -float RendererStorageRD::voxel_gi_get_bias(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->bias; -} - -void RendererStorageRD::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_normal_bias) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->normal_bias = p_normal_bias; -} - -float RendererStorageRD::voxel_gi_get_normal_bias(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->normal_bias; -} - -void RendererStorageRD::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->anisotropy_strength = p_strength; -} - -float RendererStorageRD::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->anisotropy_strength; -} - -void RendererStorageRD::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->interior = p_enable; -} - -void RendererStorageRD::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND(!voxel_gi); - - voxel_gi->use_two_bounces = p_enable; - voxel_gi->version++; -} - -bool RendererStorageRD::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, false); - return voxel_gi->use_two_bounces; -} - -bool RendererStorageRD::voxel_gi_is_interior(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->interior; -} - -uint32_t RendererStorageRD::voxel_gi_get_version(RID p_voxel_gi) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->version; -} - -uint32_t RendererStorageRD::voxel_gi_get_data_version(RID p_voxel_gi) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, 0); - return voxel_gi->data_version; -} - -RID RendererStorageRD::voxel_gi_get_octree_buffer(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, RID()); - return voxel_gi->octree_buffer; -} - -RID RendererStorageRD::voxel_gi_get_data_buffer(RID p_voxel_gi) const { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, RID()); - return voxel_gi->data_buffer; -} - -RID RendererStorageRD::voxel_gi_get_sdf_texture(RID p_voxel_gi) { - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi); - ERR_FAIL_COND_V(!voxel_gi, RID()); - - return voxel_gi->sdf_texture; -} - /* misc */ void RendererStorageRD::base_update_dependency(RID p_base, DependencyTracker *p_instance) { @@ -521,8 +192,8 @@ void RendererStorageRD::base_update_dependency(RID p_base, DependencyTracker *p_ } else if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_base)) { RendererRD::Decal *decal = RendererRD::TextureStorage::get_singleton()->get_decal(p_base); p_instance->update_dependency(&decal->dependency); - } else if (voxel_gi_owner.owns(p_base)) { - VoxelGI *gip = voxel_gi_owner.get_or_null(p_base); + } else if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_base)) { + RendererRD::GI::VoxelGI *gip = RendererRD::GI::get_singleton()->get_voxel_gi(p_base); p_instance->update_dependency(&gip->dependency); } else if (RendererRD::LightStorage::get_singleton()->owns_lightmap(p_base)) { RendererRD::Lightmap *lm = RendererRD::LightStorage::get_singleton()->get_lightmap(p_base); @@ -558,7 +229,7 @@ RS::InstanceType RendererStorageRD::get_base_type(RID p_rid) const { if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_rid)) { return RS::INSTANCE_DECAL; } - if (voxel_gi_owner.owns(p_rid)) { + if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_rid)) { return RS::INSTANCE_VOXEL_GI; } if (RendererRD::LightStorage::get_singleton()->owns_light(p_rid)) { @@ -636,11 +307,8 @@ bool RendererStorageRD::free(RID p_rid) { RendererRD::LightStorage::get_singleton()->reflection_probe_free(p_rid); } else if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_rid)) { RendererRD::TextureStorage::get_singleton()->decal_free(p_rid); - } else if (voxel_gi_owner.owns(p_rid)) { - voxel_gi_allocate_data(p_rid, Transform3D(), AABB(), Vector3i(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<int>()); //deallocate - VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_rid); - voxel_gi->dependency.deleted_notify(p_rid); - voxel_gi_owner.free(p_rid); + } else if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_rid)) { + RendererRD::GI::get_singleton()->voxel_gi_free(p_rid); } else if (RendererRD::LightStorage::get_singleton()->owns_lightmap(p_rid)) { RendererRD::LightStorage::get_singleton()->lightmap_free(p_rid); } else if (RendererRD::LightStorage::get_singleton()->owns_light(p_rid)) { diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.h b/servers/rendering/renderer_rd/renderer_storage_rd.h index 07fae45a26..d41129d678 100644 --- a/servers/rendering/renderer_rd/renderer_storage_rd.h +++ b/servers/rendering/renderer_rd/renderer_storage_rd.h @@ -36,7 +36,7 @@ #include "core/templates/rid_owner.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/renderer_rd/effects_rd.h" -#include "servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl.gen.h" +#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl.gen.h" #include "servers/rendering/renderer_rd/storage_rd/material_storage.h" #include "servers/rendering/renderer_scene_render.h" #include "servers/rendering/rendering_device.h" @@ -147,42 +147,6 @@ private: mutable RID_Owner<VisibilityNotifier> visibility_notifier_owner; - /* VOXEL GI */ - - struct VoxelGI { - RID octree_buffer; - RID data_buffer; - RID sdf_texture; - - uint32_t octree_buffer_size = 0; - uint32_t data_buffer_size = 0; - - Vector<int> level_counts; - - int cell_count = 0; - - Transform3D to_cell_xform; - AABB bounds; - Vector3i octree_size; - - float dynamic_range = 2.0; - float energy = 1.0; - float bias = 1.4; - float normal_bias = 0.0; - float propagation = 0.7; - bool interior = false; - bool use_two_bounces = false; - - float anisotropy_strength = 0.5; - - uint32_t version = 1; - uint32_t data_version = 1; - - Dependency dependency; - }; - - mutable RID_Owner<VoxelGI, true> voxel_gi_owner; - /* EFFECTS */ EffectsRD *effects = nullptr; @@ -192,54 +156,6 @@ public: void base_update_dependency(RID p_base, DependencyTracker *p_instance); - /* VOXEL GI API */ - - RID voxel_gi_allocate(); - void voxel_gi_initialize(RID p_voxel_gi); - - void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts); - - AABB voxel_gi_get_bounds(RID p_voxel_gi) const; - Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const; - Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const; - Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const; - Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const; - - Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const; - Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const; - - void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range); - float voxel_gi_get_dynamic_range(RID p_voxel_gi) const; - - void voxel_gi_set_propagation(RID p_voxel_gi, float p_range); - float voxel_gi_get_propagation(RID p_voxel_gi) const; - - void voxel_gi_set_energy(RID p_voxel_gi, float p_energy); - float voxel_gi_get_energy(RID p_voxel_gi) const; - - void voxel_gi_set_bias(RID p_voxel_gi, float p_bias); - float voxel_gi_get_bias(RID p_voxel_gi) const; - - void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range); - float voxel_gi_get_normal_bias(RID p_voxel_gi) const; - - void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable); - bool voxel_gi_is_interior(RID p_voxel_gi) const; - - void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable); - bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const; - - void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength); - float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const; - - uint32_t voxel_gi_get_version(RID p_probe); - uint32_t voxel_gi_get_data_version(RID p_probe); - - RID voxel_gi_get_octree_buffer(RID p_voxel_gi) const; - RID voxel_gi_get_data_buffer(RID p_voxel_gi) const; - - RID voxel_gi_get_sdf_texture(RID p_voxel_gi); - /* FOG VOLUMES */ virtual RID fog_volume_allocate(); diff --git a/servers/rendering/renderer_rd/shaders/SCsub b/servers/rendering/renderer_rd/shaders/SCsub index acb843bfb6..05663226c0 100644 --- a/servers/rendering/renderer_rd/shaders/SCsub +++ b/servers/rendering/renderer_rd/shaders/SCsub @@ -17,3 +17,4 @@ if "RD_GLSL" in env["BUILDERS"]: env.RD_GLSL(glsl_file) SConscript("effects/SCsub") +SConscript("environment/SCsub") diff --git a/servers/rendering/renderer_rd/shaders/resolve.glsl b/servers/rendering/renderer_rd/shaders/effects/resolve.glsl index 0e086331c0..0e086331c0 100644 --- a/servers/rendering/renderer_rd/shaders/resolve.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/resolve.glsl diff --git a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl index a8ccdea60b..62a7b0e7d7 100644 --- a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl +++ b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl @@ -448,6 +448,11 @@ void main() { // Early Tonemap & SRGB Conversion #ifndef SUBPASS + if (params.use_fxaa) { + // FXAA must be performed before glow to preserve the "bleed" effect of glow. + color.rgb = do_fxaa(color.rgb, exposure, uv_interp); + } + if (params.use_glow && params.glow_mode == GLOW_MODE_MIX) { vec3 glow = gather_glow(source_glow, uv_interp) * params.luminance_multiplier; if (params.glow_map_strength > 0.001) { @@ -455,10 +460,6 @@ void main() { } color.rgb = mix(color.rgb, glow, params.glow_intensity); } - - if (params.use_fxaa) { - color.rgb = do_fxaa(color.rgb, exposure, uv_interp); - } #endif if (params.use_debanding) { diff --git a/servers/rendering/renderer_rd/shaders/environment/SCsub b/servers/rendering/renderer_rd/shaders/environment/SCsub new file mode 100644 index 0000000000..fc513d3fb9 --- /dev/null +++ b/servers/rendering/renderer_rd/shaders/environment/SCsub @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +Import("env") + +if "RD_GLSL" in env["BUILDERS"]: + # find all include files + gl_include_files = [str(f) for f in Glob("*_inc.glsl")] + + # find all shader code(all glsl files excluding our include files) + glsl_files = [str(f) for f in Glob("*.glsl") if str(f) not in gl_include_files] + + # make sure we recompile shaders if include files change + env.Depends([f + ".gen.h" for f in glsl_files], gl_include_files) + + # compile shaders + for glsl_file in glsl_files: + env.RD_GLSL(glsl_file) diff --git a/servers/rendering/renderer_rd/shaders/gi.glsl b/servers/rendering/renderer_rd/shaders/environment/gi.glsl index 0c7f08813b..f687d50a2d 100644 --- a/servers/rendering/renderer_rd/shaders/gi.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/gi.glsl @@ -86,19 +86,29 @@ voxel_gi_instances; layout(set = 0, binding = 17) uniform texture3D voxel_gi_textures[MAX_VOXEL_GI_INSTANCES]; -layout(push_constant, std430) uniform Params { - ivec2 screen_size; - float z_near; - float z_far; +layout(set = 0, binding = 18, std140) uniform SceneData { + mat4x4 inv_projection[2]; + mat4x4 cam_transform; + vec4 eye_offset[2]; - vec4 proj_info; + ivec2 screen_size; + float pad1; + float pad2; +} +scene_data; +layout(push_constant, std430) uniform Params { + uint view_index; uint max_voxel_gi_instances; bool high_quality_vct; bool orthogonal; - uint pad; - mat3x4 cam_rotation; + vec4 proj_info; + + float z_near; + float z_far; + float pad1; + float pad2; } params; @@ -130,6 +140,16 @@ vec4 blend_color(vec4 src, vec4 dst) { } vec3 reconstruct_position(ivec2 screen_pos) { +#ifdef USE_MULTIVIEW + vec4 pos; + pos.xy = (2.0 * vec2(screen_pos) / vec2(scene_data.screen_size)) - 1.0; + pos.z = texelFetch(sampler2D(depth_buffer, linear_sampler), screen_pos, 0).r * 2.0 - 1.0; + pos.w = 1.0; + + pos = scene_data.inv_projection[params.view_index] * pos; + + return pos.xyz / pos.w; +#else vec3 pos; pos.z = texelFetch(sampler2D(depth_buffer, linear_sampler), screen_pos, 0).r; @@ -147,6 +167,7 @@ vec3 reconstruct_position(ivec2 screen_pos) { } return pos; +#endif } void sdfvoxel_gi_process(uint cascade, vec3 cascade_pos, vec3 cam_pos, vec3 cam_normal, vec3 cam_specular_normal, float roughness, out vec3 diffuse_light, out vec3 specular_light) { @@ -579,9 +600,10 @@ void process_gi(ivec2 pos, vec3 vertex, inout vec4 ambient_light, inout vec4 ref if (normal.length() > 0.5) { //valid normal, can do GI float roughness = normal_roughness.w; - vertex = mat3(params.cam_rotation) * vertex; - normal = normalize(mat3(params.cam_rotation) * normal); - vec3 reflection = normalize(reflect(normalize(vertex), normal)); + vec3 view = -normalize(mat3(scene_data.cam_transform) * (vertex - scene_data.eye_offset[params.view_index].xyz)); + vertex = mat3(scene_data.cam_transform) * vertex; + normal = normalize(mat3(scene_data.cam_transform) * normal); + vec3 reflection = normalize(reflect(-view, normal)); #ifdef USE_SDFGI sdfgi_process(vertex, normal, reflection, roughness, ambient_light, reflection_light); @@ -629,7 +651,7 @@ void main() { #ifdef MODE_HALF_RES pos <<= 1; #endif - if (any(greaterThanEqual(pos, params.screen_size))) { //too large, do nothing + if (any(greaterThanEqual(pos, scene_data.screen_size))) { //too large, do nothing return; } diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl index 802a410825..af5f7d0a58 100644 --- a/servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl @@ -40,10 +40,13 @@ layout(push_constant, std430) uniform Params { bool use_occlusion; float y_mult; - vec3 cam_extent; int probe_axis_size; + float z_near; + float reserved1; + float reserved2; mat4 cam_transform; + mat4 inv_projection; } params; @@ -81,8 +84,9 @@ void main() { { ray_pos = params.cam_transform[3].xyz; - ray_dir.xy = params.cam_extent.xy * ((vec2(screen_pos) / vec2(params.screen_size)) * 2.0 - 1.0); - ray_dir.z = params.cam_extent.z; + ray_dir.xy = ((vec2(screen_pos) / vec2(params.screen_size)) * 2.0 - 1.0); + ray_dir.z = params.z_near; + ray_dir = (params.inv_projection * vec4(ray_dir, 1.0)).xyz; ray_dir = normalize(mat3(params.cam_transform) * ray_dir); } diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl index e0be0bca12..75b1ad2130 100644 --- a/servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl @@ -2,13 +2,28 @@ #version 450 +#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview) +#extension GL_EXT_multiview : enable +#endif + +#ifdef USE_MULTIVIEW +#ifdef has_VK_KHR_multiview +#define ViewIndex gl_ViewIndex +#else // has_VK_KHR_multiview +// !BAS! This needs to become an input once we implement our fallback! +#define ViewIndex 0 +#endif // has_VK_KHR_multiview +#else // USE_MULTIVIEW +// Set to zero, not supported in non stereo +#define ViewIndex 0 +#endif //USE_MULTIVIEW + #VERSION_DEFINES #define MAX_CASCADES 8 +#define MAX_VIEWS 2 layout(push_constant, std430) uniform Params { - mat4 projection; - uint band_power; uint sections_in_band; uint band_mask; @@ -68,6 +83,11 @@ cascades; layout(set = 0, binding = 4) uniform texture3D occlusion_texture; layout(set = 0, binding = 3) uniform sampler linear_sampler; +layout(set = 0, binding = 5, std140) uniform SceneData { + mat4 projection[MAX_VIEWS]; +} +scene_data; + void main() { #ifdef MODE_PROBES probe_index = gl_InstanceIndex; @@ -85,7 +105,7 @@ void main() { vertex += (cascades.data[params.cascade].offset + vec3(probe_cell) * probe_cell_size) / vec3(1.0, params.y_mult, 1.0); - gl_Position = params.projection * vec4(vertex, 1.0); + gl_Position = scene_data.projection[ViewIndex] * vec4(vertex, 1.0); #endif #ifdef MODE_VISIBILITY @@ -144,7 +164,7 @@ void main() { visibility = dot(texelFetch(sampler3D(occlusion_texture, linear_sampler), tex_pos, 0), layer_axis[occlusion_layer]); - gl_Position = params.projection * vec4(vertex, 1.0); + gl_Position = scene_data.projection[ViewIndex] * vec4(vertex, 1.0); #endif } @@ -153,16 +173,32 @@ void main() { #version 450 +#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview) +#extension GL_EXT_multiview : enable +#endif + +#ifdef USE_MULTIVIEW +#ifdef has_VK_KHR_multiview +#define ViewIndex gl_ViewIndex +#else // has_VK_KHR_multiview +// !BAS! This needs to become an input once we implement our fallback! +#define ViewIndex 0 +#endif // has_VK_KHR_multiview +#else // USE_MULTIVIEW +// Set to zero, not supported in non stereo +#define ViewIndex 0 +#endif //USE_MULTIVIEW + #VERSION_DEFINES +#define MAX_VIEWS 2 + layout(location = 0) out vec4 frag_color; layout(set = 0, binding = 2) uniform texture2DArray lightprobe_texture; layout(set = 0, binding = 3) uniform sampler linear_sampler; layout(push_constant, std430) uniform Params { - mat4 projection; - uint band_power; uint sections_in_band; uint band_mask; diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl index b95fad650e..b95fad650e 100644 --- a/servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl index 9c03297f5c..9c03297f5c 100644 --- a/servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl index bce98f4054..bce98f4054 100644 --- a/servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl index 577c6d0cd0..577c6d0cd0 100644 --- a/servers/rendering/renderer_rd/shaders/voxel_gi.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl index fd7a2bf8ad..fd7a2bf8ad 100644 --- a/servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl index 47a611a543..47a611a543 100644 --- a/servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl index 92c4fc3d67..5947fc5351 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl @@ -96,6 +96,8 @@ layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms } material; #endif +float global_time; + #ifdef MODE_DUAL_PARABOLOID layout(location = 9) out float dp_clip; @@ -386,9 +388,12 @@ void main() { mat4 model_matrix = instances.data[instance_index].transform; #if defined(MOTION_VECTORS) + global_time = scene_data_block.prev_data.time; vertex_shader(instance_index, is_multimesh, scene_data_block.prev_data, instances.data[instance_index].prev_transform, prev_screen_position); + global_time = scene_data_block.data.time; vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position); #else + global_time = scene_data_block.data.time; vec4 screen_position; vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position); #endif @@ -486,6 +491,8 @@ layout(location = 10) in flat uint instance_index_interp; #define inv_projection_matrix scene_data.inv_projection_matrix #endif +#define global_time scene_data_block.data.time + #if defined(ENABLE_SSS) && defined(ENABLE_TRANSMITTANCE) //both required for transmittance to be enabled #define LIGHT_TRANSMITTANCE_USED @@ -634,7 +641,11 @@ void fragment_shader(in SceneData scene_data) { //lay out everything, whatever is unused is optimized away anyway vec3 vertex = vertex_interp; +#ifdef USE_MULTIVIEW + vec3 view = -normalize(vertex_interp - scene_data.eye_offset[ViewIndex].xyz); +#else vec3 view = -normalize(vertex_interp); +#endif vec3 albedo = vec3(1.0); vec3 backlight = vec3(0.0); vec4 transmittance_color = vec4(0.0, 0.0, 0.0, 1.0); @@ -1191,7 +1202,7 @@ void fragment_shader(in SceneData scene_data) { if (sc_use_forward_gi && bool(instances.data[instance_index].flags & INSTANCE_FLAGS_USE_VOXEL_GI)) { // process voxel_gi_instances uint index1 = instances.data[instance_index].gi_offset & 0xFFFF; - vec3 ref_vec = normalize(reflect(normalize(vertex), normal)); + vec3 ref_vec = normalize(reflect(-view, normal)); //find arbitrary tangent and bitangent, then build a matrix vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0); vec3 tangent = normalize(cross(v0, normal)); @@ -1227,12 +1238,20 @@ void fragment_shader(in SceneData scene_data) { if (scene_data.gi_upscale_for_msaa) { vec2 base_coord = screen_uv; vec2 closest_coord = base_coord; +#ifdef USE_MULTIVIEW + float closest_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(base_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0); +#else // USE_MULTIVIEW float closest_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), base_coord, 0.0).xyz * 2.0 - 1.0); +#endif // USE_MULTIVIEW for (int i = 0; i < 4; i++) { const vec2 neighbours[4] = vec2[](vec2(-1, 0), vec2(1, 0), vec2(0, -1), vec2(0, 1)); vec2 neighbour_coord = base_coord + neighbours[i] * scene_data.screen_pixel_size; +#ifdef USE_MULTIVIEW + float neighbour_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(neighbour_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0); +#else // USE_MULTIVIEW float neighbour_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), neighbour_coord, 0.0).xyz * 2.0 - 1.0); +#endif // USE_MULTIVIEW if (neighbour_ang > closest_ang) { closest_ang = neighbour_ang; closest_coord = neighbour_coord; @@ -1245,8 +1264,13 @@ void fragment_shader(in SceneData scene_data) { coord = screen_uv; } +#ifdef USE_MULTIVIEW + vec4 buffer_ambient = textureLod(sampler2DArray(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0); + vec4 buffer_reflection = textureLod(sampler2DArray(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0); +#else // USE_MULTIVIEW vec4 buffer_ambient = textureLod(sampler2D(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0); vec4 buffer_reflection = textureLod(sampler2D(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0); +#endif // USE_MULTIVIEW ambient_light = mix(ambient_light, buffer_ambient.rgb, buffer_ambient.a); specular_light = mix(specular_light, buffer_reflection.rgb, buffer_reflection.a); @@ -1309,7 +1333,7 @@ void fragment_shader(in SceneData scene_data) { #else vec3 bent_normal = normal; #endif - reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum); + reflection_process(reflection_index, view, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum); } } diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl index b700e21543..0c23de96c3 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl @@ -180,6 +180,7 @@ struct SceneData { // only used for multiview mat4 projection_matrix_view[MAX_VIEWS]; mat4 inv_projection_matrix_view[MAX_VIEWS]; + vec4 eye_offset[MAX_VIEWS]; vec2 viewport_size; vec2 screen_pixel_size; @@ -250,7 +251,7 @@ struct SceneData { bool pancake_shadows; vec2 taa_jitter; - uvec2 pad; + uvec2 pad2; }; layout(set = 1, binding = 0, std140) uniform SceneDataBlock { @@ -316,10 +317,16 @@ layout(r32ui, set = 1, binding = 12) uniform restrict uimage3D geom_facing_grid; layout(set = 1, binding = 9) uniform texture2D depth_buffer; layout(set = 1, binding = 10) uniform texture2D color_buffer; +#ifdef USE_MULTIVIEW +layout(set = 1, binding = 11) uniform texture2DArray normal_roughness_buffer; +layout(set = 1, binding = 13) uniform texture2DArray ambient_buffer; +layout(set = 1, binding = 14) uniform texture2DArray reflection_buffer; +#else // USE_MULTIVIEW layout(set = 1, binding = 11) uniform texture2D normal_roughness_buffer; -layout(set = 1, binding = 12) uniform texture2D ao_buffer; layout(set = 1, binding = 13) uniform texture2D ambient_buffer; layout(set = 1, binding = 14) uniform texture2D reflection_buffer; +#endif +layout(set = 1, binding = 12) uniform texture2D ao_buffer; layout(set = 1, binding = 15) uniform texture2DArray sdfgi_lightprobe_texture; layout(set = 1, binding = 16) uniform texture3D sdfgi_occlusion_cascades; 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 5a308bbd02..c92b29b14a 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl @@ -869,7 +869,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v diffuse_light, specular_light); } -void reflection_process(uint ref_index, vec3 vertex, vec3 normal, float roughness, vec3 ambient_light, vec3 specular_light, inout vec4 ambient_accum, inout vec4 reflection_accum) { +void reflection_process(uint ref_index, vec3 view, vec3 vertex, vec3 normal, float roughness, vec3 ambient_light, vec3 specular_light, inout vec4 ambient_accum, inout vec4 reflection_accum) { vec3 box_extents = reflections.data[ref_index].box_extents; vec3 local_pos = (reflections.data[ref_index].local_matrix * vec4(vertex, 1.0)).xyz; @@ -877,7 +877,7 @@ void reflection_process(uint ref_index, vec3 vertex, vec3 normal, float roughnes return; } - vec3 ref_vec = normalize(reflect(vertex, normal)); + vec3 ref_vec = normalize(reflect(-view, normal)); vec3 inner_pos = abs(local_pos / box_extents); float blend = max(inner_pos.x, max(inner_pos.y, inner_pos.z)); diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl index e15ebbfc91..26d0de46c2 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl @@ -114,9 +114,9 @@ invariant gl_Position; #GLOBALS -void main() { - SceneData scene_data = scene_data_block.data; +#define scene_data scene_data_block.data +void main() { vec4 instance_custom = vec4(0.0); #if defined(COLOR_USED) color_interp = color_attrib; @@ -576,17 +576,22 @@ vec4 fog_process(vec3 vertex) { #endif //!MODE_RENDER DEPTH +#define scene_data scene_data_block.data + void main() { #ifdef MODE_DUAL_PARABOLOID if (dp_clip > 0.0) discard; #endif - SceneData scene_data = scene_data_block.data; //lay out everything, whatever is unused is optimized away anyway vec3 vertex = vertex_interp; +#ifdef USE_MULTIVIEW + vec3 view = -normalize(vertex_interp - scene_data.eye_offset[ViewIndex].xyz); +#else vec3 view = -normalize(vertex_interp); +#endif vec3 albedo = vec3(1.0); vec3 backlight = vec3(0.0); vec4 transmittance_color = vec4(0.0); @@ -1051,7 +1056,7 @@ void main() { #else vec3 bent_normal = normal; #endif - reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum); + reflection_process(reflection_index, view, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum); } if (reflection_accum.a > 0.0) { diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl index dd14a15837..7413d8730a 100644 --- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl +++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl @@ -134,6 +134,7 @@ struct SceneData { // only used for multiview highp mat4 projection_matrix_view[MAX_VIEWS]; highp mat4 inv_projection_matrix_view[MAX_VIEWS]; + highp vec4 eye_offset[MAX_VIEWS]; highp vec2 viewport_size; highp vec2 screen_pixel_size; diff --git a/servers/rendering/renderer_rd/uniform_set_cache_rd.h b/servers/rendering/renderer_rd/uniform_set_cache_rd.h index e49cf4dafa..af22a48716 100644 --- a/servers/rendering/renderer_rd/uniform_set_cache_rd.h +++ b/servers/rendering/renderer_rd/uniform_set_cache_rd.h @@ -57,13 +57,13 @@ class UniformSetCacheRD : public Object { Cache *hash_table[HASH_TABLE_SIZE] = {}; static _FORCE_INLINE_ uint32_t _hash_uniform(const RD::Uniform &u, uint32_t h) { - h = hash_djb2_one_32(u.uniform_type, h); - h = hash_djb2_one_32(u.binding, h); + h = hash_murmur3_one_32(u.uniform_type, h); + h = hash_murmur3_one_32(u.binding, h); uint32_t rsize = u.get_id_count(); for (uint32_t j = 0; j < rsize; j++) { - h = hash_djb2_one_64(u.get_id(j).get_id(), h); + h = hash_murmur3_one_64(u.get_id(j).get_id(), h); } - return h; + return hash_fmix32(h); } static _FORCE_INLINE_ bool _compare_uniform(const RD::Uniform &a, const RD::Uniform &b) { @@ -154,8 +154,8 @@ class UniformSetCacheRD : public Object { public: template <typename... Args> RID get_cache(RID p_shader, uint32_t p_set, Args... args) { - uint32_t h = hash_djb2_one_64(p_shader.get_id()); - h = hash_djb2_one_32(p_set, h); + uint32_t h = hash_murmur3_one_64(p_shader.get_id()); + h = hash_murmur3_one_32(p_set, h); h = _hash_args(h, args...); uint32_t table_idx = h % HASH_TABLE_SIZE; @@ -180,12 +180,14 @@ public: template <typename... Args> RID get_cache_vec(RID p_shader, uint32_t p_set, const Vector<RD::Uniform> &p_uniforms) { - uint32_t h = hash_djb2_one_64(p_shader.get_id()); - h = hash_djb2_one_32(p_set, h); + uint32_t h = hash_murmur3_one_64(p_shader.get_id()); + h = hash_murmur3_one_32(p_set, h); for (int i = 0; i < p_uniforms.size(); i++) { h = _hash_uniform(p_uniforms[i], h); } + h = hash_fmix32(h); + uint32_t table_idx = h % HASH_TABLE_SIZE; { const Cache *c = hash_table[table_idx]; diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 6f427272b5..c97ca3de5e 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -1894,7 +1894,7 @@ void RendererSceneCull::_update_instance_aabb(Instance *p_instance) { } break; case RenderingServer::INSTANCE_VOXEL_GI: { - new_aabb = RSG::storage->voxel_gi_get_bounds(p_instance->base); + new_aabb = RSG::gi->voxel_gi_get_bounds(p_instance->base); } break; case RenderingServer::INSTANCE_LIGHTMAP: { diff --git a/servers/rendering/renderer_storage.h b/servers/rendering/renderer_storage.h index bb4acab582..859950673e 100644 --- a/servers/rendering/renderer_storage.h +++ b/servers/rendering/renderer_storage.h @@ -122,48 +122,6 @@ public: virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) = 0; - /* VOXEL GI API */ - - virtual RID voxel_gi_allocate() = 0; - virtual void voxel_gi_initialize(RID p_rid) = 0; - - virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) = 0; - - virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const = 0; - virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const = 0; - virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const = 0; - virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const = 0; - virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const = 0; - - virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const = 0; - virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) = 0; - virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) = 0; - virtual float voxel_gi_get_propagation(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) = 0; - virtual float voxel_gi_get_energy(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) = 0; - virtual float voxel_gi_get_bias(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) = 0; - virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) = 0; - virtual bool voxel_gi_is_interior(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) = 0; - virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const = 0; - - virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) = 0; - virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const = 0; - - virtual uint32_t voxel_gi_get_version(RID p_probe) = 0; - /* FOG VOLUMES */ virtual RID fog_volume_allocate() = 0; diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp index 2e0c4e0f79..ab9ee2067f 100644 --- a/servers/rendering/renderer_viewport.cpp +++ b/servers/rendering/renderer_viewport.cpp @@ -1193,6 +1193,20 @@ void RendererViewport::viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::V RSG::texture_storage->render_target_set_sdf_size_and_scale(viewport->render_target, p_size, p_scale); } +RID RendererViewport::viewport_find_from_screen_attachment(DisplayServer::WindowID p_id) const { + RID *rids = nullptr; + uint32_t rid_count = viewport_owner.get_rid_count(); + rids = (RID *)alloca(sizeof(RID *) * rid_count); + viewport_owner.fill_owned_buffer(rids); + for (uint32_t i = 0; i < rid_count; i++) { + Viewport *viewport = viewport_owner.get_or_null(rids[i]); + if (viewport->viewport_to_screen == p_id) { + return rids[i]; + } + } + return RID(); +} + bool RendererViewport::free(RID p_rid) { if (viewport_owner.owns(p_rid)) { Viewport *viewport = viewport_owner.get_or_null(p_rid); diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h index 18385d1613..acab8063d1 100644 --- a/servers/rendering/renderer_viewport.h +++ b/servers/rendering/renderer_viewport.h @@ -282,6 +282,8 @@ public: void viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::ViewportSDFOversize p_over_size, RS::ViewportSDFScale p_scale); + virtual RID viewport_find_from_screen_attachment(DisplayServer::WindowID p_id = DisplayServer::MAIN_WINDOW_ID) const; + void handle_timestamp(String p_timestamp, uint64_t p_cpu_time, uint64_t p_gpu_time); void set_default_clear_color(const Color &p_color); diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp index 718f20f80a..7e035bae80 100644 --- a/servers/rendering/rendering_server_default.cpp +++ b/servers/rendering/rendering_server_default.cpp @@ -333,13 +333,10 @@ void RenderingServerDefault::_thread_exit() { } void RenderingServerDefault::_thread_draw(bool p_swap_buffers, double frame_step) { - if (!draw_pending.decrement()) { - _draw(p_swap_buffers, frame_step); - } + _draw(p_swap_buffers, frame_step); } void RenderingServerDefault::_thread_flush() { - draw_pending.decrement(); } void RenderingServerDefault::_thread_callback(void *_instance) { @@ -370,7 +367,6 @@ void RenderingServerDefault::_thread_loop() { void RenderingServerDefault::sync() { if (create_thread) { - draw_pending.increment(); command_queue.push_and_sync(this, &RenderingServerDefault::_thread_flush); } else { command_queue.flush_all(); //flush all pending from other threads @@ -379,7 +375,6 @@ void RenderingServerDefault::sync() { void RenderingServerDefault::draw(bool p_swap_buffers, double frame_step) { if (create_thread) { - draw_pending.increment(); command_queue.push(this, &RenderingServerDefault::_thread_draw, p_swap_buffers, frame_step); } else { _draw(p_swap_buffers, frame_step); @@ -409,6 +404,7 @@ RenderingServerDefault::RenderingServerDefault(bool p_create_thread) : RSG::mesh_storage = RSG::rasterizer->get_mesh_storage(); RSG::particles_storage = RSG::rasterizer->get_particles_storage(); RSG::texture_storage = RSG::rasterizer->get_texture_storage(); + RSG::gi = RSG::rasterizer->get_gi(); RSG::storage = RSG::rasterizer->get_storage(); RSG::canvas_render = RSG::rasterizer->get_canvas(); sr->set_scene_render(RSG::rasterizer->get_scene()); diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h index 6008f2b00e..aef89619db 100644 --- a/servers/rendering/rendering_server_default.h +++ b/servers/rendering/rendering_server_default.h @@ -84,7 +84,6 @@ class RenderingServerDefault : public RenderingServer { SafeFlag draw_thread_up; bool create_thread; - SafeNumeric<uint64_t> draw_pending; void _thread_draw(bool p_swap_buffers, double frame_step); void _thread_flush(); @@ -436,8 +435,8 @@ public: #undef ServerName #undef server_name -#define ServerName RendererStorage -#define server_name RSG::storage +#define ServerName RendererGI +#define server_name RSG::gi FUNCRIDSPLIT(voxel_gi) @@ -629,6 +628,7 @@ public: FUNC2(viewport_set_measure_render_time, RID, bool) FUNC1RC(double, viewport_get_measured_render_time_cpu, RID) FUNC1RC(double, viewport_get_measured_render_time_gpu, RID) + FUNC1RC(RID, viewport_find_from_screen_attachment, DisplayServer::WindowID) FUNC2(call_set_vsync_mode, DisplayServer::VSyncMode, DisplayServer::WindowID) diff --git a/servers/rendering/rendering_server_globals.cpp b/servers/rendering/rendering_server_globals.cpp index 4d24dbf3b4..1c2a275265 100644 --- a/servers/rendering/rendering_server_globals.cpp +++ b/servers/rendering/rendering_server_globals.cpp @@ -37,6 +37,7 @@ RendererMaterialStorage *RenderingServerGlobals::material_storage = nullptr; RendererMeshStorage *RenderingServerGlobals::mesh_storage = nullptr; RendererParticlesStorage *RenderingServerGlobals::particles_storage = nullptr; RendererTextureStorage *RenderingServerGlobals::texture_storage = nullptr; +RendererGI *RenderingServerGlobals::gi = nullptr; RendererStorage *RenderingServerGlobals::storage = nullptr; RendererCanvasRender *RenderingServerGlobals::canvas_render = nullptr; RendererCompositor *RenderingServerGlobals::rasterizer = nullptr; diff --git a/servers/rendering/rendering_server_globals.h b/servers/rendering/rendering_server_globals.h index ce11fae9e8..91712f2a51 100644 --- a/servers/rendering/rendering_server_globals.h +++ b/servers/rendering/rendering_server_globals.h @@ -31,6 +31,7 @@ #ifndef RENDERING_SERVER_GLOBALS_H #define RENDERING_SERVER_GLOBALS_H +#include "servers/rendering/environment/renderer_gi.h" #include "servers/rendering/renderer_canvas_cull.h" #include "servers/rendering/renderer_canvas_render.h" #include "servers/rendering/renderer_scene.h" @@ -53,6 +54,7 @@ public: static RendererMeshStorage *mesh_storage; static RendererParticlesStorage *particles_storage; static RendererTextureStorage *texture_storage; + static RendererGI *gi; static RendererStorage *storage; static RendererCanvasRender *canvas_render; static RendererCompositor *rasterizer; diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index f9469fcae0..ad9b51ac0c 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -1858,21 +1858,21 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "ivec4", TYPE_IVEC4, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec4", TYPE_IVEC4, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "mat2", TYPE_MAT2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "mat3", TYPE_MAT3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, @@ -1886,22 +1886,22 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "int", TYPE_INT, { TYPE_BOOL, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "int", TYPE_INT, { TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "int", TYPE_INT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "int", TYPE_INT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "int", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "float", TYPE_FLOAT, { TYPE_BOOL, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "float", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "float", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "float", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "float", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "uint", TYPE_UINT, { TYPE_BOOL, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uint", TYPE_UINT, { TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "uint", TYPE_UINT, { TYPE_BOOL, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bool", TYPE_BOOL, { TYPE_BOOL, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bool", TYPE_BOOL, { TYPE_INT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "bool", TYPE_BOOL, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "bool", TYPE_BOOL, { TYPE_UINT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bool", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, // Conversion vectors. @@ -1913,57 +1913,57 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "vec2", TYPE_VEC2, { TYPE_BVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec2", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "vec2", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "vec2", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "uvec2", TYPE_UVEC2, { TYPE_BVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec2", TYPE_UVEC2, { TYPE_IVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec2", TYPE_UVEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec2", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "uvec2", TYPE_UVEC2, { TYPE_BVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_IVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec2", TYPE_BVEC2, { TYPE_BVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec2", TYPE_BVEC2, { TYPE_IVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "bvec2", TYPE_BVEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "bvec2", TYPE_BVEC2, { TYPE_UVEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec2", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec3", TYPE_IVEC3, { TYPE_BVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec3", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "ivec3", TYPE_IVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "ivec3", TYPE_IVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec3", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec3", TYPE_VEC3, { TYPE_BVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec3", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "vec3", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "vec3", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec3", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "uvec3", TYPE_UVEC3, { TYPE_BVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_IVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec3", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "uvec3", TYPE_UVEC3, { TYPE_BVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_IVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec3", TYPE_BVEC3, { TYPE_BVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec3", TYPE_BVEC3, { TYPE_IVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "bvec3", TYPE_BVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "bvec3", TYPE_BVEC3, { TYPE_UVEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec3", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec4", TYPE_IVEC4, { TYPE_BVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec4", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "ivec4", TYPE_IVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "ivec4", TYPE_IVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "ivec4", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec4", TYPE_VEC4, { TYPE_BVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec4", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "vec4", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "vec4", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "vec4", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "uvec4", TYPE_UVEC4, { TYPE_BVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_IVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, - { "uvec4", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "uvec4", TYPE_UVEC4, { TYPE_BVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_IVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec4", TYPE_BVEC4, { TYPE_BVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec4", TYPE_BVEC4, { TYPE_IVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, - { "bvec4", TYPE_BVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, true }, + { "bvec4", TYPE_BVEC4, { TYPE_UVEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, { "bvec4", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, { "" }, TAG_GLOBAL, false }, // Conversion between matrixes. @@ -2207,10 +2207,10 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { // modf - { "modf", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, true }, - { "modf", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, true }, - { "modf", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, true }, - { "modf", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, true }, + { "modf", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, false }, + { "modf", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, false }, + { "modf", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, false }, + { "modf", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, { "x", "i" }, TAG_GLOBAL, false }, // min @@ -2230,13 +2230,13 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "min", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "min", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // max @@ -2256,13 +2256,13 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "max", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "max", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // clamp @@ -2282,13 +2282,13 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "clamp", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_INT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, { "clamp", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_INT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, - { "clamp", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, - { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, true }, + { "clamp", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_UINT, TYPE_VOID }, { "x", "minVal", "maxVal" }, TAG_GLOBAL, false }, // mix @@ -2339,31 +2339,31 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { // floatBitsToInt - { "floatBitsToInt", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToInt", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToInt", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToInt", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, + { "floatBitsToInt", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToInt", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToInt", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToInt", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, // floatBitsToUint - { "floatBitsToUint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToUint", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToUint", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "floatBitsToUint", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, + { "floatBitsToUint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToUint", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToUint", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "floatBitsToUint", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, // intBitsToFloat - { "intBitsToFloat", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "intBitsToFloat", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "intBitsToFloat", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "intBitsToFloat", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, + { "intBitsToFloat", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "intBitsToFloat", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "intBitsToFloat", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "intBitsToFloat", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, // uintBitsToFloat - { "uintBitsToFloat", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "uintBitsToFloat", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "uintBitsToFloat", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, - { "uintBitsToFloat", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, true }, + { "uintBitsToFloat", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "uintBitsToFloat", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "uintBitsToFloat", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, + { "uintBitsToFloat", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, { "x" }, TAG_GLOBAL, false }, // Built-ins - geometric functions. // length @@ -2452,9 +2452,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "lessThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "lessThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "lessThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "lessThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "lessThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "lessThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // greaterThan @@ -2466,9 +2466,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "greaterThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "greaterThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "greaterThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "greaterThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "greaterThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "greaterThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // lessThanEqual @@ -2480,9 +2480,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "lessThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "lessThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "lessThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "lessThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "lessThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "lessThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // greaterThanEqual @@ -2494,9 +2494,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "greaterThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "greaterThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "greaterThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "greaterThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "greaterThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "greaterThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, // equal @@ -2508,9 +2508,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "equal", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "equal", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "equal", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "equal", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "equal", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "equal", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "equal", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "equal", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, @@ -2526,9 +2526,9 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { { "notEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "notEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, - { "notEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "notEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, - { "notEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, true }, + { "notEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "notEqual", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, { "notEqual", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, { "a", "b" }, TAG_GLOBAL, false }, @@ -2555,38 +2555,38 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { // Built-ins: texture functions. // textureSize - { "textureSize", TYPE_IVEC2, { TYPE_SAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC2, { TYPE_ISAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC2, { TYPE_USAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBE, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, - { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBEARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC2, { TYPE_SAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC2, { TYPE_ISAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC2, { TYPE_USAMPLER2D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER3D, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBE, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, + { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBEARRAY, TYPE_INT, TYPE_VOID }, { "sampler", "lod" }, TAG_GLOBAL, false }, // texture { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, @@ -2594,119 +2594,119 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { // textureProj - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "bias" }, TAG_GLOBAL, false }, // textureLod { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, { "textureLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, { "textureLod", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, { "textureLod", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, // texelFetch - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, // textureProjLod - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, { "sampler", "coords", "lod" }, TAG_GLOBAL, false }, // textureGrad - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBEARRAY, TYPE_VEC4, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords", "dPdx", "dPdy" }, TAG_GLOBAL, false }, // textureGather - { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, true }, - { "textureGather", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, true }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VOID }, { "sampler", "coords" }, TAG_GLOBAL, false }, + { "textureGather", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_INT, TYPE_VOID }, { "sampler", "coords", "comp" }, TAG_GLOBAL, false }, // dFdx - { "dFdx", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdx", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdx", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdx", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, + { "dFdx", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdx", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdx", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdx", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, // dFdy - { "dFdy", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdy", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdy", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "dFdy", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, + { "dFdy", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdy", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdy", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "dFdy", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, // fwidth - { "fwidth", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "fwidth", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "fwidth", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, - { "fwidth", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, true }, + { "fwidth", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "fwidth", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "fwidth", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, + { "fwidth", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, { "p" }, TAG_GLOBAL, false }, // Sub-functions. // array - { "length", TYPE_INT, { TYPE_VOID }, { "" }, TAG_ARRAY, true }, + { "length", TYPE_INT, { TYPE_VOID }, { "" }, TAG_ARRAY, false }, // Modern functions. // fma @@ -2718,17 +2718,17 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { // Packing/Unpacking functions. - { "packHalf2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "packUnorm2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "packSnorm2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "packUnorm4x8", TYPE_UINT, { TYPE_VEC4, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "packSnorm4x8", TYPE_UINT, { TYPE_VEC4, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, + { "packHalf2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "packUnorm2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "packSnorm2x16", TYPE_UINT, { TYPE_VEC2, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "packUnorm4x8", TYPE_UINT, { TYPE_VEC4, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "packSnorm4x8", TYPE_UINT, { TYPE_VEC4, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, - { "unpackHalf2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "unpackUnorm2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "unpackSnorm2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "unpackUnorm4x8", TYPE_VEC4, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, - { "unpackSnorm4x8", TYPE_VEC4, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, true }, + { "unpackHalf2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "unpackUnorm2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "unpackSnorm2x16", TYPE_VEC2, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "unpackUnorm4x8", TYPE_VEC4, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, + { "unpackSnorm4x8", TYPE_VEC4, { TYPE_UINT, TYPE_VOID }, { "v" }, TAG_GLOBAL, false }, // bitfieldExtract @@ -6653,10 +6653,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun DataType type = is_struct ? TYPE_STRUCT : get_token_datatype(tk.type); - if (_validate_datatype(type) != OK) { - return ERR_PARSE_ERROR; - } - if (precision != PRECISION_DEFAULT && _validate_precision(type, precision) != OK) { return ERR_PARSE_ERROR; } @@ -6753,11 +6749,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun tk = _get_token(); if (tk.type == TK_BRACKET_OPEN) { - if (RenderingServer::get_singleton()->is_low_end() && is_const) { - _set_error(RTR("Local const arrays are only supported on high-end platforms.")); - return ERR_PARSE_ERROR; - } - Error error = _parse_array_size(p_block, p_function_info, false, &decl.size_expression, &var.array_size, &unknown_size); if (error != OK) { return error; @@ -6777,11 +6768,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun bool full_def = false; if (tk.type == TK_OP_ASSIGN) { - if (RenderingServer::get_singleton()->is_low_end()) { - _set_error(RTR("Array initialization is only supported on high-end platforms.")); - return ERR_PARSE_ERROR; - } - TkPos prev_pos = _get_tkpos(); tk = _get_token(); @@ -7088,11 +7074,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun _set_tkpos(pos); //rollback } } else if (tk.type == TK_CF_SWITCH) { - if (RenderingServer::get_singleton()->is_low_end()) { - _set_error(vformat(RTR("The '%s' operator is only supported on high-end platforms."), "switch")); - return ERR_PARSE_ERROR; - } - // switch() {} tk = _get_token(); if (tk.type != TK_PARENTHESIS_OPEN) { @@ -7696,35 +7677,6 @@ Error ShaderLanguage::_validate_precision(DataType p_type, DataPrecision p_preci return OK; } -Error ShaderLanguage::_validate_datatype(DataType p_type) { - if (RenderingServer::get_singleton()->is_low_end()) { - bool invalid_type = false; - - switch (p_type) { - case TYPE_UINT: - case TYPE_UVEC2: - case TYPE_UVEC3: - case TYPE_UVEC4: - case TYPE_ISAMPLER2D: - case TYPE_USAMPLER2D: - case TYPE_ISAMPLER3D: - case TYPE_USAMPLER3D: - case TYPE_USAMPLER2DARRAY: - case TYPE_ISAMPLER2DARRAY: - invalid_type = true; - break; - default: - break; - } - - if (invalid_type) { - _set_error(vformat(RTR("The \"%s\" type is only supported on high-end platforms."), get_datatype_name(p_type))); - return ERR_UNAVAILABLE; - } - } - return OK; -} - Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_functions, const Vector<ModeInfo> &p_render_modes, const HashSet<String> &p_shader_types) { Token tk = _get_token(); TkPos prev_pos; @@ -8265,9 +8217,6 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f ++texture_binding; } uniform.order = -1; - if (_validate_datatype(type) != OK) { - return ERR_PARSE_ERROR; - } } else { if (uniform_scope == ShaderNode::Uniform::SCOPE_INSTANCE && (type == TYPE_MAT2 || type == TYPE_MAT3 || type == TYPE_MAT4)) { _set_error(vformat(RTR("The '%s' qualifier is not supported for matrix types."), "SCOPE_INSTANCE")); @@ -8743,10 +8692,6 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f bool fixed_array_size = false; if (tk.type == TK_BRACKET_OPEN) { - if (is_constant && RenderingServer::get_singleton()->is_low_end()) { - _set_error(RTR("Global constant arrays are only supported on high-end platforms.")); - return ERR_PARSE_ERROR; - } Error error = _parse_array_size(nullptr, constants, !is_constant, nullptr, &array_size, &unknown_size); if (error != OK) { return error; @@ -8791,10 +8736,6 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f constant.array_size = array_size; if (tk.type == TK_BRACKET_OPEN) { - if (RenderingServer::get_singleton()->is_low_end()) { - _set_error(RTR("Global const arrays are only supported on high-end platforms.")); - return ERR_PARSE_ERROR; - } Error error = _parse_array_size(nullptr, constants, false, nullptr, &constant.array_size, &unknown_size); if (error != OK) { return error; @@ -9262,9 +9203,6 @@ Error ShaderLanguage::_parse_shader(const HashMap<StringName, FunctionInfo> &p_f param_type = TYPE_STRUCT; } else { param_type = get_token_datatype(tk.type); - if (_validate_datatype(param_type) != OK) { - return ERR_PARSE_ERROR; - } if (param_type == TYPE_VOID) { _set_error(RTR("Void type not allowed as argument.")); return ERR_PARSE_ERROR; diff --git a/servers/rendering/shader_language.h b/servers/rendering/shader_language.h index a4226a9764..2b147fbeb1 100644 --- a/servers/rendering/shader_language.h +++ b/servers/rendering/shader_language.h @@ -1049,7 +1049,6 @@ private: static bool is_const_suffix_lut_initialized; Error _validate_precision(DataType p_type, DataPrecision p_precision); - Error _validate_datatype(DataType p_type); bool _compare_datatypes(DataType p_datatype_a, String p_datatype_name_a, int p_array_size_a, DataType p_datatype_b, String p_datatype_name_b, int p_array_size_b); bool _compare_datatypes_in_nodes(Node *a, Node *b); diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp index 26ab8b659e..9b407043fc 100644 --- a/servers/rendering_server.cpp +++ b/servers/rendering_server.cpp @@ -2934,10 +2934,10 @@ void RenderingServer::init() { ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/amount", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/amount", PROPERTY_HINT_RANGE, "0.01,4.0,0.01")); ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/screen_space_roughness_limiter/limit", PropertyInfo(Variant::FLOAT, "rendering/anti_aliasing/screen_space_roughness_limiter/limit", PROPERTY_HINT_RANGE, "0.01,1.0,0.01")); - GLOBAL_DEF_RST("rendering/scaling_3d/mode", 0); - GLOBAL_DEF_RST("rendering/scaling_3d/scale", 1.0); - GLOBAL_DEF_RST("rendering/scaling_3d/fsr_sharpness", 0.2f); - GLOBAL_DEF_RST("rendering/scaling_3d/fsr_mipmap_bias", 0.0f); + GLOBAL_DEF("rendering/scaling_3d/mode", 0); + GLOBAL_DEF("rendering/scaling_3d/scale", 1.0); + GLOBAL_DEF("rendering/scaling_3d/fsr_sharpness", 0.2f); + GLOBAL_DEF("rendering/scaling_3d/fsr_mipmap_bias", 0.0f); ProjectSettings::get_singleton()->set_custom_property_info("rendering/scaling_3d/mode", PropertyInfo(Variant::INT, "rendering/scaling_3d/mode", diff --git a/servers/rendering_server.h b/servers/rendering_server.h index 39484e532a..ccef95f5f2 100644 --- a/servers/rendering_server.h +++ b/servers/rendering_server.h @@ -944,6 +944,8 @@ public: virtual double viewport_get_measured_render_time_cpu(RID p_viewport) const = 0; virtual double viewport_get_measured_render_time_gpu(RID p_viewport) const = 0; + virtual RID viewport_find_from_screen_attachment(DisplayServer::WindowID p_id = DisplayServer::MAIN_WINDOW_ID) const = 0; + /* SKY API */ enum SkyMode { diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp index 005cb68302..e9a558ac5f 100644 --- a/servers/text/text_server_extension.cpp +++ b/servers/text/text_server_extension.cpp @@ -55,6 +55,11 @@ void TextServerExtension::_bind_methods() { GDVIRTUAL_BIND(font_set_data, "font_rid", "data"); GDVIRTUAL_BIND(font_set_data_ptr, "font_rid", "data_ptr", "data_size"); + GDVIRTUAL_BIND(font_set_face_index, "font_rid", "face_index"); + GDVIRTUAL_BIND(font_get_face_index, "font_rid"); + + GDVIRTUAL_BIND(font_get_face_count, "font_rid"); + GDVIRTUAL_BIND(font_set_style, "font_rid", "style"); GDVIRTUAL_BIND(font_get_style, "font_rid"); @@ -413,6 +418,26 @@ void TextServerExtension::font_set_data_ptr(const RID &p_font_rid, const uint8_t GDVIRTUAL_CALL(font_set_data_ptr, p_font_rid, p_data_ptr, p_data_size); } +void TextServerExtension::font_set_face_index(const RID &p_font_rid, int64_t p_index) { + GDVIRTUAL_CALL(font_set_face_index, p_font_rid, p_index); +} + +int64_t TextServerExtension::font_get_face_index(const RID &p_font_rid) const { + int64_t ret; + if (GDVIRTUAL_CALL(font_get_face_index, p_font_rid, ret)) { + return ret; + } + return 0; +} + +int64_t TextServerExtension::font_get_face_count(const RID &p_font_rid) const { + int64_t ret; + if (GDVIRTUAL_CALL(font_get_face_count, p_font_rid, ret)) { + return ret; + } + return 0; +} + void TextServerExtension::font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) { GDVIRTUAL_CALL(font_set_style, p_font_rid, p_style); } diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h index 7b7fc61ed7..9ca0939247 100644 --- a/servers/text/text_server_extension.h +++ b/servers/text/text_server_extension.h @@ -84,6 +84,14 @@ public: GDVIRTUAL2(font_set_data, RID, const PackedByteArray &); GDVIRTUAL3(font_set_data_ptr, RID, GDNativeConstPtr<const uint8_t>, int64_t); + virtual void font_set_face_index(const RID &p_font_rid, int64_t p_index) override; + virtual int64_t font_get_face_index(const RID &p_font_rid) const override; + GDVIRTUAL2(font_set_face_index, RID, int64_t); + GDVIRTUAL1RC(int64_t, font_get_face_index, RID); + + virtual int64_t font_get_face_count(const RID &p_font_rid) const override; + GDVIRTUAL1RC(int64_t, font_get_face_count, RID); + virtual void font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) override; virtual int64_t /*FontStyle*/ font_get_style(const RID &p_font_rid) const override; GDVIRTUAL2(font_set_style, RID, int64_t); diff --git a/servers/text_server.cpp b/servers/text_server.cpp index 20e62037e6..fe5ade88a1 100644 --- a/servers/text_server.cpp +++ b/servers/text_server.cpp @@ -208,6 +208,11 @@ void TextServer::_bind_methods() { ClassDB::bind_method(D_METHOD("font_set_data", "font_rid", "data"), &TextServer::font_set_data); + ClassDB::bind_method(D_METHOD("font_set_face_index", "font_rid", "face_index"), &TextServer::font_set_face_index); + ClassDB::bind_method(D_METHOD("font_get_face_index", "font_rid"), &TextServer::font_get_face_index); + + ClassDB::bind_method(D_METHOD("font_get_face_count", "font_rid"), &TextServer::font_get_face_count); + ClassDB::bind_method(D_METHOD("font_set_style", "font_rid", "style"), &TextServer::font_set_style); ClassDB::bind_method(D_METHOD("font_get_style", "font_rid"), &TextServer::font_get_style); @@ -408,7 +413,7 @@ void TextServer::_bind_methods() { ClassDB::bind_method(D_METHOD("shaped_text_get_ellipsis_glyphs", "shaped"), &TextServer::_shaped_text_get_ellipsis_glyphs_wrapper); ClassDB::bind_method(D_METHOD("shaped_text_get_ellipsis_glyph_count", "shaped"), &TextServer::shaped_text_get_ellipsis_glyph_count); - ClassDB::bind_method(D_METHOD("shaped_text_overrun_trim_to_width", "shaped", "width", "overrun_trim_flags"), &TextServer::shaped_text_overrun_trim_to_width, DEFVAL(0), DEFVAL(OVERRUN_NO_TRIMMING)); + ClassDB::bind_method(D_METHOD("shaped_text_overrun_trim_to_width", "shaped", "width", "overrun_trim_flags"), &TextServer::shaped_text_overrun_trim_to_width, DEFVAL(0), DEFVAL(OVERRUN_NO_TRIM)); ClassDB::bind_method(D_METHOD("shaped_text_get_objects", "shaped"), &TextServer::shaped_text_get_objects); ClassDB::bind_method(D_METHOD("shaped_text_get_object_rect", "shaped", "key"), &TextServer::shaped_text_get_object_rect); @@ -465,6 +470,12 @@ void TextServer::_bind_methods() { BIND_ENUM_CONSTANT(JUSTIFICATION_AFTER_LAST_TAB); BIND_ENUM_CONSTANT(JUSTIFICATION_CONSTRAIN_ELLIPSIS); + /* AutowrapMode */ + BIND_ENUM_CONSTANT(AUTOWRAP_OFF); + BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY); + BIND_ENUM_CONSTANT(AUTOWRAP_WORD); + BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART); + /* LineBreakFlag */ BIND_ENUM_CONSTANT(BREAK_NONE); BIND_ENUM_CONSTANT(BREAK_MANDATORY); @@ -472,8 +483,22 @@ void TextServer::_bind_methods() { BIND_ENUM_CONSTANT(BREAK_GRAPHEME_BOUND); BIND_ENUM_CONSTANT(BREAK_WORD_BOUND_ADAPTIVE); - /* TextOverrunFlag */ + /* VisibleCharactersBehavior */ + BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING); + BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING); + BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO); + BIND_ENUM_CONSTANT(VC_GLYPHS_LTR); + BIND_ENUM_CONSTANT(VC_GLYPHS_RTL); + + /* OverrunBehavior */ BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING); + BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR); + BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD); + BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS); + BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS); + + /* TextOverrunFlag */ + BIND_ENUM_CONSTANT(OVERRUN_NO_TRIM); BIND_ENUM_CONSTANT(OVERRUN_TRIM); BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ONLY); BIND_ENUM_CONSTANT(OVERRUN_ADD_ELLIPSIS); diff --git a/servers/text_server.h b/servers/text_server.h index f96146a549..6339dde0ea 100644 --- a/servers/text_server.h +++ b/servers/text_server.h @@ -64,6 +64,21 @@ public: JUSTIFICATION_CONSTRAIN_ELLIPSIS = 1 << 4, }; + enum VisibleCharactersBehavior { + VC_CHARS_BEFORE_SHAPING, + VC_CHARS_AFTER_SHAPING, + VC_GLYPHS_AUTO, + VC_GLYPHS_LTR, + VC_GLYPHS_RTL, + }; + + enum AutowrapMode { + AUTOWRAP_OFF, + AUTOWRAP_ARBITRARY, + AUTOWRAP_WORD, + AUTOWRAP_WORD_SMART + }; + enum LineBreakFlag { // LineBreakFlag can be passed in the same value as the JustificationFlag, do not use the same values. BREAK_NONE = 0, BREAK_MANDATORY = 1 << 5, @@ -72,8 +87,16 @@ public: BREAK_WORD_BOUND_ADAPTIVE = 1 << 6 | 1 << 8, }; + enum OverrunBehavior { + OVERRUN_NO_TRIMMING, + OVERRUN_TRIM_CHAR, + OVERRUN_TRIM_WORD, + OVERRUN_TRIM_ELLIPSIS, + OVERRUN_TRIM_WORD_ELLIPSIS, + }; + enum TextOverrunFlag { - OVERRUN_NO_TRIMMING = 0, + OVERRUN_NO_TRIM = 0, OVERRUN_TRIM = 1 << 0, OVERRUN_TRIM_WORD_ONLY = 1 << 1, OVERRUN_ADD_ELLIPSIS = 1 << 2, @@ -189,6 +212,11 @@ public: virtual void font_set_data(const RID &p_font_rid, const PackedByteArray &p_data) = 0; virtual void font_set_data_ptr(const RID &p_font_rid, const uint8_t *p_data_ptr, int64_t p_data_size) = 0; + virtual void font_set_face_index(const RID &p_font_rid, int64_t p_index) = 0; + virtual int64_t font_get_face_index(const RID &p_font_rid) const = 0; + + virtual int64_t font_get_face_count(const RID &p_font_rid) const = 0; + virtual void font_set_style(const RID &p_font_rid, int64_t /*FontStyle*/ p_style) = 0; virtual int64_t /*FontStyle*/ font_get_style(const RID &p_font_rid) const = 0; @@ -517,6 +545,9 @@ public: #define TS TextServerManager::get_singleton()->get_primary_interface() +VARIANT_ENUM_CAST(TextServer::VisibleCharactersBehavior); +VARIANT_ENUM_CAST(TextServer::AutowrapMode); +VARIANT_ENUM_CAST(TextServer::OverrunBehavior); VARIANT_ENUM_CAST(TextServer::Direction); VARIANT_ENUM_CAST(TextServer::Orientation); VARIANT_ENUM_CAST(TextServer::JustificationFlag); diff --git a/tests/core/math/test_astar.h b/tests/core/math/test_astar.h index 1306d3c20e..9f5e98ef94 100644 --- a/tests/core/math/test_astar.h +++ b/tests/core/math/test_astar.h @@ -58,7 +58,7 @@ public: } // Disable heuristic completely. - real_t _compute_cost(int p_from, int p_to) { + real_t _compute_cost(int64_t p_from, int64_t p_to) { if (p_from == A && p_to == C) { return 1000; } @@ -68,7 +68,7 @@ public: TEST_CASE("[AStar3D] ABC path") { ABCX abcx; - Vector<int> path = abcx.get_id_path(ABCX::A, ABCX::C); + Vector<int64_t> path = abcx.get_id_path(ABCX::A, ABCX::C); REQUIRE(path.size() == 3); CHECK(path[0] == ABCX::A); CHECK(path[1] == ABCX::B); @@ -77,7 +77,7 @@ TEST_CASE("[AStar3D] ABC path") { TEST_CASE("[AStar3D] ABCX path") { ABCX abcx; - Vector<int> path = abcx.get_id_path(ABCX::X, ABCX::C); + Vector<int64_t> path = abcx.get_id_path(ABCX::X, ABCX::C); REQUIRE(path.size() == 4); CHECK(path[0] == ABCX::X); CHECK(path[1] == ABCX::A); @@ -318,7 +318,7 @@ TEST_CASE("[Stress][AStar3D] Find paths") { for (int u = 0; u < N; u++) { for (int v = 0; v < N; v++) { if (u != v) { - Vector<int> route = a.get_id_path(u, v); + Vector<int64_t> route = a.get_id_path(u, v); if (!Math::is_inf(d[u][v])) { // Reachable. if (route.size() == 0) { diff --git a/tests/core/object/test_class_db.h b/tests/core/object/test_class_db.h index 8aaca69d13..7ea9e16ff1 100644 --- a/tests/core/object/test_class_db.h +++ b/tests/core/object/test_class_db.h @@ -46,7 +46,7 @@ struct TypeReference { struct ConstantData { String name; - int value = 0; + int64_t value = 0; }; struct EnumData { @@ -743,7 +743,7 @@ void add_exposed_classes(Context &r_context) { TEST_FAIL_COND(String(constant_name).find("::") != -1, "Enum constant contains '::', check bindings to remove the scope: '", String(class_name), ".", String(enum_.name), ".", String(constant_name), "'."); - int *value = class_info->constant_map.getptr(constant_name); + int64_t *value = class_info->constant_map.getptr(constant_name); TEST_FAIL_COND(!value, "Missing enum constant value: '", String(class_name), ".", String(enum_.name), ".", String(constant_name), "'."); constants.erase(constant_name); @@ -765,7 +765,7 @@ void add_exposed_classes(Context &r_context) { TEST_FAIL_COND(constant_name.find("::") != -1, "Constant contains '::', check bindings to remove the scope: '", String(class_name), ".", constant_name, "'."); - int *value = class_info->constant_map.getptr(StringName(E)); + int64_t *value = class_info->constant_map.getptr(StringName(E)); TEST_FAIL_COND(!value, "Missing constant value: '", String(class_name), ".", String(constant_name), "'."); ConstantData constant; diff --git a/thirdparty/README.md b/thirdparty/README.md index 595a9a85ce..1cc272b1bf 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -62,7 +62,7 @@ Files extracted from upstream source: ## doctest - Upstream: https://github.com/onqtam/doctest -- Version: 2.4.8 (7b9885133108ae301ddd16e2651320f54cafeba7, 2022) +- Version: 2.4.9 (b7c21ec5ceeadb4951b00396fc1e4642dd347e5f, 2022) - License: MIT Files extracted from upstream source: @@ -254,6 +254,7 @@ Files generated from upstream source: Files extracted from upstream source: - `jpgd*.{c,h}` +- `jpge*.{c,h}` ## libogg @@ -525,7 +526,7 @@ Patch files are provided in `oidn/patches/`. ## openxr - Upstream: https://github.com/KhronosGroup/OpenXR-SDK -- Version: 1.0.22 (458984d7f59d1ae6dc1b597d94b02e4f7132eaba, 2022) +- Version: 1.0.23 (885a90f8934d84121344ba8e4aa5159d5b496e08, 2022) - License: Apache 2.0 Files extracted from upstream source: @@ -709,7 +710,7 @@ Files extracted from upstream source: SDK release: https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/master/layers/generated/vk_enum_string_helper.h `vk_mem_alloc.h` is taken from https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator -Version: 3.0.1-development (2022-03-28), commit `5b598e0a359381d7e2a94149210a1b7642024ae5` +Version: 3.0.1 (2022-06-10), commit `cfdc0f8775ab3258a3b9c4e47d8ce4b6f52a5441` `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. diff --git a/thirdparty/doctest/doctest.h b/thirdparty/doctest/doctest.h index d25f526827..aa2724c738 100644 --- a/thirdparty/doctest/doctest.h +++ b/thirdparty/doctest/doctest.h @@ -48,7 +48,7 @@ #define DOCTEST_VERSION_MAJOR 2 #define DOCTEST_VERSION_MINOR 4 -#define DOCTEST_VERSION_PATCH 8 +#define DOCTEST_VERSION_PATCH 9 // util we need here #define DOCTEST_TOSTR_IMPL(x) #x @@ -68,6 +68,12 @@ // ideas for the version stuff are taken from here: https://github.com/cxxstuff/cxx_detect +#ifdef _MSC_VER +#define DOCTEST_CPLUSPLUS _MSVC_LANG +#else +#define DOCTEST_CPLUSPLUS __cplusplus +#endif + #define DOCTEST_COMPILER(MAJOR, MINOR, PATCH) ((MAJOR)*10000000 + (MINOR)*100000 + (PATCH)) // GCC/Clang and GCC/MSVC are mutually exclusive, but Clang/MSVC are not because of clang-cl... @@ -153,7 +159,6 @@ DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \ DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \ DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \ - DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") \ DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \ DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \ \ @@ -164,7 +169,6 @@ DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \ DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \ DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \ - DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") \ DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \ DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \ \ @@ -231,7 +235,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define DOCTEST_MSVC_SUPPRESS_WARNING(4623) /* default constructor was implicitly deleted */ \ DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \ DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \ - DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ + DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ \ + DOCTEST_MSVC_SUPPRESS_WARNING(4738) /* storing float result in memory, loss of performance */ #define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP @@ -266,7 +271,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #endif // DOCTEST_CONFIG_NO_WINDOWS_SEH #if !defined(_WIN32) && !defined(__QNX__) && !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && \ - !defined(__EMSCRIPTEN__) + !defined(__EMSCRIPTEN__) && !defined(__wasi__) #define DOCTEST_CONFIG_POSIX_SIGNALS #endif // _WIN32 #if defined(DOCTEST_CONFIG_NO_POSIX_SIGNALS) && defined(DOCTEST_CONFIG_POSIX_SIGNALS) @@ -274,7 +279,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #endif // DOCTEST_CONFIG_NO_POSIX_SIGNALS #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS -#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) +#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) \ + || defined(__wasi__) #define DOCTEST_CONFIG_NO_EXCEPTIONS #endif // no exceptions #endif // DOCTEST_CONFIG_NO_EXCEPTIONS @@ -289,6 +295,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #define DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #endif // DOCTEST_CONFIG_NO_EXCEPTIONS && !DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS +#ifdef __wasi__ +#define DOCTEST_CONFIG_NO_MULTITHREADING +#endif + #if defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) && !defined(DOCTEST_CONFIG_IMPLEMENT) #define DOCTEST_CONFIG_IMPLEMENT #endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN @@ -316,6 +326,16 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #define DOCTEST_INTERFACE #endif // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL +// needed for extern template instantiations +// see https://github.com/fmtlib/fmt/issues/2228 +#if DOCTEST_MSVC +#define DOCTEST_INTERFACE_DECL +#define DOCTEST_INTERFACE_DEF DOCTEST_INTERFACE +#else // DOCTEST_MSVC +#define DOCTEST_INTERFACE_DECL DOCTEST_INTERFACE +#define DOCTEST_INTERFACE_DEF +#endif // DOCTEST_MSVC + #define DOCTEST_EMPTY #if DOCTEST_MSVC @@ -351,8 +371,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #ifndef DOCTEST_CONSTEXPR #if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) #define DOCTEST_CONSTEXPR const +#define DOCTEST_CONSTEXPR_FUNC inline #else // DOCTEST_MSVC #define DOCTEST_CONSTEXPR constexpr +#define DOCTEST_CONSTEXPR_FUNC constexpr #endif // DOCTEST_MSVC #endif // DOCTEST_CONSTEXPR @@ -360,6 +382,17 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define // == FEATURE DETECTION END ======================================================================== // ================================================================================================= +#define DOCTEST_DECLARE_INTERFACE(name) \ + virtual ~name(); \ + name() = default; \ + name(const name&) = delete; \ + name(name&&) = delete; \ + name& operator=(const name&) = delete; \ + name& operator=(name&&) = delete; + +#define DOCTEST_DEFINE_INTERFACE(name) \ + name::~name() = default; + // internal macros for string concatenation and anonymous variable name generation #define DOCTEST_CAT_IMPL(s1, s2) s1##s2 #define DOCTEST_CAT(s1, s2) DOCTEST_CAT_IMPL(s1, s2) @@ -382,17 +415,19 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define #define DOCTEST_PLATFORM_IPHONE #elif defined(_WIN32) #define DOCTEST_PLATFORM_WINDOWS +#elif defined(__wasi__) +#define DOCTEST_PLATFORM_WASI #else // DOCTEST_PLATFORM #define DOCTEST_PLATFORM_LINUX #endif // DOCTEST_PLATFORM namespace doctest { namespace detail { - static DOCTEST_CONSTEXPR int consume(const int*, int) { return 0; } + static DOCTEST_CONSTEXPR int consume(const int*, int) noexcept { return 0; } }} -#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \ - DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \ - static const int var = doctest::detail::consume(&var, __VA_ARGS__); \ +#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \ + DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \ + static const int var = doctest::detail::consume(&var, __VA_ARGS__); \ DOCTEST_CLANG_SUPPRESS_WARNING_POP #ifndef DOCTEST_BREAK_INTO_DEBUGGER @@ -400,16 +435,19 @@ namespace doctest { namespace detail { #ifdef DOCTEST_PLATFORM_LINUX #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) // Break at the location of the failing check if possible -#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler) +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler) #else #include <signal.h> #define DOCTEST_BREAK_INTO_DEBUGGER() raise(SIGTRAP) #endif #elif defined(DOCTEST_PLATFORM_MAC) #if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__) || defined(__i386) -#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler) +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler) +#elif defined(__ppc__) || defined(__ppc64__) +// https://www.cocoawithlove.com/2008/03/break-into-debugger.html +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n": : : "memory","r0","r3","r4") // NOLINT(hicpp-no-assembler) #else -#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT (hicpp-no-assembler) +#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT(hicpp-no-assembler) #endif #elif DOCTEST_MSVC #define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak() @@ -425,7 +463,9 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP // this is kept here for backwards compatibility since the config option was changed #ifdef DOCTEST_CONFIG_USE_IOSFWD +#ifndef DOCTEST_CONFIG_USE_STD_HEADERS #define DOCTEST_CONFIG_USE_STD_HEADERS +#endif #endif // DOCTEST_CONFIG_USE_IOSFWD // for clang - always include ciso646 (which drags some std stuff) because @@ -436,7 +476,9 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP #if DOCTEST_CLANG #include <ciso646> #ifdef _LIBCPP_VERSION +#ifndef DOCTEST_CONFIG_USE_STD_HEADERS #define DOCTEST_CONFIG_USE_STD_HEADERS +#endif #endif // _LIBCPP_VERSION #endif // clang @@ -444,26 +486,32 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP #ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS #define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS #endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN #include <cstddef> #include <ostream> #include <istream> +DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END #else // DOCTEST_CONFIG_USE_STD_HEADERS // Forward declaring 'X' in namespace std is not permitted by the C++ Standard. DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4643) -namespace std { // NOLINT (cert-dcl58-cpp) -typedef decltype(nullptr) nullptr_t; +namespace std { // NOLINT(cert-dcl58-cpp) +typedef decltype(nullptr) nullptr_t; // NOLINT(modernize-use-using) +typedef decltype(sizeof(void*)) size_t; // NOLINT(modernize-use-using) template <class charT> struct char_traits; template <> struct char_traits<char>; template <class charT, class traits> -class basic_ostream; -typedef basic_ostream<char, char_traits<char>> ostream; +class basic_ostream; // NOLINT(fuchsia-virtual-inheritance) +typedef basic_ostream<char, char_traits<char>> ostream; // NOLINT(modernize-use-using) +template<class traits> +// NOLINTNEXTLINE +basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char*); template <class charT, class traits> class basic_istream; -typedef basic_istream<char, char_traits<char>> istream; +typedef basic_istream<char, char_traits<char>> istream; // NOLINT(modernize-use-using) template <class... Types> class tuple; #if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) @@ -486,8 +534,14 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP namespace doctest { +using std::size_t; + DOCTEST_INTERFACE extern bool is_running_in_test; +#ifndef DOCTEST_CONFIG_STRING_SIZE_TYPE +#define DOCTEST_CONFIG_STRING_SIZE_TYPE unsigned +#endif + // A 24 byte string class (can be as small as 17 for x64 and 13 for x86) that can hold strings with length // of up to 23 chars on the stack before going on the heap - the last byte of the buffer is used for: // - "is small" bit - the highest bit - if "0" then it is small - otherwise its "1" (128) @@ -500,7 +554,6 @@ DOCTEST_INTERFACE extern bool is_running_in_test; // TODO: // - optimizations - like not deleting memory unnecessarily in operator= and etc. // - resize/reserve/clear -// - substr // - replace // - back/front // - iterator stuff @@ -510,64 +563,80 @@ DOCTEST_INTERFACE extern bool is_running_in_test; // - relational operators as free functions - taking const char* as one of the params class DOCTEST_INTERFACE String { - static const unsigned len = 24; //!OCLINT avoid private static members - static const unsigned last = len - 1; //!OCLINT avoid private static members +public: + using size_type = DOCTEST_CONFIG_STRING_SIZE_TYPE; + +private: + static DOCTEST_CONSTEXPR size_type len = 24; //!OCLINT avoid private static members + static DOCTEST_CONSTEXPR size_type last = len - 1; //!OCLINT avoid private static members struct view // len should be more than sizeof(view) - because of the final byte for flags { char* ptr; - unsigned size; - unsigned capacity; + size_type size; + size_type capacity; }; union { - char buf[len]; + char buf[len]; // NOLINT(*-avoid-c-arrays) view data; }; - char* allocate(unsigned sz); + char* allocate(size_type sz); - bool isOnStack() const { return (buf[last] & 128) == 0; } - void setOnHeap(); - void setLast(unsigned in = last); + bool isOnStack() const noexcept { return (buf[last] & 128) == 0; } + void setOnHeap() noexcept; + void setLast(size_type in = last) noexcept; + void setSize(size_type sz) noexcept; void copy(const String& other); public: - String(); + static DOCTEST_CONSTEXPR size_type npos = static_cast<size_type>(-1); + + String() noexcept; ~String(); // cppcheck-suppress noExplicitConstructor String(const char* in); - String(const char* in, unsigned in_size); + String(const char* in, size_type in_size); - String(std::istream& in, unsigned in_size); + String(std::istream& in, size_type in_size); String(const String& other); String& operator=(const String& other); String& operator+=(const String& other); - String(String&& other); - String& operator=(String&& other); + String(String&& other) noexcept; + String& operator=(String&& other) noexcept; - char operator[](unsigned i) const; - char& operator[](unsigned i); + char operator[](size_type i) const; + char& operator[](size_type i); // the only functions I'm willing to leave in the interface - available for inlining const char* c_str() const { return const_cast<String*>(this)->c_str(); } // NOLINT char* c_str() { - if(isOnStack()) + if (isOnStack()) { return reinterpret_cast<char*>(buf); + } return data.ptr; } - unsigned size() const; - unsigned capacity() const; + size_type size() const; + size_type capacity() const; + + String substr(size_type pos, size_type cnt = npos) &&; + String substr(size_type pos, size_type cnt = npos) const &; + + size_type find(char ch, size_type pos = 0) const; + size_type rfind(char ch, size_type pos = npos) const; int compare(const char* other, bool no_case = false) const; int compare(const String& other, bool no_case = false) const; + +friend DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in); }; DOCTEST_INTERFACE String operator+(const String& lhs, const String& rhs); @@ -579,7 +648,21 @@ DOCTEST_INTERFACE bool operator>(const String& lhs, const String& rhs); DOCTEST_INTERFACE bool operator<=(const String& lhs, const String& rhs); DOCTEST_INTERFACE bool operator>=(const String& lhs, const String& rhs); -DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in); +class DOCTEST_INTERFACE Contains { +public: + explicit Contains(const String& string); + + bool checkWith(const String& other) const; + + String string; +}; + +DOCTEST_INTERFACE String toString(const Contains& in); + +DOCTEST_INTERFACE bool operator==(const String& lhs, const Contains& rhs); +DOCTEST_INTERFACE bool operator==(const Contains& lhs, const String& rhs); +DOCTEST_INTERFACE bool operator!=(const String& lhs, const Contains& rhs); +DOCTEST_INTERFACE bool operator!=(const Contains& lhs, const String& rhs); namespace Color { enum Enum @@ -652,7 +735,7 @@ namespace assertType { DT_WARN_THROWS_WITH = is_throws_with | is_warn, DT_CHECK_THROWS_WITH = is_throws_with | is_check, DT_REQUIRE_THROWS_WITH = is_throws_with | is_require, - + DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn, DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check, DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require, @@ -733,9 +816,27 @@ struct DOCTEST_INTERFACE AssertData String m_decomp; // for specific exception-related asserts - bool m_threw_as; - const char* m_exception_type; - const char* m_exception_string; + bool m_threw_as; + const char* m_exception_type; + + class DOCTEST_INTERFACE StringContains { + private: + Contains content; + bool isContains; + + public: + StringContains(const String& str) : content(str), isContains(false) { } + StringContains(Contains cntn) : content(static_cast<Contains&&>(cntn)), isContains(true) { } + + bool check(const String& str) { return isContains ? (content == str) : (content.string == str); } + + operator const String&() const { return content.string; } + + const char* c_str() const { return content.string.c_str(); } + } m_exception_string; + + AssertData(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const StringContains& exception_string); }; struct DOCTEST_INTERFACE MessageData @@ -752,13 +853,13 @@ struct DOCTEST_INTERFACE SubcaseSignature const char* m_file; int m_line; + bool operator==(const SubcaseSignature& other) const; bool operator<(const SubcaseSignature& other) const; }; struct DOCTEST_INTERFACE IContextScope { - IContextScope(); - virtual ~IContextScope(); + DOCTEST_DECLARE_INTERFACE(IContextScope) virtual void stringify(std::ostream*) const = 0; }; @@ -815,200 +916,184 @@ struct ContextOptions //!OCLINT too many fields }; namespace detail { - template <bool CONDITION, typename TYPE = void> - struct enable_if - {}; + namespace types { +#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS + using namespace std; +#else + template <bool COND, typename T = void> + struct enable_if { }; + + template <typename T> + struct enable_if<true, T> { using type = T; }; - template <typename TYPE> - struct enable_if<true, TYPE> - { typedef TYPE type; }; + struct true_type { static DOCTEST_CONSTEXPR bool value = true; }; + struct false_type { static DOCTEST_CONSTEXPR bool value = false; }; - // clang-format off - template<class T> struct remove_reference { typedef T type; }; - template<class T> struct remove_reference<T&> { typedef T type; }; - template<class T> struct remove_reference<T&&> { typedef T type; }; + template <typename T> struct remove_reference { using type = T; }; + template <typename T> struct remove_reference<T&> { using type = T; }; + template <typename T> struct remove_reference<T&&> { using type = T; }; - template<typename T, typename U = T&&> U declval(int); + template <typename T> struct is_rvalue_reference : false_type { }; + template <typename T> struct is_rvalue_reference<T&&> : true_type { }; - template<typename T> T declval(long); + template<typename T> struct remove_const { using type = T; }; + template <typename T> struct remove_const<const T> { using type = T; }; - template<typename T> auto declval() DOCTEST_NOEXCEPT -> decltype(declval<T>(0)) ; + // Compiler intrinsics + template <typename T> struct is_enum { static DOCTEST_CONSTEXPR bool value = __is_enum(T); }; + template <typename T> struct underlying_type { using type = __underlying_type(T); }; - template<class T> struct is_lvalue_reference { const static bool value=false; }; - template<class T> struct is_lvalue_reference<T&> { const static bool value=true; }; + template <typename T> struct is_pointer : false_type { }; + template <typename T> struct is_pointer<T*> : true_type { }; + + template <typename T> struct is_array : false_type { }; + // NOLINTNEXTLINE(*-avoid-c-arrays) + template <typename T, size_t SIZE> struct is_array<T[SIZE]> : true_type { }; +#endif + } - template<class T> struct is_rvalue_reference { const static bool value=false; }; - template<class T> struct is_rvalue_reference<T&&> { const static bool value=true; }; + // <utility> + template <typename T> + T&& declval(); template <class T> - inline T&& forward(typename remove_reference<T>::type& t) DOCTEST_NOEXCEPT - { + DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference<T>::type& t) DOCTEST_NOEXCEPT { return static_cast<T&&>(t); } template <class T> - inline T&& forward(typename remove_reference<T>::type&& t) DOCTEST_NOEXCEPT - { - static_assert(!is_lvalue_reference<T>::value, - "Can not forward an rvalue as an lvalue."); + DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference<T>::type&& t) DOCTEST_NOEXCEPT { return static_cast<T&&>(t); } - template<class T> struct remove_const { typedef T type; }; - template<class T> struct remove_const<const T> { typedef T type; }; -#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS - template<class T> struct is_enum : public std::is_enum<T> {}; - template<class T> struct underlying_type : public std::underlying_type<T> {}; -#else - // Use compiler intrinsics - template<class T> struct is_enum { DOCTEST_CONSTEXPR static bool value = __is_enum(T); }; - template<class T> struct underlying_type { typedef __underlying_type(T) type; }; -#endif - // clang-format on + template <typename T> + struct deferred_false : types::false_type { }; + +// MSVS 2015 :( +#if defined(_MSC_VER) && _MSC_VER <= 1900 + template <typename T, typename = void> + struct has_global_insertion_operator : types::false_type { }; template <typename T> - struct deferred_false - // cppcheck-suppress unusedStructMember - { static const bool value = false; }; - - namespace has_insertion_operator_impl { - std::ostream &os(); - template<class T> - DOCTEST_REF_WRAP(T) val(); - - template<class, class = void> - struct check { - static DOCTEST_CONSTEXPR bool value = false; - }; + struct has_global_insertion_operator<T, decltype(::operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { }; - template<class T> - struct check<T, decltype(os() << val<T>(), void())> { - static DOCTEST_CONSTEXPR bool value = true; - }; - } // namespace has_insertion_operator_impl + template <typename T, typename = void> + struct has_insertion_operator { static DOCTEST_CONSTEXPR bool value = has_global_insertion_operator<T>::value; }; + + template <typename T, bool global> + struct insert_hack; + + template <typename T> + struct insert_hack<T, true> { + static void insert(std::ostream& os, const T& t) { ::operator<<(os, t); } + }; - template<class T> - using has_insertion_operator = has_insertion_operator_impl::check<const T>; + template <typename T> + struct insert_hack<T, false> { + static void insert(std::ostream& os, const T& t) { operator<<(os, t); } + }; + + template <typename T> + using insert_hack_t = insert_hack<T, has_global_insertion_operator<T>::value>; +#else + template <typename T, typename = void> + struct has_insertion_operator : types::false_type { }; +#endif + +template <typename T> +struct has_insertion_operator<T, decltype(operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { }; DOCTEST_INTERFACE std::ostream* tlssPush(); DOCTEST_INTERFACE String tlssPop(); - template <bool C> - struct StringMakerBase - { + struct StringMakerBase { template <typename T> static String convert(const DOCTEST_REF_WRAP(T)) { +#ifdef DOCTEST_CONFIG_REQUIRE_STRINGIFICATION_FOR_ALL_USED_TYPES + static_assert(deferred_false<T>::value, "No stringification detected for type T. See string conversion manual"); +#endif return "{?}"; } }; - // Vector<int> and various type other than pointer or array. - template<typename T> - struct filldata - { - static void fill(std::ostream* stream, const T &in) { - *stream << in; - } - }; - - template<typename T,unsigned long N> - struct filldata<T[N]> - { - static void fill(std::ostream* stream, const T (&in)[N]) { - for (unsigned long i = 0; i < N; i++) { - *stream << in[i]; - } - } - }; - - // Specialized since we don't want the terminating null byte! - template<unsigned long N> - struct filldata<const char[N]> - { - static void fill(std::ostream* stream, const char(&in)[N]) { - *stream << in; - } - }; + template <typename T> + struct filldata; - template<typename T> + template <typename T> void filloss(std::ostream* stream, const T& in) { filldata<T>::fill(stream, in); } - template<typename T,unsigned long N> - void filloss(std::ostream* stream, const T (&in)[N]) { + template <typename T, size_t N> + void filloss(std::ostream* stream, const T (&in)[N]) { // NOLINT(*-avoid-c-arrays) // T[N], T(&)[N], T(&&)[N] have same behaviour. // Hence remove reference. - filldata<typename remove_reference<decltype(in)>::type>::fill(stream, in); + filloss<typename types::remove_reference<decltype(in)>::type>(stream, in); + } + + template <typename T> + String toStream(const T& in) { + std::ostream* stream = tlssPush(); + filloss(stream, in); + return tlssPop(); } template <> - struct StringMakerBase<true> - { + struct StringMakerBase<true> { template <typename T> static String convert(const DOCTEST_REF_WRAP(T) in) { - /* When parameter "in" is a null terminated const char* it works. - * When parameter "in" is a T arr[N] without '\0' we can fill the - * stringstream with N objects (T=char).If in is char pointer * - * without '\0' , it would cause segfault - * stepping over unaccessible memory. - */ - - std::ostream* stream = tlssPush(); - filloss(stream, in); - return tlssPop(); + return toStream(in); } }; - - DOCTEST_INTERFACE String rawMemoryToString(const void* object, unsigned size); - - template <typename T> - String rawMemoryToString(const DOCTEST_REF_WRAP(T) object) { - return rawMemoryToString(&object, sizeof(object)); - } - - template <typename T> - const char* type_to_string() { - return "<>"; - } } // namespace detail template <typename T> -struct StringMaker : public detail::StringMakerBase<detail::has_insertion_operator<T>::value> +struct StringMaker : public detail::StringMakerBase< + detail::has_insertion_operator<T>::value || detail::types::is_pointer<T>::value || detail::types::is_array<T>::value> {}; -template <typename T> -struct StringMaker<T*> -{ - template <typename U> - static String convert(U* p) { - if(p) - return detail::rawMemoryToString(p); - return "NULL"; - } -}; +#ifndef DOCTEST_STRINGIFY +#ifdef DOCTEST_CONFIG_DOUBLE_STRINGIFY +#define DOCTEST_STRINGIFY(...) toString(toString(__VA_ARGS__)) +#else +#define DOCTEST_STRINGIFY(...) toString(__VA_ARGS__) +#endif +#endif -template <typename R, typename C> -struct StringMaker<R C::*> -{ - static String convert(R C::*p) { - if(p) - return detail::rawMemoryToString(p); - return "NULL"; - } -}; +template <typename T> +String toString() { +#if DOCTEST_MSVC >= 0 && DOCTEST_CLANG == 0 && DOCTEST_GCC == 0 + String ret = __FUNCSIG__; // class doctest::String __cdecl doctest::toString<TYPE>(void) + String::size_type beginPos = ret.find('<'); + return ret.substr(beginPos + 1, ret.size() - beginPos - static_cast<String::size_type>(sizeof(">(void)"))); +#else + String ret = __PRETTY_FUNCTION__; // doctest::String toString() [with T = TYPE] + String::size_type begin = ret.find('=') + 2; + return ret.substr(begin, ret.size() - begin - 1); +#endif +} -template <typename T, typename detail::enable_if<!detail::is_enum<T>::value, bool>::type = true> +template <typename T, typename detail::types::enable_if<!detail::types::is_enum<T>::value, bool>::type = true> String toString(const DOCTEST_REF_WRAP(T) value) { return StringMaker<T>::convert(value); } #ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING -DOCTEST_INTERFACE String toString(char* in); DOCTEST_INTERFACE String toString(const char* in); #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING + +#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) +// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 +DOCTEST_INTERFACE String toString(const std::string& in); +#endif // VS 2019 + +DOCTEST_INTERFACE String toString(String in); + +DOCTEST_INTERFACE String toString(std::nullptr_t); + DOCTEST_INTERFACE String toString(bool in); + DOCTEST_INTERFACE String toString(float in); DOCTEST_INTERFACE String toString(double in); DOCTEST_INTERFACE String toString(double long in); @@ -1016,40 +1101,85 @@ DOCTEST_INTERFACE String toString(double long in); DOCTEST_INTERFACE String toString(char in); DOCTEST_INTERFACE String toString(char signed in); DOCTEST_INTERFACE String toString(char unsigned in); -DOCTEST_INTERFACE String toString(int short in); -DOCTEST_INTERFACE String toString(int short unsigned in); -DOCTEST_INTERFACE String toString(int in); -DOCTEST_INTERFACE String toString(int unsigned in); -DOCTEST_INTERFACE String toString(int long in); -DOCTEST_INTERFACE String toString(int long unsigned in); -DOCTEST_INTERFACE String toString(int long long in); -DOCTEST_INTERFACE String toString(int long long unsigned in); -DOCTEST_INTERFACE String toString(std::nullptr_t in); - -template <typename T, typename detail::enable_if<detail::is_enum<T>::value, bool>::type = true> +DOCTEST_INTERFACE String toString(short in); +DOCTEST_INTERFACE String toString(short unsigned in); +DOCTEST_INTERFACE String toString(signed in); +DOCTEST_INTERFACE String toString(unsigned in); +DOCTEST_INTERFACE String toString(long in); +DOCTEST_INTERFACE String toString(long unsigned in); +DOCTEST_INTERFACE String toString(long long in); +DOCTEST_INTERFACE String toString(long long unsigned in); + +template <typename T, typename detail::types::enable_if<detail::types::is_enum<T>::value, bool>::type = true> String toString(const DOCTEST_REF_WRAP(T) value) { - typedef typename detail::underlying_type<T>::type UT; - return toString(static_cast<UT>(value)); + using UT = typename detail::types::underlying_type<T>::type; + return (DOCTEST_STRINGIFY(static_cast<UT>(value))); } -#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) -// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 -DOCTEST_INTERFACE String toString(const std::string& in); -#endif // VS 2019 +namespace detail { + template <typename T> + struct filldata + { + static void fill(std::ostream* stream, const T& in) { +#if defined(_MSC_VER) && _MSC_VER <= 1900 + insert_hack_t<T>::insert(*stream, in); +#else + operator<<(*stream, in); +#endif + } + }; + +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866) +// NOLINTBEGIN(*-avoid-c-arrays) + template <typename T, size_t N> + struct filldata<T[N]> { + static void fill(std::ostream* stream, const T(&in)[N]) { + *stream << "["; + for (size_t i = 0; i < N; i++) { + if (i != 0) { *stream << ", "; } + *stream << (DOCTEST_STRINGIFY(in[i])); + } + *stream << "]"; + } + }; +// NOLINTEND(*-avoid-c-arrays) +DOCTEST_MSVC_SUPPRESS_WARNING_POP -class DOCTEST_INTERFACE Approx + // Specialized since we don't want the terminating null byte! +// NOLINTBEGIN(*-avoid-c-arrays) + template <size_t N> + struct filldata<const char[N]> { + static void fill(std::ostream* stream, const char (&in)[N]) { + *stream << String(in, in[N - 1] ? N : N - 1); + } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + }; +// NOLINTEND(*-avoid-c-arrays) + + template <> + struct filldata<const void*> { + static void fill(std::ostream* stream, const void* in); + }; + + template <typename T> + struct filldata<T*> { + static void fill(std::ostream* stream, const T* in) { + filldata<const void*>::fill(stream, in); + } + }; +} + +struct DOCTEST_INTERFACE Approx { -public: - explicit Approx(double value); + Approx(double value); Approx operator()(double value) const; #ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS template <typename T> explicit Approx(const T& value, - typename detail::enable_if<std::is_constructible<double, T>::value>::type* = + typename detail::types::enable_if<std::is_constructible<double, T>::value>::type* = static_cast<T*>(nullptr)) { - *this = Approx(static_cast<double>(value)); + *this = static_cast<double>(value); } #endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS @@ -1057,7 +1187,7 @@ public: #ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS template <typename T> - typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type epsilon( + typename std::enable_if<std::is_constructible<double, T>::value, Approx&>::type epsilon( const T& newEpsilon) { m_epsilon = static_cast<double>(newEpsilon); return *this; @@ -1068,7 +1198,7 @@ public: #ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS template <typename T> - typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type scale( + typename std::enable_if<std::is_constructible<double, T>::value, Approx&>::type scale( const T& newScale) { m_scale = static_cast<double>(newScale); return *this; @@ -1089,30 +1219,27 @@ public: DOCTEST_INTERFACE friend bool operator> (double lhs, const Approx & rhs); DOCTEST_INTERFACE friend bool operator> (const Approx & lhs, double rhs); - DOCTEST_INTERFACE friend String toString(const Approx& in); - #ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS #define DOCTEST_APPROX_PREFIX \ - template <typename T> friend typename detail::enable_if<std::is_constructible<double, T>::value, bool>::type + template <typename T> friend typename std::enable_if<std::is_constructible<double, T>::value, bool>::type - DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(double(lhs), rhs); } + DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(static_cast<double>(lhs), rhs); } DOCTEST_APPROX_PREFIX operator==(const Approx& lhs, const T& rhs) { return operator==(rhs, lhs); } DOCTEST_APPROX_PREFIX operator!=(const T& lhs, const Approx& rhs) { return !operator==(lhs, rhs); } DOCTEST_APPROX_PREFIX operator!=(const Approx& lhs, const T& rhs) { return !operator==(rhs, lhs); } - DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value || lhs == rhs; } - DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) || lhs == rhs; } - DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value || lhs == rhs; } - DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) || lhs == rhs; } - DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value && lhs != rhs; } - DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) && lhs != rhs; } - DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value && lhs != rhs; } - DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) < rhs.m_value || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast<double>(rhs) || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) > rhs.m_value || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast<double>(rhs) || lhs == rhs; } + DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) < rhs.m_value && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast<double>(rhs) && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) > rhs.m_value && lhs != rhs; } + DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast<double>(rhs) && lhs != rhs; } #undef DOCTEST_APPROX_PREFIX #endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS // clang-format on -private: double m_epsilon; double m_scale; double m_value; @@ -1122,18 +1249,35 @@ DOCTEST_INTERFACE String toString(const Approx& in); DOCTEST_INTERFACE const ContextOptions* getContextOptions(); -#if !defined(DOCTEST_CONFIG_DISABLE) +template <typename F> +struct DOCTEST_INTERFACE_DECL IsNaN +{ + F value; bool flipped; + IsNaN(F f, bool flip = false) : value(f), flipped(flip) { } + IsNaN<F> operator!() const { return { value, !flipped }; } + operator bool() const; +}; +#ifndef __MINGW32__ +extern template struct DOCTEST_INTERFACE_DECL IsNaN<float>; +extern template struct DOCTEST_INTERFACE_DECL IsNaN<double>; +extern template struct DOCTEST_INTERFACE_DECL IsNaN<long double>; +#endif +DOCTEST_INTERFACE String toString(IsNaN<float> in); +DOCTEST_INTERFACE String toString(IsNaN<double> in); +DOCTEST_INTERFACE String toString(IsNaN<double long> in); + +#ifndef DOCTEST_CONFIG_DISABLE namespace detail { // clang-format off #ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING - template<class T> struct decay_array { typedef T type; }; - template<class T, unsigned N> struct decay_array<T[N]> { typedef T* type; }; - template<class T> struct decay_array<T[]> { typedef T* type; }; + template<class T> struct decay_array { using type = T; }; + template<class T, unsigned N> struct decay_array<T[N]> { using type = T*; }; + template<class T> struct decay_array<T[]> { using type = T*; }; - template<class T> struct not_char_pointer { enum { value = 1 }; }; - template<> struct not_char_pointer<char*> { enum { value = 0 }; }; - template<> struct not_char_pointer<const char*> { enum { value = 0 }; }; + template<class T> struct not_char_pointer { static DOCTEST_CONSTEXPR value = 1; }; + template<> struct not_char_pointer<char*> { static DOCTEST_CONSTEXPR value = 0; }; + template<> struct not_char_pointer<const char*> { static DOCTEST_CONSTEXPR value = 0; }; template<class T> struct can_use_op : public not_char_pointer<typename decay_array<T>::type> {}; #endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING @@ -1156,16 +1300,22 @@ namespace detail { bool m_entered = false; Subcase(const String& name, const char* file, int line); + Subcase(const Subcase&) = delete; + Subcase(Subcase&&) = delete; + Subcase& operator=(const Subcase&) = delete; + Subcase& operator=(Subcase&&) = delete; ~Subcase(); operator bool() const; + + private: + bool checkFilters(); }; template <typename L, typename R> String stringifyBinaryExpr(const DOCTEST_REF_WRAP(L) lhs, const char* op, const DOCTEST_REF_WRAP(R) rhs) { - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) - return toString(lhs) + op + toString(rhs); + return (DOCTEST_STRINGIFY(lhs)) + op + (DOCTEST_STRINGIFY(rhs)); } #if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0) @@ -1180,17 +1330,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") #define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \ template <typename R> \ - DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R&& rhs) { \ - bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<const R>(rhs)); \ - if(m_at & assertType::is_false) \ - res = !res; \ - if(!res || doctest::getContextOptions()->success) \ - return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \ - return Result(res); \ - } \ - template <typename R ,typename enable_if<!doctest::detail::is_rvalue_reference<R>::value, void >::type* = nullptr> \ - DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R& rhs) { \ - bool res = op_macro(doctest::detail::forward<const L>(lhs), rhs); \ + DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \ + bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<R>(rhs)); \ if(m_at & assertType::is_false) \ res = !res; \ if(!res || doctest::getContextOptions()->success) \ @@ -1209,12 +1350,12 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") return *this; \ } - struct DOCTEST_INTERFACE Result + struct DOCTEST_INTERFACE Result // NOLINT(*-member-init) { bool m_passed; String m_decomp; - Result() = default; + Result() = default; // TODO: Why do we need this? (To remove NOLINT) Result(bool passed, const String& decomposition = String()); // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence @@ -1271,8 +1412,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") #ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING #define DOCTEST_COMPARISON_RETURN_TYPE bool #else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING -#define DOCTEST_COMPARISON_RETURN_TYPE typename enable_if<can_use_op<L>::value || can_use_op<R>::value, bool>::type - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) +#define DOCTEST_COMPARISON_RETURN_TYPE typename types::enable_if<can_use_op<L>::value || can_use_op<R>::value, bool>::type inline bool eq(const char* lhs, const char* rhs) { return String(lhs) == String(rhs); } inline bool ne(const char* lhs, const char* rhs) { return String(lhs) != String(rhs); } inline bool lt(const char* lhs, const char* rhs) { return String(lhs) < String(rhs); } @@ -1320,7 +1460,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") assertType::Enum m_at; explicit Expression_lhs(L&& in, assertType::Enum at) - : lhs(doctest::detail::forward<L>(in)) + : lhs(static_cast<L&&>(in)) , m_at(at) {} DOCTEST_NOINLINE operator Result() { @@ -1328,12 +1468,14 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison") DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4800) // 'int': forcing value to bool bool res = static_cast<bool>(lhs); DOCTEST_MSVC_SUPPRESS_WARNING_POP - if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional + if(m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional res = !res; + } - if(!res || getContextOptions()->success) - return Result(res, toString(lhs)); - return Result(res); + if(!res || getContextOptions()->success) { + return { res, (DOCTEST_STRINGIFY(lhs)) }; + } + return { res }; } /* This is required for user-defined conversions from Expression_lhs to L */ @@ -1394,11 +1536,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP // https://github.com/catchorg/Catch2/issues/870 // https://github.com/catchorg/Catch2/issues/565 template <typename L> - Expression_lhs<const L> operator<<(const L &&operand) { - return Expression_lhs<const L>(doctest::detail::forward<const L>(operand), m_at); + Expression_lhs<L> operator<<(L&& operand) { + return Expression_lhs<L>(static_cast<L&&>(operand), m_at); } - template <typename L,typename enable_if<!doctest::detail::is_rvalue_reference<L>::value,void >::type* = nullptr> + template <typename L,typename types::enable_if<!doctest::detail::types::is_rvalue_reference<L>::value,void >::type* = nullptr> Expression_lhs<const L&> operator<<(const L &operand) { return Expression_lhs<const L&>(operand, m_at); } @@ -1425,25 +1567,28 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP } }; - typedef void (*funcType)(); + using funcType = void (*)(); struct DOCTEST_INTERFACE TestCase : public TestCaseData { funcType m_test; // a function pointer to the test case - const char* m_type; // for templated test cases - gets appended to the real name + String m_type; // for templated test cases - gets appended to the real name int m_template_id; // an ID used to distinguish between the different versions of a templated test case String m_full_name; // contains the name (only for templated test cases!) + the template type TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite, - const char* type = "", int template_id = -1); + const String& type = String(), int template_id = -1); TestCase(const TestCase& other); + TestCase(TestCase&&) = delete; DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function TestCase& operator=(const TestCase& other); DOCTEST_MSVC_SUPPRESS_WARNING_POP + TestCase& operator=(TestCase&&) = delete; + TestCase& operator*(const char* in); template <typename T> @@ -1453,6 +1598,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP } bool operator<(const TestCase& other) const; + + ~TestCase() = default; }; // forward declarations of functions used by the macros @@ -1492,7 +1639,10 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP struct DOCTEST_INTERFACE ResultBuilder : public AssertData { ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, - const char* exception_type = "", const char* exception_string = ""); + const char* exception_type = "", const String& exception_string = ""); + + ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const Contains& exception_string); void setResult(const Result& res); @@ -1500,8 +1650,9 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_NOINLINE bool binary_assert(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { m_failed = !RelationalComparator<comparison, L, R>()(lhs, rhs); - if(m_failed || getContextOptions()->success) + if (m_failed || getContextOptions()->success) { m_decomp = stringifyBinaryExpr(lhs, ", ", rhs); + } return !m_failed; } @@ -1509,11 +1660,13 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_NOINLINE bool unary_assert(const DOCTEST_REF_WRAP(L) val) { m_failed = !val; - if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional + if (m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional m_failed = !m_failed; + } - if(m_failed || getContextOptions()->success) - m_decomp = toString(val); + if (m_failed || getContextOptions()->success) { + m_decomp = (DOCTEST_STRINGIFY(val)); + } return !m_failed; } @@ -1536,7 +1689,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_INTERFACE void failed_out_of_a_testing_context(const AssertData& ad); DOCTEST_INTERFACE bool decomp_assert(assertType::Enum at, const char* file, int line, - const char* expr, Result result); + const char* expr, const Result& result); #define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \ do { \ @@ -1592,15 +1745,14 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED // ################################################################################### - DOCTEST_ASSERT_OUT_OF_TESTS(toString(val)); - DOCTEST_ASSERT_IN_TESTS(toString(val)); + DOCTEST_ASSERT_OUT_OF_TESTS((DOCTEST_STRINGIFY(val))); + DOCTEST_ASSERT_IN_TESTS((DOCTEST_STRINGIFY(val))); return !failed; } struct DOCTEST_INTERFACE IExceptionTranslator { - IExceptionTranslator(); - virtual ~IExceptionTranslator(); + DOCTEST_DECLARE_INTERFACE(IExceptionTranslator) virtual bool translate(String&) const = 0; }; @@ -1616,7 +1768,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP try { throw; // lgtm [cpp/rethrow-no-exception] // cppcheck-suppress catchExceptionByValue - } catch(T ex) { // NOLINT + } catch(const T& ex) { res = m_translateFunction(ex); //!OCLINT parameter reassignment return true; } catch(...) {} //!OCLINT - empty catch statement @@ -1631,64 +1783,19 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_INTERFACE void registerExceptionTranslatorImpl(const IExceptionTranslator* et); - template <bool C> - struct StringStreamBase - { - template <typename T> - static void convert(std::ostream* s, const T& in) { - *s << toString(in); - } - - // always treat char* as a string in this context - no matter - // if DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING is defined - static void convert(std::ostream* s, const char* in) { *s << String(in); } - }; - - template <> - struct StringStreamBase<true> - { - template <typename T> - static void convert(std::ostream* s, const T& in) { - *s << in; - } - }; + // ContextScope base class used to allow implementing methods of ContextScope + // that don't depend on the template parameter in doctest.cpp. + struct DOCTEST_INTERFACE ContextScopeBase : public IContextScope { + ContextScopeBase(const ContextScopeBase&) = delete; - template <typename T> - struct StringStream : public StringStreamBase<has_insertion_operator<T>::value> - {}; + ContextScopeBase& operator=(const ContextScopeBase&) = delete; + ContextScopeBase& operator=(ContextScopeBase&&) = delete; - template <typename T> - void toStream(std::ostream* s, const T& value) { - StringStream<T>::convert(s, value); - } + ~ContextScopeBase() override = default; -#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING - DOCTEST_INTERFACE void toStream(std::ostream* s, char* in); - DOCTEST_INTERFACE void toStream(std::ostream* s, const char* in); -#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING - DOCTEST_INTERFACE void toStream(std::ostream* s, bool in); - DOCTEST_INTERFACE void toStream(std::ostream* s, float in); - DOCTEST_INTERFACE void toStream(std::ostream* s, double in); - DOCTEST_INTERFACE void toStream(std::ostream* s, double long in); - - DOCTEST_INTERFACE void toStream(std::ostream* s, char in); - DOCTEST_INTERFACE void toStream(std::ostream* s, char signed in); - DOCTEST_INTERFACE void toStream(std::ostream* s, char unsigned in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int short in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int short unsigned in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int unsigned in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int long in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int long unsigned in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int long long in); - DOCTEST_INTERFACE void toStream(std::ostream* s, int long long unsigned in); - - // ContextScope base class used to allow implementing methods of ContextScope - // that don't depend on the template parameter in doctest.cpp. - class DOCTEST_INTERFACE ContextScopeBase : public IContextScope { protected: ContextScopeBase(); - ContextScopeBase(ContextScopeBase&& other); + ContextScopeBase(ContextScopeBase&& other) noexcept; void destroy(); bool need_to_destroy{true}; @@ -1696,12 +1803,17 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP template <typename L> class ContextScope : public ContextScopeBase { - const L lambda_; + L lambda_; public: explicit ContextScope(const L &lambda) : lambda_(lambda) {} + explicit ContextScope(L&& lambda) : lambda_(static_cast<L&&>(lambda)) { } - ContextScope(ContextScope &&other) : ContextScopeBase(static_cast<ContextScopeBase&&>(other)), lambda_(other.lambda_) {} + ContextScope(const ContextScope&) = delete; + ContextScope(ContextScope&&) noexcept = default; + + ContextScope& operator=(const ContextScope&) = delete; + ContextScope& operator=(ContextScope&&) = delete; void stringify(std::ostream* s) const override { lambda_(s); } @@ -1718,15 +1830,23 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP bool logged = false; MessageBuilder(const char* file, int line, assertType::Enum severity); - MessageBuilder() = delete; + + MessageBuilder(const MessageBuilder&) = delete; + MessageBuilder(MessageBuilder&&) = delete; + + MessageBuilder& operator=(const MessageBuilder&) = delete; + MessageBuilder& operator=(MessageBuilder&&) = delete; + ~MessageBuilder(); // the preferred way of chaining parameters for stringification +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866) template <typename T> MessageBuilder& operator,(const T& in) { - toStream(m_stream, in); + *m_stream << (DOCTEST_STRINGIFY(in)); return *this; } +DOCTEST_MSVC_SUPPRESS_WARNING_POP // kept here just for backwards-compatibility - the comma operator should be preferred now template <typename T> @@ -1742,7 +1862,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP bool log(); void react(); }; - + template <typename L> ContextScope<L> MakeContextScope(const L &lambda) { return ContextScope<L>(lambda); @@ -1795,7 +1915,7 @@ int registerExceptionTranslator(String (*)(T)) { #endif // DOCTEST_CONFIG_DISABLE namespace detail { - typedef void (*assert_handler)(const AssertData&); + using assert_handler = void (*)(const AssertData&); struct ContextState; } // namespace detail @@ -1808,7 +1928,13 @@ class DOCTEST_INTERFACE Context public: explicit Context(int argc = 0, const char* const* argv = nullptr); - ~Context(); + Context(const Context&) = delete; + Context(Context&&) = delete; + + Context& operator=(const Context&) = delete; + Context& operator=(Context&&) = delete; + + ~Context(); // NOLINT(performance-trivially-destructible) void applyCommandLine(int argc, const char* const* argv); @@ -1916,8 +2042,7 @@ struct DOCTEST_INTERFACE IReporter // or isn't in the execution range (between first and last) (safe to cache a pointer to the input) virtual void test_case_skipped(const TestCaseData&) = 0; - // doctest will not be managing the lifetimes of reporters given to it but this would still be nice to have - virtual ~IReporter(); + DOCTEST_DECLARE_INTERFACE(IReporter) // can obtain all currently active contexts and stringify them if one wishes to do so static int get_num_active_contexts(); @@ -1929,7 +2054,7 @@ struct DOCTEST_INTERFACE IReporter }; namespace detail { - typedef IReporter* (*reporterCreatorFunc)(const ContextOptions&); + using reporterCreatorFunc = IReporter* (*)(const ContextOptions&); DOCTEST_INTERFACE void registerReporterImpl(const char* name, int prio, reporterCreatorFunc c, bool isReporter); @@ -1946,15 +2071,30 @@ int registerReporter(const char* name, int priority, bool isReporter) { } } // namespace doctest +#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES +#define DOCTEST_FUNC_EMPTY [] { return false; }() +#else +#define DOCTEST_FUNC_EMPTY (void)0 +#endif + // if registering is not disabled -#if !defined(DOCTEST_CONFIG_DISABLE) +#ifndef DOCTEST_CONFIG_DISABLE + +#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES +#define DOCTEST_FUNC_SCOPE_BEGIN [&] +#define DOCTEST_FUNC_SCOPE_END () +#define DOCTEST_FUNC_SCOPE_RET(v) return v +#else +#define DOCTEST_FUNC_SCOPE_BEGIN do +#define DOCTEST_FUNC_SCOPE_END while(false) +#define DOCTEST_FUNC_SCOPE_RET(v) (void)0 +#endif // common code in asserts - for convenience #define DOCTEST_ASSERT_LOG_REACT_RETURN(b) \ - if(b.log()) \ - DOCTEST_BREAK_INTO_DEBUGGER(); \ - b.react(); \ - return !b.m_failed + if(b.log()) DOCTEST_BREAK_INTO_DEBUGGER(); \ + b.react(); \ + DOCTEST_FUNC_SCOPE_RET(!b.m_failed) #ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS #define DOCTEST_WRAP_IN_TRY(x) x; @@ -1976,7 +2116,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { // registers the test by initializing a dummy var with a function #define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators) \ - global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT */ \ doctest::detail::regTest( \ doctest::detail::TestCase( \ f, __FILE__, __LINE__, \ @@ -1984,18 +2124,18 @@ int registerReporter(const char* name, int priority, bool isReporter) { decorators)) #define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, decorators) \ - namespace { \ + namespace { /* NOLINT */ \ struct der : public base \ { \ void f(); \ }; \ - static void func() { \ + static inline DOCTEST_NOINLINE void func() { \ der v; \ v.f(); \ } \ DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, func, decorators) \ } \ - inline DOCTEST_NOINLINE void der::f() + inline DOCTEST_NOINLINE void der::f() // NOLINT(misc-definitions-in-headers) #define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, decorators) \ static void f(); \ @@ -2004,7 +2144,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(f, proxy, decorators) \ static doctest::detail::funcType proxy() { return f; } \ - DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \ + DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \ static void f() // for registering tests @@ -2012,7 +2152,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) // for registering tests in classes - requires C++17 for inline variables! -#if __cplusplus >= 201703L || (DOCTEST_MSVC >= DOCTEST_COMPILER(19, 12, 0) && _MSVC_LANG >= 201703L) +#if DOCTEST_CPLUSPLUS >= 201703L #define DOCTEST_TEST_CASE_CLASS(decorators) \ DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), \ DOCTEST_ANONYMOUS(DOCTEST_ANON_PROXY_), \ @@ -2028,22 +2168,21 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators) // for converting types to strings without the <typeinfo> header and demangling -#define DOCTEST_TYPE_TO_STRING_IMPL(...) \ - template <> \ - inline const char* type_to_string<__VA_ARGS__>() { \ - return "<" #__VA_ARGS__ ">"; \ - } -#define DOCTEST_TYPE_TO_STRING(...) \ - namespace doctest { namespace detail { \ - DOCTEST_TYPE_TO_STRING_IMPL(__VA_ARGS__) \ +#define DOCTEST_TYPE_TO_STRING_AS(str, ...) \ + namespace doctest { \ + template <> \ + inline String toString<__VA_ARGS__>() { \ + return str; \ } \ } \ static_assert(true, "") +#define DOCTEST_TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING_AS(#__VA_ARGS__, __VA_ARGS__) + #define DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, iter, func) \ template <typename T> \ static void func(); \ - namespace { \ + namespace { /* NOLINT */ \ template <typename Tuple> \ struct iter; \ template <typename Type, typename... Rest> \ @@ -2052,7 +2191,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { iter(const char* file, unsigned line, int index) { \ doctest::detail::regTest(doctest::detail::TestCase(func<Type>, file, line, \ doctest_detail_test_suite_ns::getCurrentTestSuite(), \ - doctest::detail::type_to_string<Type>(), \ + doctest::toString<Type>(), \ int(line) * 1000 + index) \ * dec); \ iter<std::tuple<Rest...>>(file, line, index + 1); \ @@ -2072,7 +2211,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)) #define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), /* NOLINT(cert-err58-cpp, fuchsia-statically-constructed-objects) */ \ doctest::detail::instantiationHelper( \ DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0))) @@ -2101,7 +2240,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { // for grouping tests in test suites by using code blocks #define DOCTEST_TEST_SUITE_IMPL(decorators, ns_name) \ namespace ns_name { namespace doctest_detail_test_suite_ns { \ - static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() { \ + static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() noexcept { \ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4640) \ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors") \ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmissing-field-initializers") \ @@ -2125,20 +2264,20 @@ int registerReporter(const char* name, int priority, bool isReporter) { // for starting a testsuite block #define DOCTEST_TEST_SUITE_BEGIN(decorators) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \ doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators)) \ static_assert(true, "") // for ending a testsuite block #define DOCTEST_TEST_SUITE_END \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \ doctest::detail::setTestSuite(doctest::detail::TestSuite() * "")) \ - typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) + using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int // for registering exception translators #define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(translatorName, signature) \ inline doctest::String translatorName(signature); \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), /* NOLINT(cert-err58-cpp) */ \ doctest::registerExceptionTranslator(translatorName)) \ doctest::String translatorName(signature) @@ -2148,13 +2287,13 @@ int registerReporter(const char* name, int priority, bool isReporter) { // for registering reporters #define DOCTEST_REGISTER_REPORTER(name, priority, reporter) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \ doctest::registerReporter<reporter>(name, priority, true)) \ static_assert(true, "") // for registering listeners #define DOCTEST_REGISTER_LISTENER(name, priority, reporter) \ - DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \ + DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \ doctest::registerReporter<reporter>(name, priority, false)) \ static_assert(true, "") @@ -2177,13 +2316,13 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x) #define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \ - [&] { \ + DOCTEST_FUNC_SCOPE_BEGIN { \ doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \ mb * __VA_ARGS__; \ if(mb.log()) \ DOCTEST_BREAK_INTO_DEBUGGER(); \ mb.react(); \ - }() + } DOCTEST_FUNC_SCOPE_END // clang-format off #define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__) @@ -2201,18 +2340,37 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_ASSERT_IMPLEMENT_2(assert_type, ...) \ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \ + /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \ doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \ - << __VA_ARGS__)) \ + << __VA_ARGS__)) /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB) \ DOCTEST_CLANG_SUPPRESS_WARNING_POP #define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \ - [&] { \ + DOCTEST_FUNC_SCOPE_BEGIN { \ DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \ - }() + } DOCTEST_FUNC_SCOPE_END // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) + +#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + DOCTEST_WRAP_IN_TRY( \ + DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \ + __VA_ARGS__)) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } DOCTEST_FUNC_SCOPE_END + +#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ + DOCTEST_FUNC_SCOPE_BEGIN { \ + doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ + __LINE__, #__VA_ARGS__); \ + DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \ + DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ + } DOCTEST_FUNC_SCOPE_END #else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS @@ -2226,6 +2384,14 @@ int registerReporter(const char* name, int priority, bool isReporter) { doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \ << __VA_ARGS__) DOCTEST_CLANG_SUPPRESS_WARNING_POP +#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \ + doctest::detail::binary_assert<doctest::detail::binaryAssertComparison::comparison>( \ + doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__) + +#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ + doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \ + #__VA_ARGS__, __VA_ARGS__) + #endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS #define DOCTEST_WARN(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN, __VA_ARGS__) @@ -2236,34 +2402,62 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__) // clang-format off -#define DOCTEST_WARN_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); }() -#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); }() -#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); }() -#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); }() -#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); }() -#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); }() +#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } DOCTEST_FUNC_SCOPE_END // clang-format on +#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__) +#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__) +#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__) +#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__) +#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__) +#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__) +#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__) +#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__) +#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__) +#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__) +#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__) +#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__) +#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__) +#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__) +#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__) +#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__) +#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__) +#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__) + +#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__) +#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__) +#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__) +#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__) +#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__) +#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__) + +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + #define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \ - [&] { \ + DOCTEST_FUNC_SCOPE_BEGIN { \ if(!doctest::getContextOptions()->no_throw) { \ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #expr, #__VA_ARGS__, message); \ try { \ DOCTEST_CAST_TO_VOID(expr) \ - } catch(const typename doctest::detail::remove_const< \ - typename doctest::detail::remove_reference<__VA_ARGS__>::type>::type&) { \ + } catch(const typename doctest::detail::types::remove_const< \ + typename doctest::detail::types::remove_reference<__VA_ARGS__>::type>::type&) {\ DOCTEST_RB.translateException(); \ DOCTEST_RB.m_threw_as = true; \ } catch(...) { DOCTEST_RB.translateException(); } \ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ - } else { \ - return false; \ + } else { /* NOLINT(*-else-after-return) */ \ + DOCTEST_FUNC_SCOPE_RET(false); \ } \ - }() + } DOCTEST_FUNC_SCOPE_END #define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \ - [&] { \ + DOCTEST_FUNC_SCOPE_BEGIN { \ if(!doctest::getContextOptions()->no_throw) { \ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, expr_str, "", __VA_ARGS__); \ @@ -2271,20 +2465,20 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_CAST_TO_VOID(expr) \ } catch(...) { DOCTEST_RB.translateException(); } \ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ - } else { \ - return false; \ + } else { /* NOLINT(*-else-after-return) */ \ + DOCTEST_FUNC_SCOPE_RET(false); \ } \ - }() + } DOCTEST_FUNC_SCOPE_END #define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \ - [&] { \ + DOCTEST_FUNC_SCOPE_BEGIN { \ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ __LINE__, #__VA_ARGS__); \ try { \ DOCTEST_CAST_TO_VOID(__VA_ARGS__) \ } catch(...) { DOCTEST_RB.translateException(); } \ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ - }() + } DOCTEST_FUNC_SCOPE_END // clang-format off #define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "") @@ -2307,166 +2501,23 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__) #define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__) -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); }() -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); }() -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); }() -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); }() -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); }() -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); }() -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); }() -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); }() -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); }() -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); }() -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); }() -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); }() -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); }() -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); }() -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); }() +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END // clang-format on -#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS - -#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \ - [&] { \ - doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ - __LINE__, #__VA_ARGS__); \ - DOCTEST_WRAP_IN_TRY( \ - DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \ - __VA_ARGS__)) \ - DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ - }() - -#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ - [&] { \ - doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \ - __LINE__, #__VA_ARGS__); \ - DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \ - DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \ - }() - -#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS - -#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \ - doctest::detail::binary_assert<doctest::detail::binaryAssertComparison::comparison>( \ - doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__) - -#define DOCTEST_UNARY_ASSERT(assert_type, ...) \ - doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \ - #__VA_ARGS__, __VA_ARGS__) - -#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS - -#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__) -#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__) -#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__) -#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__) -#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__) -#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__) -#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__) -#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__) -#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__) -#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__) -#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__) -#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__) -#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__) -#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__) -#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__) -#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__) -#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__) -#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__) - -#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__) -#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__) -#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__) -#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__) -#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__) -#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__) - -#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS - -#undef DOCTEST_WARN_THROWS -#undef DOCTEST_CHECK_THROWS -#undef DOCTEST_REQUIRE_THROWS -#undef DOCTEST_WARN_THROWS_AS -#undef DOCTEST_CHECK_THROWS_AS -#undef DOCTEST_REQUIRE_THROWS_AS -#undef DOCTEST_WARN_THROWS_WITH -#undef DOCTEST_CHECK_THROWS_WITH -#undef DOCTEST_REQUIRE_THROWS_WITH -#undef DOCTEST_WARN_THROWS_WITH_AS -#undef DOCTEST_CHECK_THROWS_WITH_AS -#undef DOCTEST_REQUIRE_THROWS_WITH_AS -#undef DOCTEST_WARN_NOTHROW -#undef DOCTEST_CHECK_NOTHROW -#undef DOCTEST_REQUIRE_NOTHROW - -#undef DOCTEST_WARN_THROWS_MESSAGE -#undef DOCTEST_CHECK_THROWS_MESSAGE -#undef DOCTEST_REQUIRE_THROWS_MESSAGE -#undef DOCTEST_WARN_THROWS_AS_MESSAGE -#undef DOCTEST_CHECK_THROWS_AS_MESSAGE -#undef DOCTEST_REQUIRE_THROWS_AS_MESSAGE -#undef DOCTEST_WARN_THROWS_WITH_MESSAGE -#undef DOCTEST_CHECK_THROWS_WITH_MESSAGE -#undef DOCTEST_REQUIRE_THROWS_WITH_MESSAGE -#undef DOCTEST_WARN_THROWS_WITH_AS_MESSAGE -#undef DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE -#undef DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE -#undef DOCTEST_WARN_NOTHROW_MESSAGE -#undef DOCTEST_CHECK_NOTHROW_MESSAGE -#undef DOCTEST_REQUIRE_NOTHROW_MESSAGE - -#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS - -#define DOCTEST_WARN_THROWS(...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS(...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_WARN_NOTHROW(...) ([] { return false; }) -#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; }) -#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; }) - -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) - -#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS - -#undef DOCTEST_REQUIRE -#undef DOCTEST_REQUIRE_FALSE -#undef DOCTEST_REQUIRE_MESSAGE -#undef DOCTEST_REQUIRE_FALSE_MESSAGE -#undef DOCTEST_REQUIRE_EQ -#undef DOCTEST_REQUIRE_NE -#undef DOCTEST_REQUIRE_GT -#undef DOCTEST_REQUIRE_LT -#undef DOCTEST_REQUIRE_GE -#undef DOCTEST_REQUIRE_LE -#undef DOCTEST_REQUIRE_UNARY -#undef DOCTEST_REQUIRE_UNARY_FALSE - -#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS - #endif // DOCTEST_CONFIG_NO_EXCEPTIONS // ================================================================================================= @@ -2476,7 +2527,7 @@ int registerReporter(const char* name, int priority, bool isReporter) { #else // DOCTEST_CONFIG_DISABLE #define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \ - namespace { \ + namespace /* NOLINT */ { \ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \ struct der : public base \ { void f(); }; \ @@ -2502,8 +2553,8 @@ int registerReporter(const char* name, int priority, bool isReporter) { DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name) // for converting types to strings without the <typeinfo> header and demangling +#define DOCTEST_TYPE_TO_STRING_AS(str, ...) static_assert(true, "") #define DOCTEST_TYPE_TO_STRING(...) static_assert(true, "") -#define DOCTEST_TYPE_TO_STRING_IMPL(...) // for typed tests #define DOCTEST_TEST_CASE_TEMPLATE(name, type, ...) \ @@ -2521,13 +2572,13 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_SUBCASE(name) // for a testsuite block -#define DOCTEST_TEST_SUITE(name) namespace +#define DOCTEST_TEST_SUITE(name) namespace // NOLINT // for starting a testsuite block #define DOCTEST_TEST_SUITE_BEGIN(name) static_assert(true, "") // for ending a testsuite block -#define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) +#define DOCTEST_TEST_SUITE_END using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int #define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \ @@ -2545,7 +2596,8 @@ int registerReporter(const char* name, int priority, bool isReporter) { #define DOCTEST_FAIL_CHECK(...) (static_cast<void>(0)) #define DOCTEST_FAIL(...) (static_cast<void>(0)) -#ifdef DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED +#if defined(DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED) \ + && defined(DOCTEST_CONFIG_ASSERTS_RETURN_VALUES) #define DOCTEST_WARN(...) [&] { return __VA_ARGS__; }() #define DOCTEST_CHECK(...) [&] { return __VA_ARGS__; }() @@ -2601,85 +2653,196 @@ namespace detail { #define DOCTEST_CHECK_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() #define DOCTEST_REQUIRE_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }() +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS + +#define DOCTEST_WARN_THROWS_WITH(expr, with, ...) [] { static_assert(false, "Exception translation is not available when doctest is disabled."); return false; }() +#define DOCTEST_CHECK_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) + +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,) + +#define DOCTEST_WARN_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_CHECK_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_REQUIRE_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_WARN_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_CHECK_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_WARN_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_CHECK_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_REQUIRE_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }() +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }() +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }() + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + #else // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED -#define DOCTEST_WARN(...) ([] { return false; }) -#define DOCTEST_CHECK(...) ([] { return false; }) -#define DOCTEST_REQUIRE(...) ([] { return false; }) -#define DOCTEST_WARN_FALSE(...) ([] { return false; }) -#define DOCTEST_CHECK_FALSE(...) ([] { return false; }) -#define DOCTEST_REQUIRE_FALSE(...) ([] { return false; }) - -#define DOCTEST_WARN_MESSAGE(cond, ...) ([] { return false; }) -#define DOCTEST_CHECK_MESSAGE(cond, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_MESSAGE(cond, ...) ([] { return false; }) -#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) ([] { return false; }) -#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) ([] { return false; }) - -#define DOCTEST_WARN_EQ(...) ([] { return false; }) -#define DOCTEST_CHECK_EQ(...) ([] { return false; }) -#define DOCTEST_REQUIRE_EQ(...) ([] { return false; }) -#define DOCTEST_WARN_NE(...) ([] { return false; }) -#define DOCTEST_CHECK_NE(...) ([] { return false; }) -#define DOCTEST_REQUIRE_NE(...) ([] { return false; }) -#define DOCTEST_WARN_GT(...) ([] { return false; }) -#define DOCTEST_CHECK_GT(...) ([] { return false; }) -#define DOCTEST_REQUIRE_GT(...) ([] { return false; }) -#define DOCTEST_WARN_LT(...) ([] { return false; }) -#define DOCTEST_CHECK_LT(...) ([] { return false; }) -#define DOCTEST_REQUIRE_LT(...) ([] { return false; }) -#define DOCTEST_WARN_GE(...) ([] { return false; }) -#define DOCTEST_CHECK_GE(...) ([] { return false; }) -#define DOCTEST_REQUIRE_GE(...) ([] { return false; }) -#define DOCTEST_WARN_LE(...) ([] { return false; }) -#define DOCTEST_CHECK_LE(...) ([] { return false; }) -#define DOCTEST_REQUIRE_LE(...) ([] { return false; }) - -#define DOCTEST_WARN_UNARY(...) ([] { return false; }) -#define DOCTEST_CHECK_UNARY(...) ([] { return false; }) -#define DOCTEST_REQUIRE_UNARY(...) ([] { return false; }) -#define DOCTEST_WARN_UNARY_FALSE(...) ([] { return false; }) -#define DOCTEST_CHECK_UNARY_FALSE(...) ([] { return false; }) -#define DOCTEST_REQUIRE_UNARY_FALSE(...) ([] { return false; }) +#define DOCTEST_WARN(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_EQ(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_GT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_LT(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_GE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_LE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_LE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_LE(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY -#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED +#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS -// TODO: think about if these also need to work properly even when doctest is disabled -#define DOCTEST_WARN_THROWS(...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS(...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; }) -#define DOCTEST_WARN_NOTHROW(...) ([] { return false; }) -#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; }) -#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; }) - -#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; }) -#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; }) -#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) -#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; }) +#define DOCTEST_WARN_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NOTHROW(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_FUNC_EMPTY + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + +#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED #endif // DOCTEST_CONFIG_DISABLE +#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS + +#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS +#define DOCTEST_EXCEPTION_EMPTY_FUNC DOCTEST_FUNC_EMPTY +#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS +#define DOCTEST_EXCEPTION_EMPTY_FUNC [] { static_assert(false, "Exceptions are disabled! " \ + "Use DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS if you want to compile with exceptions disabled."); return false; }() + +#undef DOCTEST_REQUIRE +#undef DOCTEST_REQUIRE_FALSE +#undef DOCTEST_REQUIRE_MESSAGE +#undef DOCTEST_REQUIRE_FALSE_MESSAGE +#undef DOCTEST_REQUIRE_EQ +#undef DOCTEST_REQUIRE_NE +#undef DOCTEST_REQUIRE_GT +#undef DOCTEST_REQUIRE_LT +#undef DOCTEST_REQUIRE_GE +#undef DOCTEST_REQUIRE_LE +#undef DOCTEST_REQUIRE_UNARY +#undef DOCTEST_REQUIRE_UNARY_FALSE + +#define DOCTEST_REQUIRE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_FALSE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_EQ DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_GT DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_LT DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_GE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_LE DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_UNARY DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_UNARY_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS + +#define DOCTEST_WARN_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC + +#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC +#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC + +#endif // DOCTEST_CONFIG_NO_EXCEPTIONS + // clang-format off // KEPT FOR BACKWARDS COMPATIBILITY - FORWARDING TO THE RIGHT MACROS #define DOCTEST_FAST_WARN_EQ DOCTEST_WARN_EQ @@ -2726,11 +2889,12 @@ namespace detail { // clang-format on // == SHORT VERSIONS OF THE MACROS -#if !defined(DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES) +#ifndef DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES #define TEST_CASE(name) DOCTEST_TEST_CASE(name) #define TEST_CASE_CLASS(name) DOCTEST_TEST_CASE_CLASS(name) #define TEST_CASE_FIXTURE(x, name) DOCTEST_TEST_CASE_FIXTURE(x, name) +#define TYPE_TO_STRING_AS(str, ...) DOCTEST_TYPE_TO_STRING_AS(str, __VA_ARGS__) #define TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING(__VA_ARGS__) #define TEST_CASE_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(name, T, __VA_ARGS__) #define TEST_CASE_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, T, id) @@ -2863,33 +3027,11 @@ namespace detail { #endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES -#if !defined(DOCTEST_CONFIG_DISABLE) +#ifndef DOCTEST_CONFIG_DISABLE // this is here to clear the 'current test suite' for the current translation unit - at the top DOCTEST_TEST_SUITE_END(); -// add stringification for primitive/fundamental types -namespace doctest { namespace detail { - DOCTEST_TYPE_TO_STRING_IMPL(bool) - DOCTEST_TYPE_TO_STRING_IMPL(float) - DOCTEST_TYPE_TO_STRING_IMPL(double) - DOCTEST_TYPE_TO_STRING_IMPL(long double) - DOCTEST_TYPE_TO_STRING_IMPL(char) - DOCTEST_TYPE_TO_STRING_IMPL(signed char) - DOCTEST_TYPE_TO_STRING_IMPL(unsigned char) -#if !DOCTEST_MSVC || defined(_NATIVE_WCHAR_T_DEFINED) - DOCTEST_TYPE_TO_STRING_IMPL(wchar_t) -#endif // not MSVC or wchar_t support enabled - DOCTEST_TYPE_TO_STRING_IMPL(short int) - DOCTEST_TYPE_TO_STRING_IMPL(unsigned short int) - DOCTEST_TYPE_TO_STRING_IMPL(int) - DOCTEST_TYPE_TO_STRING_IMPL(unsigned int) - DOCTEST_TYPE_TO_STRING_IMPL(long int) - DOCTEST_TYPE_TO_STRING_IMPL(unsigned long int) - DOCTEST_TYPE_TO_STRING_IMPL(long long int) - DOCTEST_TYPE_TO_STRING_IMPL(unsigned long long int) -}} // namespace doctest::detail - #endif // DOCTEST_CONFIG_DISABLE DOCTEST_CLANG_SUPPRESS_WARNING_POP @@ -2981,16 +3123,27 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN #include <algorithm> #include <iomanip> #include <vector> +#ifndef DOCTEST_CONFIG_NO_MULTITHREADING #include <atomic> #include <mutex> +#define DOCTEST_DECLARE_MUTEX(name) std::mutex name; +#define DOCTEST_DECLARE_STATIC_MUTEX(name) static DOCTEST_DECLARE_MUTEX(name) +#define DOCTEST_LOCK_MUTEX(name) std::lock_guard<std::mutex> DOCTEST_ANONYMOUS(DOCTEST_ANON_LOCK_)(name); +#else // DOCTEST_CONFIG_NO_MULTITHREADING +#define DOCTEST_DECLARE_MUTEX(name) +#define DOCTEST_DECLARE_STATIC_MUTEX(name) +#define DOCTEST_LOCK_MUTEX(name) +#endif // DOCTEST_CONFIG_NO_MULTITHREADING #include <set> #include <map> +#include <unordered_set> #include <exception> #include <stdexcept> #include <csignal> #include <cfloat> #include <cctype> #include <cstdint> +#include <string> #ifdef DOCTEST_PLATFORM_MAC #include <sys/types.h> @@ -3045,7 +3198,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END #endif #ifndef DOCTEST_THREAD_LOCAL -#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) +#if defined(DOCTEST_CONFIG_NO_MULTITHREADING) || DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0)) #define DOCTEST_THREAD_LOCAL #else // DOCTEST_MSVC #define DOCTEST_THREAD_LOCAL thread_local @@ -3107,20 +3260,6 @@ namespace { } } - template <typename T> - String fpToString(T value, int precision) { - std::ostringstream oss; - oss << std::setprecision(precision) << std::fixed << value; - std::string d = oss.str(); - size_t i = d.find_last_not_of('0'); - if(i != std::string::npos && i != d.size() - 1) { - if(d[i] == '.') - i++; - d = d.substr(0, i + 1); - } - return d.c_str(); - } - struct Endianness { enum Arch @@ -3141,22 +3280,6 @@ namespace { } // namespace namespace detail { - String rawMemoryToString(const void* object, unsigned size) { - // Reverse order for little endian architectures - int i = 0, end = static_cast<int>(size), inc = 1; - if(Endianness::which() == Endianness::Little) { - i = end - 1; - end = inc = -1; - } - - unsigned const char* bytes = static_cast<unsigned const char*>(object); - std::ostream* oss = tlssPush(); - *oss << "0x" << std::setfill('0') << std::hex; - for(; i != end; i += inc) - *oss << std::setw(2) << static_cast<unsigned>(bytes[i]); - return tlssPop(); - } - DOCTEST_THREAD_LOCAL class { std::vector<std::streampos> stack; @@ -3194,19 +3317,19 @@ namespace timer_large_integer { #if defined(DOCTEST_PLATFORM_WINDOWS) - typedef ULONGLONG type; + using type = ULONGLONG; #else // DOCTEST_PLATFORM_WINDOWS - typedef std::uint64_t type; + using type = std::uint64_t; #endif // DOCTEST_PLATFORM_WINDOWS } -typedef timer_large_integer::type ticks_t; +using ticks_t = timer_large_integer::type; #ifdef DOCTEST_CONFIG_GETCURRENTTICKS ticks_t getCurrentTicks() { return DOCTEST_CONFIG_GETCURRENTTICKS(); } #elif defined(DOCTEST_PLATFORM_WINDOWS) ticks_t getCurrentTicks() { - static LARGE_INTEGER hz = {0}, hzo = {0}; + static LARGE_INTEGER hz = { {0} }, hzo = { {0} }; if(!hz.QuadPart) { QueryPerformanceFrequency(&hz); QueryPerformanceCounter(&hzo); @@ -3238,9 +3361,17 @@ typedef timer_large_integer::type ticks_t; ticks_t m_ticks = 0; }; -#ifdef DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS +#ifdef DOCTEST_CONFIG_NO_MULTITHREADING + template <typename T> + using Atomic = T; +#else // DOCTEST_CONFIG_NO_MULTITHREADING template <typename T> - using AtomicOrMultiLaneAtomic = std::atomic<T>; + using Atomic = std::atomic<T>; +#endif // DOCTEST_CONFIG_NO_MULTITHREADING + +#if defined(DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS) || defined(DOCTEST_CONFIG_NO_MULTITHREADING) + template <typename T> + using MultiLaneAtomic = Atomic<T>; #else // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS // Provides a multilane implementation of an atomic variable that supports add, sub, load, // store. Instead of using a single atomic variable, this splits up into multiple ones, @@ -3257,8 +3388,8 @@ typedef timer_large_integer::type ticks_t; { struct CacheLineAlignedAtomic { - std::atomic<T> atomic{}; - char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(std::atomic<T>)]; + Atomic<T> atomic{}; + char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(Atomic<T>)]; }; CacheLineAlignedAtomic m_atomics[DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES]; @@ -3314,24 +3445,21 @@ typedef timer_large_integer::type ticks_t; // assigned in a round-robin fashion. // 3. This tlsLaneIdx is stored in the thread local data, so it is directly available with // little overhead. - std::atomic<T>& myAtomic() DOCTEST_NOEXCEPT { - static std::atomic<size_t> laneCounter; + Atomic<T>& myAtomic() DOCTEST_NOEXCEPT { + static Atomic<size_t> laneCounter; DOCTEST_THREAD_LOCAL size_t tlsLaneIdx = laneCounter++ % DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES; return m_atomics[tlsLaneIdx].atomic; } }; - - template <typename T> - using AtomicOrMultiLaneAtomic = MultiLaneAtomic<T>; #endif // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS // this holds both parameters from the command line and runtime data for tests struct ContextState : ContextOptions, TestRunStats, CurrentTestCaseStats { - AtomicOrMultiLaneAtomic<int> numAssertsCurrentTest_atomic; - AtomicOrMultiLaneAtomic<int> numAssertsFailedCurrentTest_atomic; + MultiLaneAtomic<int> numAssertsCurrentTest_atomic; + MultiLaneAtomic<int> numAssertsFailedCurrentTest_atomic; std::vector<std::vector<String>> filters = decltype(filters)(9); // 9 different filters @@ -3344,11 +3472,12 @@ typedef timer_large_integer::type ticks_t; std::vector<String> stringifiedContexts; // logging from INFO() due to an exception // stuff for subcases - std::vector<SubcaseSignature> subcasesStack; - std::set<decltype(subcasesStack)> subcasesPassed; - int subcasesCurrentMaxLevel; - bool should_reenter; - std::atomic<bool> shouldLogCurrentException; + bool reachedLeaf; + std::vector<SubcaseSignature> subcaseStack; + std::vector<SubcaseSignature> nextSubcaseStack; + std::unordered_set<unsigned long long> fullyTraversedSubcases; + size_t currentSubcaseDepth; + Atomic<bool> shouldLogCurrentException; void resetRunData() { numTestCases = 0; @@ -3414,7 +3543,7 @@ typedef timer_large_integer::type ticks_t; #endif // DOCTEST_CONFIG_DISABLE } // namespace detail -char* String::allocate(unsigned sz) { +char* String::allocate(size_type sz) { if (sz <= last) { buf[sz] = '\0'; setLast(last - sz); @@ -3429,8 +3558,12 @@ char* String::allocate(unsigned sz) { } } -void String::setOnHeap() { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; } -void String::setLast(unsigned in) { buf[last] = char(in); } +void String::setOnHeap() noexcept { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; } +void String::setLast(size_type in) noexcept { buf[last] = char(in); } +void String::setSize(size_type sz) noexcept { + if (isOnStack()) { buf[sz] = '\0'; setLast(last - sz); } + else { data.ptr[sz] = '\0'; data.size = sz; } +} void String::copy(const String& other) { if(other.isOnStack()) { @@ -3440,7 +3573,7 @@ void String::copy(const String& other) { } } -String::String() { +String::String() noexcept { buf[0] = '\0'; setLast(); } @@ -3448,17 +3581,16 @@ String::String() { String::~String() { if(!isOnStack()) delete[] data.ptr; - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) -} +} // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks) String::String(const char* in) : String(in, strlen(in)) {} -String::String(const char* in, unsigned in_size) { +String::String(const char* in, size_type in_size) { memcpy(allocate(in_size), in, in_size); } -String::String(std::istream& in, unsigned in_size) { +String::String(std::istream& in, size_type in_size) { in.read(allocate(in_size), in_size); } @@ -3476,9 +3608,9 @@ String& String::operator=(const String& other) { } String& String::operator+=(const String& other) { - const unsigned my_old_size = size(); - const unsigned other_size = other.size(); - const unsigned total_size = my_old_size + other_size; + const size_type my_old_size = size(); + const size_type other_size = other.size(); + const size_type total_size = my_old_size + other_size; if(isOnStack()) { if(total_size < len) { // append to the current stack space @@ -3525,13 +3657,13 @@ String& String::operator+=(const String& other) { return *this; } -String::String(String&& other) { +String::String(String&& other) noexcept { memcpy(buf, other.buf, len); other.buf[0] = '\0'; other.setLast(); } -String& String::operator=(String&& other) { +String& String::operator=(String&& other) noexcept { if(this != &other) { if(!isOnStack()) delete[] data.ptr; @@ -3542,30 +3674,60 @@ String& String::operator=(String&& other) { return *this; } -char String::operator[](unsigned i) const { - return const_cast<String*>(this)->operator[](i); // NOLINT +char String::operator[](size_type i) const { + return const_cast<String*>(this)->operator[](i); } -char& String::operator[](unsigned i) { +char& String::operator[](size_type i) { if(isOnStack()) return reinterpret_cast<char*>(buf)[i]; return data.ptr[i]; } DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmaybe-uninitialized") -unsigned String::size() const { +String::size_type String::size() const { if(isOnStack()) - return last - (unsigned(buf[last]) & 31); // using "last" would work only if "len" is 32 + return last - (size_type(buf[last]) & 31); // using "last" would work only if "len" is 32 return data.size; } DOCTEST_GCC_SUPPRESS_WARNING_POP -unsigned String::capacity() const { +String::size_type String::capacity() const { if(isOnStack()) return len; return data.capacity; } +String String::substr(size_type pos, size_type cnt) && { + cnt = std::min(cnt, size() - 1 - pos); + char* cptr = c_str(); + memmove(cptr, cptr + pos, cnt); + setSize(cnt); + return std::move(*this); +} + +String String::substr(size_type pos, size_type cnt) const & { + cnt = std::min(cnt, size() - 1 - pos); + return String{ c_str() + pos, cnt }; +} + +String::size_type String::find(char ch, size_type pos) const { + const char* begin = c_str(); + const char* end = begin + size(); + const char* it = begin + pos; + for (; it < end && *it != ch; it++); + if (it < end) { return static_cast<size_type>(it - begin); } + else { return npos; } +} + +String::size_type String::rfind(char ch, size_type pos) const { + const char* begin = c_str(); + const char* it = begin + std::min(pos, size() - 1); + for (; it >= begin && *it != ch; it--); + if (it >= begin) { return static_cast<size_type>(it - begin); } + else { return npos; } +} + int String::compare(const char* other, bool no_case) const { if(no_case) return doctest::stricmp(c_str(), other); @@ -3576,20 +3738,32 @@ int String::compare(const String& other, bool no_case) const { return compare(other.c_str(), no_case); } -// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) String operator+(const String& lhs, const String& rhs) { return String(lhs) += rhs; } -// clang-format off bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; } bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; } bool operator< (const String& lhs, const String& rhs) { return lhs.compare(rhs) < 0; } bool operator> (const String& lhs, const String& rhs) { return lhs.compare(rhs) > 0; } bool operator<=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) < 0 : true; } bool operator>=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) > 0 : true; } -// clang-format on std::ostream& operator<<(std::ostream& s, const String& in) { return s << in.c_str(); } +Contains::Contains(const String& str) : string(str) { } + +bool Contains::checkWith(const String& other) const { + return strstr(other.c_str(), string.c_str()) != nullptr; +} + +String toString(const Contains& in) { + return "Contains( " + in.string + " )"; +} + +bool operator==(const String& lhs, const Contains& rhs) { return rhs.checkWith(lhs); } +bool operator==(const Contains& lhs, const String& rhs) { return lhs.checkWith(rhs); } +bool operator!=(const String& lhs, const Contains& rhs) { return !rhs.checkWith(lhs); } +bool operator!=(const Contains& lhs, const String& rhs) { return !lhs.checkWith(rhs); } + namespace { void color_to_stream(std::ostream&, Color::Enum) DOCTEST_BRANCH_ON_DISABLED({}, ;) } // namespace @@ -3603,64 +3777,42 @@ namespace Color { // clang-format off const char* assertString(assertType::Enum at) { - DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4062) // enum 'x' in switch of enum 'y' is not handled - switch(at) { //!OCLINT missing default in switch statements - case assertType::DT_WARN : return "WARN"; - case assertType::DT_CHECK : return "CHECK"; - case assertType::DT_REQUIRE : return "REQUIRE"; - - case assertType::DT_WARN_FALSE : return "WARN_FALSE"; - case assertType::DT_CHECK_FALSE : return "CHECK_FALSE"; - case assertType::DT_REQUIRE_FALSE : return "REQUIRE_FALSE"; - - case assertType::DT_WARN_THROWS : return "WARN_THROWS"; - case assertType::DT_CHECK_THROWS : return "CHECK_THROWS"; - case assertType::DT_REQUIRE_THROWS : return "REQUIRE_THROWS"; - - case assertType::DT_WARN_THROWS_AS : return "WARN_THROWS_AS"; - case assertType::DT_CHECK_THROWS_AS : return "CHECK_THROWS_AS"; - case assertType::DT_REQUIRE_THROWS_AS : return "REQUIRE_THROWS_AS"; - - case assertType::DT_WARN_THROWS_WITH : return "WARN_THROWS_WITH"; - case assertType::DT_CHECK_THROWS_WITH : return "CHECK_THROWS_WITH"; - case assertType::DT_REQUIRE_THROWS_WITH : return "REQUIRE_THROWS_WITH"; - - case assertType::DT_WARN_THROWS_WITH_AS : return "WARN_THROWS_WITH_AS"; - case assertType::DT_CHECK_THROWS_WITH_AS : return "CHECK_THROWS_WITH_AS"; - case assertType::DT_REQUIRE_THROWS_WITH_AS : return "REQUIRE_THROWS_WITH_AS"; - - case assertType::DT_WARN_NOTHROW : return "WARN_NOTHROW"; - case assertType::DT_CHECK_NOTHROW : return "CHECK_NOTHROW"; - case assertType::DT_REQUIRE_NOTHROW : return "REQUIRE_NOTHROW"; - - case assertType::DT_WARN_EQ : return "WARN_EQ"; - case assertType::DT_CHECK_EQ : return "CHECK_EQ"; - case assertType::DT_REQUIRE_EQ : return "REQUIRE_EQ"; - case assertType::DT_WARN_NE : return "WARN_NE"; - case assertType::DT_CHECK_NE : return "CHECK_NE"; - case assertType::DT_REQUIRE_NE : return "REQUIRE_NE"; - case assertType::DT_WARN_GT : return "WARN_GT"; - case assertType::DT_CHECK_GT : return "CHECK_GT"; - case assertType::DT_REQUIRE_GT : return "REQUIRE_GT"; - case assertType::DT_WARN_LT : return "WARN_LT"; - case assertType::DT_CHECK_LT : return "CHECK_LT"; - case assertType::DT_REQUIRE_LT : return "REQUIRE_LT"; - case assertType::DT_WARN_GE : return "WARN_GE"; - case assertType::DT_CHECK_GE : return "CHECK_GE"; - case assertType::DT_REQUIRE_GE : return "REQUIRE_GE"; - case assertType::DT_WARN_LE : return "WARN_LE"; - case assertType::DT_CHECK_LE : return "CHECK_LE"; - case assertType::DT_REQUIRE_LE : return "REQUIRE_LE"; - - case assertType::DT_WARN_UNARY : return "WARN_UNARY"; - case assertType::DT_CHECK_UNARY : return "CHECK_UNARY"; - case assertType::DT_REQUIRE_UNARY : return "REQUIRE_UNARY"; - case assertType::DT_WARN_UNARY_FALSE : return "WARN_UNARY_FALSE"; - case assertType::DT_CHECK_UNARY_FALSE : return "CHECK_UNARY_FALSE"; - case assertType::DT_REQUIRE_UNARY_FALSE : return "REQUIRE_UNARY_FALSE"; + DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4061) // enum 'x' in switch of enum 'y' is not explicitely handled + #define DOCTEST_GENERATE_ASSERT_TYPE_CASE(assert_type) case assertType::DT_ ## assert_type: return #assert_type + #define DOCTEST_GENERATE_ASSERT_TYPE_CASES(assert_type) \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN_ ## assert_type); \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK_ ## assert_type); \ + DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE_ ## assert_type) + switch(at) { + DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN); + DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK); + DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(FALSE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_AS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH_AS); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(NOTHROW); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(EQ); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(NE); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(GT); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(LT); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(GE); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(LE); + + DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY); + DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY_FALSE); + + default: DOCTEST_INTERNAL_ERROR("Tried stringifying invalid assert type!"); } DOCTEST_MSVC_SUPPRESS_WARNING_POP - return ""; } // clang-format on @@ -3694,6 +3846,12 @@ const char* skipPathFromFilename(const char* file) { DOCTEST_CLANG_SUPPRESS_WARNING_POP DOCTEST_GCC_SUPPRESS_WARNING_POP +bool SubcaseSignature::operator==(const SubcaseSignature& other) const { + return m_line == other.m_line + && std::strcmp(m_file, other.m_file) == 0 + && m_name == other.m_name; +} + bool SubcaseSignature::operator<(const SubcaseSignature& other) const { if(m_line != other.m_line) return m_line < other.m_line; @@ -3702,45 +3860,53 @@ bool SubcaseSignature::operator<(const SubcaseSignature& other) const { return m_name.compare(other.m_name) < 0; } -IContextScope::IContextScope() = default; -IContextScope::~IContextScope() = default; +DOCTEST_DEFINE_INTERFACE(IContextScope) -#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING -String toString(char* in) { return toString(static_cast<const char*>(in)); } -// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) -String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; } -#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING -String toString(bool in) { return in ? "true" : "false"; } -String toString(float in) { return fpToString(in, 5) + "f"; } -String toString(double in) { return fpToString(in, 10); } -String toString(double long in) { return fpToString(in, 15); } - -#define DOCTEST_TO_STRING_OVERLOAD(type, fmt) \ - String toString(type in) { \ - char buf[64]; \ - std::sprintf(buf, fmt, in); \ - return buf; \ +namespace detail { + void filldata<const void*>::fill(std::ostream* stream, const void* in) { + if (in) { *stream << in; } + else { *stream << "nullptr"; } } -DOCTEST_TO_STRING_OVERLOAD(char, "%d") -DOCTEST_TO_STRING_OVERLOAD(char signed, "%d") -DOCTEST_TO_STRING_OVERLOAD(char unsigned, "%u") -DOCTEST_TO_STRING_OVERLOAD(int short, "%d") -DOCTEST_TO_STRING_OVERLOAD(int short unsigned, "%u") -DOCTEST_TO_STRING_OVERLOAD(int, "%d") -DOCTEST_TO_STRING_OVERLOAD(unsigned, "%u") -DOCTEST_TO_STRING_OVERLOAD(int long, "%ld") -DOCTEST_TO_STRING_OVERLOAD(int long unsigned, "%lu") -DOCTEST_TO_STRING_OVERLOAD(int long long, "%lld") -DOCTEST_TO_STRING_OVERLOAD(int long long unsigned, "%llu") + template <typename T> + String toStreamLit(T t) { + std::ostream* os = tlssPush(); + os->operator<<(t); + return tlssPop(); + } +} -String toString(std::nullptr_t) { return "NULL"; } +#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING +String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; } +#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING #if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0) // see this issue on why this is needed: https://github.com/doctest/doctest/issues/183 String toString(const std::string& in) { return in.c_str(); } #endif // VS 2019 +String toString(String in) { return in; } + +String toString(std::nullptr_t) { return "nullptr"; } + +String toString(bool in) { return in ? "true" : "false"; } + +String toString(float in) { return toStreamLit(in); } +String toString(double in) { return toStreamLit(in); } +String toString(double long in) { return toStreamLit(in); } + +String toString(char in) { return toStreamLit(static_cast<signed>(in)); } +String toString(char signed in) { return toStreamLit(static_cast<signed>(in)); } +String toString(char unsigned in) { return toStreamLit(static_cast<unsigned>(in)); } +String toString(short in) { return toStreamLit(in); } +String toString(short unsigned in) { return toStreamLit(in); } +String toString(signed in) { return toStreamLit(in); } +String toString(unsigned in) { return toStreamLit(in); } +String toString(long in) { return toStreamLit(in); } +String toString(long unsigned in) { return toStreamLit(in); } +String toString(long long in) { return toStreamLit(in); } +String toString(long long unsigned in) { return toStreamLit(in); } + Approx::Approx(double value) : m_epsilon(static_cast<double>(std::numeric_limits<float>::epsilon()) * 100) , m_scale(1.0) @@ -3780,11 +3946,25 @@ bool operator>(double lhs, const Approx& rhs) { return lhs > rhs.m_value && lhs bool operator>(const Approx& lhs, double rhs) { return lhs.m_value > rhs && lhs != rhs; } String toString(const Approx& in) { - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) return "Approx( " + doctest::toString(in.m_value) + " )"; } const ContextOptions* getContextOptions() { return DOCTEST_BRANCH_ON_DISABLED(nullptr, g_cs); } +DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4738) +template <typename F> +IsNaN<F>::operator bool() const { + return std::isnan(value) ^ flipped; +} +DOCTEST_MSVC_SUPPRESS_WARNING_POP +template struct DOCTEST_INTERFACE_DEF IsNaN<float>; +template struct DOCTEST_INTERFACE_DEF IsNaN<double>; +template struct DOCTEST_INTERFACE_DEF IsNaN<long double>; +template <typename F> +String toString(IsNaN<F> in) { return String(in.flipped ? "! " : "") + "IsNaN( " + doctest::toString(in.value) + " )"; } +String toString(IsNaN<float> in) { return toString<float>(in); } +String toString(IsNaN<double> in) { return toString<double>(in); } +String toString(IsNaN<double long> in) { return toString<double long>(in); } + } // namespace doctest #ifdef DOCTEST_CONFIG_DISABLE @@ -3800,11 +3980,9 @@ void Context::setOption(const char*, const char*) {} bool Context::shouldExit() { return false; } void Context::setAsDefaultForAssertsOutOfTestCases() {} void Context::setAssertHandler(detail::assert_handler) {} -void Context::setCout(std::ostream* out) {} +void Context::setCout(std::ostream*) {} int Context::run() { return 0; } -IReporter::~IReporter() = default; - int IReporter::get_num_active_contexts() { return 0; } const IContextScope* const* IReporter::get_active_contexts() { return nullptr; } int IReporter::get_num_stringified_contexts() { return 0; } @@ -3837,7 +4015,7 @@ namespace doctest { namespace { // the int (priority) is part of the key for automatic sorting - sadly one can register a // reporter with a duplicate name and a different priority but hopefully that won't happen often :| - typedef std::map<std::pair<int, String>, reporterCreatorFunc> reporterMap; + using reporterMap = std::map<std::pair<int, String>, reporterCreatorFunc>; reporterMap& getReporters() { static reporterMap data; @@ -3869,8 +4047,8 @@ namespace detail { #ifndef DOCTEST_CONFIG_NO_EXCEPTIONS DOCTEST_NORETURN void throwException() { g_cs->shouldLogCurrentException = false; - throw TestFailureException(); - } // NOLINT(cert-err60-cpp) + throw TestFailureException(); // NOLINT(hicpp-exception-baseclass) + } #else // DOCTEST_CONFIG_NO_EXCEPTIONS void throwException() {} #endif // DOCTEST_CONFIG_NO_EXCEPTIONS @@ -3916,59 +4094,92 @@ namespace { return !*wild; } - //// C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html - //unsigned hashStr(unsigned const char* str) { - // unsigned long hash = 5381; - // char c; - // while((c = *str++)) - // hash = ((hash << 5) + hash) + c; // hash * 33 + c - // return hash; - //} - // checks if the name matches any of the filters (and can be configured what to do when empty) bool matchesAny(const char* name, const std::vector<String>& filters, bool matchEmpty, - bool caseSensitive) { - if(filters.empty() && matchEmpty) + bool caseSensitive) { + if (filters.empty() && matchEmpty) return true; - for(auto& curr : filters) - if(wildcmp(name, curr.c_str(), caseSensitive)) + for (auto& curr : filters) + if (wildcmp(name, curr.c_str(), caseSensitive)) return true; return false; } -} // namespace -namespace detail { - Subcase::Subcase(const String& name, const char* file, int line) - : m_signature({name, file, line}) { - auto* s = g_cs; + unsigned long long hash(unsigned long long a, unsigned long long b) { + return (a << 5) + b; + } - // check subcase filters - if(s->subcasesStack.size() < size_t(s->subcase_filter_levels)) { - if(!matchesAny(m_signature.m_name.c_str(), s->filters[6], true, s->case_sensitive)) - return; - if(matchesAny(m_signature.m_name.c_str(), s->filters[7], false, s->case_sensitive)) - return; - } - - // if a Subcase on the same level has already been entered - if(s->subcasesStack.size() < size_t(s->subcasesCurrentMaxLevel)) { - s->should_reenter = true; - return; - } + // C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html + unsigned long long hash(const char* str) { + unsigned long long hash = 5381; + char c; + while ((c = *str++)) + hash = ((hash << 5) + hash) + c; // hash * 33 + c + return hash; + } - // push the current signature to the stack so we can check if the - // current stack + the current new subcase have been traversed - s->subcasesStack.push_back(m_signature); - if(s->subcasesPassed.count(s->subcasesStack) != 0) { - // pop - revert to previous stack since we've already passed this - s->subcasesStack.pop_back(); - return; + unsigned long long hash(const SubcaseSignature& sig) { + return hash(hash(hash(sig.m_file), hash(sig.m_name.c_str())), sig.m_line); + } + + unsigned long long hash(const std::vector<SubcaseSignature>& sigs, size_t count) { + unsigned long long running = 0; + auto end = sigs.begin() + count; + for (auto it = sigs.begin(); it != end; it++) { + running = hash(running, hash(*it)); } + return running; + } - s->subcasesCurrentMaxLevel = s->subcasesStack.size(); - m_entered = true; + unsigned long long hash(const std::vector<SubcaseSignature>& sigs) { + unsigned long long running = 0; + for (const SubcaseSignature& sig : sigs) { + running = hash(running, hash(sig)); + } + return running; + } +} // namespace +namespace detail { + bool Subcase::checkFilters() { + if (g_cs->subcaseStack.size() < size_t(g_cs->subcase_filter_levels)) { + if (!matchesAny(m_signature.m_name.c_str(), g_cs->filters[6], true, g_cs->case_sensitive)) + return true; + if (matchesAny(m_signature.m_name.c_str(), g_cs->filters[7], false, g_cs->case_sensitive)) + return true; + } + return false; + } - DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); + Subcase::Subcase(const String& name, const char* file, int line) + : m_signature({name, file, line}) { + if (!g_cs->reachedLeaf) { + if (g_cs->nextSubcaseStack.size() <= g_cs->subcaseStack.size() + || g_cs->nextSubcaseStack[g_cs->subcaseStack.size()] == m_signature) { + // Going down. + if (checkFilters()) { return; } + + g_cs->subcaseStack.push_back(m_signature); + g_cs->currentSubcaseDepth++; + m_entered = true; + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); + } + } else { + if (g_cs->subcaseStack[g_cs->currentSubcaseDepth] == m_signature) { + // This subcase is reentered via control flow. + g_cs->currentSubcaseDepth++; + m_entered = true; + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); + } else if (g_cs->nextSubcaseStack.size() <= g_cs->currentSubcaseDepth + && g_cs->fullyTraversedSubcases.find(hash(hash(g_cs->subcaseStack, g_cs->currentSubcaseDepth), hash(m_signature))) + == g_cs->fullyTraversedSubcases.end()) { + if (checkFilters()) { return; } + // This subcase is part of the one to be executed next. + g_cs->nextSubcaseStack.clear(); + g_cs->nextSubcaseStack.insert(g_cs->nextSubcaseStack.end(), + g_cs->subcaseStack.begin(), g_cs->subcaseStack.begin() + g_cs->currentSubcaseDepth); + g_cs->nextSubcaseStack.push_back(m_signature); + } + } } DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17 @@ -3976,25 +4187,33 @@ namespace detail { DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations") Subcase::~Subcase() { - if(m_entered) { - // only mark the subcase stack as passed if no subcases have been skipped - if(g_cs->should_reenter == false) - g_cs->subcasesPassed.insert(g_cs->subcasesStack); - g_cs->subcasesStack.pop_back(); + if (m_entered) { + g_cs->currentSubcaseDepth--; + + if (!g_cs->reachedLeaf) { + // Leaf. + g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack)); + g_cs->nextSubcaseStack.clear(); + g_cs->reachedLeaf = true; + } else if (g_cs->nextSubcaseStack.empty()) { + // All children are finished. + g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack)); + } #if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) if(std::uncaught_exceptions() > 0 #else if(std::uncaught_exception() #endif - && g_cs->shouldLogCurrentException) { + && g_cs->shouldLogCurrentException) { DOCTEST_ITERATE_THROUGH_REPORTERS( test_case_exception, {"exception thrown in subcase - will translate later " - "when the whole test case has been exited (cannot " - "translate while there is an active exception)", - false}); + "when the whole test case has been exited (cannot " + "translate while there is an active exception)", + false}); g_cs->shouldLogCurrentException = false; } + DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY); } } @@ -4018,7 +4237,7 @@ namespace detail { } TestCase::TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite, - const char* type, int template_id) { + const String& type, int template_id) { m_file = file; m_line = line; m_name = nullptr; // will be later overridden in operator* @@ -4043,10 +4262,8 @@ namespace detail { } DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function - DOCTEST_MSVC_SUPPRESS_WARNING(26437) // Do not slice TestCase& TestCase::operator=(const TestCase& other) { - static_cast<TestCaseData&>(*this) = static_cast<const TestCaseData&>(other); - + TestCaseData::operator=(other); m_test = other.m_test; m_type = other.m_type; m_template_id = other.m_template_id; @@ -4062,7 +4279,7 @@ namespace detail { m_name = in; // make a new name with an appended type for templated test case if(m_template_id != -1) { - m_full_name = String(m_name) + m_type; + m_full_name = String(m_name) + "<" + m_type + ">"; // redirect the name to point to the newly constructed full name m_name = m_full_name.c_str(); } @@ -4304,34 +4521,13 @@ namespace detail { getExceptionTranslators().push_back(et); } -#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING - void toStream(std::ostream* s, char* in) { *s << in; } - void toStream(std::ostream* s, const char* in) { *s << in; } -#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING - void toStream(std::ostream* s, bool in) { *s << std::boolalpha << in << std::noboolalpha; } - void toStream(std::ostream* s, float in) { *s << in; } - void toStream(std::ostream* s, double in) { *s << in; } - void toStream(std::ostream* s, double long in) { *s << in; } - - void toStream(std::ostream* s, char in) { *s << in; } - void toStream(std::ostream* s, char signed in) { *s << in; } - void toStream(std::ostream* s, char unsigned in) { *s << in; } - void toStream(std::ostream* s, int short in) { *s << in; } - void toStream(std::ostream* s, int short unsigned in) { *s << in; } - void toStream(std::ostream* s, int in) { *s << in; } - void toStream(std::ostream* s, int unsigned in) { *s << in; } - void toStream(std::ostream* s, int long in) { *s << in; } - void toStream(std::ostream* s, int long unsigned in) { *s << in; } - void toStream(std::ostream* s, int long long in) { *s << in; } - void toStream(std::ostream* s, int long long unsigned in) { *s << in; } - DOCTEST_THREAD_LOCAL std::vector<IContextScope*> g_infoContexts; // for logging with INFO() ContextScopeBase::ContextScopeBase() { g_infoContexts.push_back(this); } - ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) { + ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) noexcept { if (other.need_to_destroy) { other.destroy(); } @@ -4401,10 +4597,10 @@ namespace { static LONG CALLBACK handleException(PEXCEPTION_POINTERS ExceptionInfo) { // Multiple threads may enter this filter/handler at once. We want the error message to be printed on the // console just once no matter how many threads have crashed. - static std::mutex mutex; + DOCTEST_DECLARE_STATIC_MUTEX(mutex) static bool execute = true; { - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) if(execute) { bool reported = false; for(size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { @@ -4577,7 +4773,7 @@ namespace { sigStack.ss_flags = 0; sigaltstack(&sigStack, &oldSigStack); struct sigaction sa = {}; - sa.sa_handler = handleSignal; // NOLINT + sa.sa_handler = handleSignal; sa.sa_flags = SA_ONSTACK; for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) { sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); @@ -4616,7 +4812,7 @@ namespace { #define DOCTEST_OUTPUT_DEBUG_STRING(text) ::OutputDebugStringA(text) #else // TODO: integration with XCode and other IDEs -#define DOCTEST_OUTPUT_DEBUG_STRING(text) // NOLINT(clang-diagnostic-unused-macros) +#define DOCTEST_OUTPUT_DEBUG_STRING(text) #endif // Platform void addAssert(assertType::Enum at) { @@ -4635,8 +4831,8 @@ namespace { DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception, {message.c_str(), true}); - while(g_cs->subcasesStack.size()) { - g_cs->subcasesStack.pop_back(); + while (g_cs->subcaseStack.size()) { + g_cs->subcaseStack.pop_back(); DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY); } @@ -4648,25 +4844,26 @@ namespace { } #endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH } // namespace -namespace detail { - ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, - const char* exception_type, const char* exception_string) { - m_test_case = g_cs->currentTest; - m_at = at; - m_file = file; - m_line = line; - m_expr = expr; - m_failed = true; - m_threw = false; - m_threw_as = false; - m_exception_type = exception_type; - m_exception_string = exception_string; +AssertData::AssertData(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const StringContains& exception_string) + : m_test_case(g_cs->currentTest), m_at(at), m_file(file), m_line(line), m_expr(expr), + m_failed(true), m_threw(false), m_threw_as(false), m_exception_type(exception_type), + m_exception_string(exception_string) { #if DOCTEST_MSVC - if(m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC - ++m_expr; + if (m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC + ++m_expr; #endif // MSVC - } +} + +namespace detail { + ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const String& exception_string) + : AssertData(at, file, line, expr, exception_type, exception_string) { } + + ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr, + const char* exception_type, const Contains& exception_string) + : AssertData(at, file, line, expr, exception_type, exception_string) { } void ResultBuilder::setResult(const Result& res) { m_decomp = res.m_decomp; @@ -4682,11 +4879,11 @@ namespace detail { if(m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional m_failed = !m_threw; } else if((m_at & assertType::is_throws_as) && (m_at & assertType::is_throws_with)) { //!OCLINT - m_failed = !m_threw_as || (m_exception != m_exception_string); + m_failed = !m_threw_as || !m_exception_string.check(m_exception); } else if(m_at & assertType::is_throws_as) { //!OCLINT bitwise operator in conditional m_failed = !m_threw_as; } else if(m_at & assertType::is_throws_with) { //!OCLINT bitwise operator in conditional - m_failed = m_exception != m_exception_string; + m_failed = !m_exception_string.check(m_exception); } else if(m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional m_failed = m_threw; } @@ -4721,7 +4918,7 @@ namespace detail { } bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr, - Result result) { + const Result& result) { bool failed = !result.m_passed; // ################################################################################### @@ -4730,7 +4927,6 @@ namespace detail { // ################################################################################### DOCTEST_ASSERT_OUT_OF_TESTS(result.m_decomp); DOCTEST_ASSERT_IN_TESTS(result.m_decomp); - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) return !failed; } @@ -4746,8 +4942,7 @@ namespace detail { tlssPop(); } - IExceptionTranslator::IExceptionTranslator() = default; - IExceptionTranslator::~IExceptionTranslator() = default; + DOCTEST_DEFINE_INTERFACE(IExceptionTranslator) bool MessageBuilder::log() { if (!logged) { @@ -4858,10 +5053,10 @@ namespace { void ensureTagClosed(); - private: - void writeDeclaration(); + private: + void newlineIfNecessary(); bool m_tagIsOpen = false; @@ -5050,7 +5245,7 @@ namespace { XmlWriter::XmlWriter( std::ostream& os ) : m_os( os ) { - writeDeclaration(); + // writeDeclaration(); // called explicitly by the reporters that use the writer class - see issue #627 } XmlWriter::~XmlWriter() { @@ -5161,8 +5356,8 @@ namespace { struct XmlReporter : public IReporter { - XmlWriter xml; - std::mutex mutex; + XmlWriter xml; + DOCTEST_DECLARE_MUTEX(mutex) // caching pointers/references to objects of these types - safe to do const ContextOptions& opt; @@ -5256,6 +5451,8 @@ namespace { } void test_run_start() override { + xml.writeDeclaration(); + // remove .exe extension - mainly to have the same output on UNIX and Windows std::string binary_name = skipPathFromFilename(opt.binary_name.c_str()); #ifdef DOCTEST_PLATFORM_WINDOWS @@ -5322,7 +5519,7 @@ namespace { } void test_case_exception(const TestCaseException& e) override { - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) xml.scopedElement("Exception") .writeAttribute("crash", e.is_crash) @@ -5343,7 +5540,7 @@ namespace { if(!rb.m_failed && !opt.success) return; - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) xml.startElement("Expression") .writeAttribute("success", !rb.m_failed) @@ -5359,7 +5556,7 @@ namespace { if(rb.m_at & assertType::is_throws_as) xml.scopedElement("ExpectedException").writeText(rb.m_exception_type); if(rb.m_at & assertType::is_throws_with) - xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string); + xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string.c_str()); if((rb.m_at & assertType::is_normal) && !rb.m_threw) xml.scopedElement("Expanded").writeText(rb.m_decomp.c_str()); @@ -5369,7 +5566,7 @@ namespace { } void log_message(const MessageData& mb) override { - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) xml.startElement("Message") .writeAttribute("type", failureString(mb.m_severity)) @@ -5405,7 +5602,8 @@ namespace { } else if((rb.m_at & assertType::is_throws_as) && (rb.m_at & assertType::is_throws_with)) { //!OCLINT s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \"" - << rb.m_exception_string << "\", " << rb.m_exception_type << " ) " << Color::None; + << rb.m_exception_string.c_str() + << "\", " << rb.m_exception_type << " ) " << Color::None; if(rb.m_threw) { if(!rb.m_failed) { s << "threw as expected!\n"; @@ -5426,7 +5624,8 @@ namespace { } else if(rb.m_at & assertType::is_throws_with) { //!OCLINT bitwise operator in conditional s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \"" - << rb.m_exception_string << "\" ) " << Color::None + << rb.m_exception_string.c_str() + << "\" ) " << Color::None << (rb.m_threw ? (!rb.m_failed ? "threw as expected!" : "threw a DIFFERENT exception: ") : "did NOT throw at all!") @@ -5451,8 +5650,8 @@ namespace { // - more attributes in tags struct JUnitReporter : public IReporter { - XmlWriter xml; - std::mutex mutex; + XmlWriter xml; + DOCTEST_DECLARE_MUTEX(mutex) Timer timer; std::vector<String> deepestSubcaseStackNames; @@ -5548,9 +5747,13 @@ namespace { // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE // ========================================================================================= - void report_query(const QueryData&) override {} + void report_query(const QueryData&) override { + xml.writeDeclaration(); + } - void test_run_start() override {} + void test_run_start() override { + xml.writeDeclaration(); + } void test_run_end(const TestRunStats& p) override { // remove .exe extension - mainly to have the same output on UNIX and Windows @@ -5620,7 +5823,7 @@ namespace { } void test_case_exception(const TestCaseException& e) override { - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) testCaseData.addError("exception", e.error_string.c_str()); } @@ -5634,7 +5837,7 @@ namespace { if(!rb.m_failed) // report only failures & ignore the `success` option return; - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) std::ostringstream os; os << skipPathFromFilename(rb.m_file) << (opt.gnu_file_line ? ":" : "(") @@ -5685,7 +5888,7 @@ namespace { bool hasLoggedCurrentTestStart; std::vector<SubcaseSignature> subcasesStack; size_t currentSubcaseLevel; - std::mutex mutex; + DOCTEST_DECLARE_MUTEX(mutex) // caching pointers/references to objects of these types - safe to do const ContextOptions& opt; @@ -6031,7 +6234,7 @@ namespace { // log the preamble of the test case only if there is something // else to print - something other than that an assert has failed if(opt.duration || - (st.failure_flags && st.failure_flags != TestCaseFailureReason::AssertFailure)) + (st.failure_flags && st.failure_flags != static_cast<int>(TestCaseFailureReason::AssertFailure))) logTestStart(); if(opt.duration) @@ -6062,7 +6265,7 @@ namespace { } void test_case_exception(const TestCaseException& e) override { - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) if(tc->m_no_output) return; @@ -6101,7 +6304,7 @@ namespace { if((!rb.m_failed && !opt.success) || tc->m_no_output) return; - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) logTestStart(); @@ -6117,7 +6320,7 @@ namespace { if(tc->m_no_output) return; - std::lock_guard<std::mutex> lock(mutex); + DOCTEST_LOCK_MUTEX(mutex) logTestStart(); @@ -6245,8 +6448,8 @@ namespace { char character = *current++; if(seenBackslash) { seenBackslash = false; - if(character == ',') { - s.put(','); + if(character == ',' || character == '\\') { + s.put(character); continue; } s.put('\\'); @@ -6282,30 +6485,30 @@ namespace { if(!parseOption(argc, argv, pattern, &parsedValue)) return false; - if(type == 0) { + if(type) { + // integer + // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse... + int theInt = std::atoi(parsedValue.c_str()); + if (theInt != 0) { + res = theInt; //!OCLINT parameter reassignment + return true; + } + } else { // boolean - const char positive[][5] = {"1", "true", "on", "yes"}; // 5 - strlen("true") + 1 - const char negative[][6] = {"0", "false", "off", "no"}; // 6 - strlen("false") + 1 + const char positive[][5] = { "1", "true", "on", "yes" }; // 5 - strlen("true") + 1 + const char negative[][6] = { "0", "false", "off", "no" }; // 6 - strlen("false") + 1 // if the value matches any of the positive/negative possibilities - for(unsigned i = 0; i < 4; i++) { - if(parsedValue.compare(positive[i], true) == 0) { + for (unsigned i = 0; i < 4; i++) { + if (parsedValue.compare(positive[i], true) == 0) { res = 1; //!OCLINT parameter reassignment return true; } - if(parsedValue.compare(negative[i], true) == 0) { + if (parsedValue.compare(negative[i], true) == 0) { res = 0; //!OCLINT parameter reassignment return true; } } - } else { - // integer - // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse... - int theInt = std::atoi(parsedValue.c_str()); // NOLINT - if(theInt != 0) { - res = theInt; //!OCLINT parameter reassignment - return true; - } } return false; } @@ -6473,7 +6676,6 @@ void Context::setOption(const char* option, bool value) { // allows the user to override procedurally the int options from the command line void Context::setOption(const char* option, int value) { setOption(option, toString(value).c_str()); - // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) } // allows the user to override procedurally the string options from the command line @@ -6611,7 +6813,7 @@ int Context::run() { // random_shuffle implementation const auto first = &testArray[0]; for(size_t i = testArray.size() - 1; i > 0; --i) { - int idxToSwap = std::rand() % (i + 1); // NOLINT + int idxToSwap = std::rand() % (i + 1); const auto temp = first[i]; @@ -6698,7 +6900,7 @@ int Context::run() { p->numAssertsFailedCurrentTest_atomic = 0; p->numAssertsCurrentTest_atomic = 0; - p->subcasesPassed.clear(); + p->fullyTraversedSubcases.clear(); DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc); @@ -6708,9 +6910,10 @@ int Context::run() { do { // reset some of the fields for subcases (except for the set of fully passed ones) - p->should_reenter = false; - p->subcasesCurrentMaxLevel = 0; - p->subcasesStack.clear(); + p->reachedLeaf = false; + // May not be empty if previous subcase exited via exception. + p->subcaseStack.clear(); + p->currentSubcaseDepth = 0; p->shouldLogCurrentException = true; @@ -6744,9 +6947,9 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts; } - if(p->should_reenter && run_test) + if(!p->nextSubcaseStack.empty() && run_test) DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc); - if(!p->should_reenter) + if(p->nextSubcaseStack.empty()) run_test = false; } while(run_test); @@ -6775,7 +6978,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP return cleanup_and_return(); } -IReporter::~IReporter() = default; +DOCTEST_DEFINE_INTERFACE(IReporter) int IReporter::get_num_active_contexts() { return detail::g_infoContexts.size(); } const IContextScope* const* IReporter::get_active_contexts() { diff --git a/thirdparty/jpeg-compressor/jpge.cpp b/thirdparty/jpeg-compressor/jpge.cpp new file mode 100644 index 0000000000..5a36c19653 --- /dev/null +++ b/thirdparty/jpeg-compressor/jpge.cpp @@ -0,0 +1,1076 @@ +// jpge.cpp - C++ class for JPEG compression. Richard Geldreich <richgel99@gmail.com> +// Supports grayscale, H1V1, H2V1, and H2V2 chroma subsampling factors, one or two pass Huffman table optimization, libjpeg-style quality 1-100 quality factors. +// Also supports using luma quantization tables for chroma. +// +// Released under two licenses. You are free to choose which license you want: +// License 1: +// Public Domain +// +// License 2: +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// v1.01, Dec. 18, 2010 - Initial release +// v1.02, Apr. 6, 2011 - Removed 2x2 ordered dither in H2V1 chroma subsampling method load_block_16_8_8(). (The rounding factor was 2, when it should have been 1. Either way, it wasn't helping.) +// v1.03, Apr. 16, 2011 - Added support for optimized Huffman code tables, optimized dynamic memory allocation down to only 1 alloc. +// Also from Alex Evans: Added RGBA support, linear memory allocator (no longer needed in v1.03). +// v1.04, May. 19, 2012: Forgot to set m_pFile ptr to NULL in cfile_stream::close(). Thanks to Owen Kaluza for reporting this bug. +// Code tweaks to fix VS2008 static code analysis warnings (all looked harmless). +// Code review revealed method load_block_16_8_8() (used for the non-default H2V1 sampling mode to downsample chroma) somehow didn't get the rounding factor fix from v1.02. +// v1.05, March 25, 2020: Added Apache 2.0 alternate license + +#include "jpge.h" + +#include <stdlib.h> +#include <string.h> + +#define JPGE_MAX(a,b) (((a)>(b))?(a):(b)) +#define JPGE_MIN(a,b) (((a)<(b))?(a):(b)) + +namespace jpge { + + static inline void* jpge_malloc(size_t nSize) { return malloc(nSize); } + static inline void jpge_free(void* p) { free(p); } + + // Various JPEG enums and tables. + enum { M_SOF0 = 0xC0, M_DHT = 0xC4, M_SOI = 0xD8, M_EOI = 0xD9, M_SOS = 0xDA, M_DQT = 0xDB, M_APP0 = 0xE0 }; + enum { DC_LUM_CODES = 12, AC_LUM_CODES = 256, DC_CHROMA_CODES = 12, AC_CHROMA_CODES = 256, MAX_HUFF_SYMBOLS = 257, MAX_HUFF_CODESIZE = 32 }; + + static uint8 s_zag[64] = { 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 }; + static int16 s_std_lum_quant[64] = { 16,11,12,14,12,10,16,14,13,14,18,17,16,19,24,40,26,24,22,22,24,49,35,37,29,40,58,51,61,60,57,51,56,55,64,72,92,78,64,68,87,69,55,56,80,109,81,87,95,98,103,104,103,62,77,113,121,112,100,120,92,101,103,99 }; + static int16 s_std_croma_quant[64] = { 17,18,18,24,21,24,47,26,26,47,99,66,56,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 }; + + // Table from http://www.imagemagick.org/discourse-server/viewtopic.php?f=22&t=20333&p=98008#p98008 + // This is mozjpeg's default table, in zag order. + static int16 s_alt_quant[64] = { 16,16,16,16,17,16,18,20,20,18,25,27,24,27,25,37,34,31,31,34,37,56,40,43,40,43,40,56,85,53,62,53,53,62,53,85,75,91,74,69,74,91,75,135,106,94,94,106,135,156,131,124,131,156,189,169,169,189,238,226,238,311,311,418 }; + + static uint8 s_dc_lum_bits[17] = { 0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0 }; + static uint8 s_dc_lum_val[DC_LUM_CODES] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; + static uint8 s_ac_lum_bits[17] = { 0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d }; + static uint8 s_ac_lum_val[AC_LUM_CODES] = + { + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, + 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, + 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, + 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + }; + static uint8 s_dc_chroma_bits[17] = { 0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0 }; + static uint8 s_dc_chroma_val[DC_CHROMA_CODES] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; + static uint8 s_ac_chroma_bits[17] = { 0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77 }; + static uint8 s_ac_chroma_val[AC_CHROMA_CODES] = + { + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, + 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, + 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + }; + + // Low-level helper functions. + template <class T> inline void clear_obj(T& obj) { memset(&obj, 0, sizeof(obj)); } + + const int YR = 19595, YG = 38470, YB = 7471, CB_R = -11059, CB_G = -21709, CB_B = 32768, CR_R = 32768, CR_G = -27439, CR_B = -5329; + static inline uint8 clamp(int i) { if (static_cast<uint>(i) > 255U) { if (i < 0) i = 0; else if (i > 255) i = 255; } return static_cast<uint8>(i); } + + static inline int left_shifti(int val, uint32 bits) + { + return static_cast<int>(static_cast<uint32>(val) << bits); + } + + static void RGB_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels) + { + for (; num_pixels; pDst += 3, pSrc += 3, num_pixels--) + { + const int r = pSrc[0], g = pSrc[1], b = pSrc[2]; + pDst[0] = static_cast<uint8>((r * YR + g * YG + b * YB + 32768) >> 16); + pDst[1] = clamp(128 + ((r * CB_R + g * CB_G + b * CB_B + 32768) >> 16)); + pDst[2] = clamp(128 + ((r * CR_R + g * CR_G + b * CR_B + 32768) >> 16)); + } + } + + static void RGB_to_Y(uint8* pDst, const uint8* pSrc, int num_pixels) + { + for (; num_pixels; pDst++, pSrc += 3, num_pixels--) + pDst[0] = static_cast<uint8>((pSrc[0] * YR + pSrc[1] * YG + pSrc[2] * YB + 32768) >> 16); + } + + static void RGBA_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels) + { + for (; num_pixels; pDst += 3, pSrc += 4, num_pixels--) + { + const int r = pSrc[0], g = pSrc[1], b = pSrc[2]; + pDst[0] = static_cast<uint8>((r * YR + g * YG + b * YB + 32768) >> 16); + pDst[1] = clamp(128 + ((r * CB_R + g * CB_G + b * CB_B + 32768) >> 16)); + pDst[2] = clamp(128 + ((r * CR_R + g * CR_G + b * CR_B + 32768) >> 16)); + } + } + + static void RGBA_to_Y(uint8* pDst, const uint8* pSrc, int num_pixels) + { + for (; num_pixels; pDst++, pSrc += 4, num_pixels--) + pDst[0] = static_cast<uint8>((pSrc[0] * YR + pSrc[1] * YG + pSrc[2] * YB + 32768) >> 16); + } + + static void Y_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels) + { + for (; num_pixels; pDst += 3, pSrc++, num_pixels--) { pDst[0] = pSrc[0]; pDst[1] = 128; pDst[2] = 128; } + } + + // Forward DCT - DCT derived from jfdctint. + enum { CONST_BITS = 13, ROW_BITS = 2 }; +#define DCT_DESCALE(x, n) (((x) + (((int32)1) << ((n) - 1))) >> (n)) +#define DCT_MUL(var, c) (static_cast<int16>(var) * static_cast<int32>(c)) +#define DCT1D(s0, s1, s2, s3, s4, s5, s6, s7) \ + int32 t0 = s0 + s7, t7 = s0 - s7, t1 = s1 + s6, t6 = s1 - s6, t2 = s2 + s5, t5 = s2 - s5, t3 = s3 + s4, t4 = s3 - s4; \ + int32 t10 = t0 + t3, t13 = t0 - t3, t11 = t1 + t2, t12 = t1 - t2; \ + int32 u1 = DCT_MUL(t12 + t13, 4433); \ + s2 = u1 + DCT_MUL(t13, 6270); \ + s6 = u1 + DCT_MUL(t12, -15137); \ + u1 = t4 + t7; \ + int32 u2 = t5 + t6, u3 = t4 + t6, u4 = t5 + t7; \ + int32 z5 = DCT_MUL(u3 + u4, 9633); \ + t4 = DCT_MUL(t4, 2446); t5 = DCT_MUL(t5, 16819); \ + t6 = DCT_MUL(t6, 25172); t7 = DCT_MUL(t7, 12299); \ + u1 = DCT_MUL(u1, -7373); u2 = DCT_MUL(u2, -20995); \ + u3 = DCT_MUL(u3, -16069); u4 = DCT_MUL(u4, -3196); \ + u3 += z5; u4 += z5; \ + s0 = t10 + t11; s1 = t7 + u1 + u4; s3 = t6 + u2 + u3; s4 = t10 - t11; s5 = t5 + u2 + u4; s7 = t4 + u1 + u3; + + static void DCT2D(int32* p) + { + int32 c, * q = p; + for (c = 7; c >= 0; c--, q += 8) + { + int32 s0 = q[0], s1 = q[1], s2 = q[2], s3 = q[3], s4 = q[4], s5 = q[5], s6 = q[6], s7 = q[7]; + DCT1D(s0, s1, s2, s3, s4, s5, s6, s7); + q[0] = left_shifti(s0, ROW_BITS); q[1] = DCT_DESCALE(s1, CONST_BITS - ROW_BITS); q[2] = DCT_DESCALE(s2, CONST_BITS - ROW_BITS); q[3] = DCT_DESCALE(s3, CONST_BITS - ROW_BITS); + q[4] = left_shifti(s4, ROW_BITS); q[5] = DCT_DESCALE(s5, CONST_BITS - ROW_BITS); q[6] = DCT_DESCALE(s6, CONST_BITS - ROW_BITS); q[7] = DCT_DESCALE(s7, CONST_BITS - ROW_BITS); + } + for (q = p, c = 7; c >= 0; c--, q++) + { + int32 s0 = q[0 * 8], s1 = q[1 * 8], s2 = q[2 * 8], s3 = q[3 * 8], s4 = q[4 * 8], s5 = q[5 * 8], s6 = q[6 * 8], s7 = q[7 * 8]; + DCT1D(s0, s1, s2, s3, s4, s5, s6, s7); + q[0 * 8] = DCT_DESCALE(s0, ROW_BITS + 3); q[1 * 8] = DCT_DESCALE(s1, CONST_BITS + ROW_BITS + 3); q[2 * 8] = DCT_DESCALE(s2, CONST_BITS + ROW_BITS + 3); q[3 * 8] = DCT_DESCALE(s3, CONST_BITS + ROW_BITS + 3); + q[4 * 8] = DCT_DESCALE(s4, ROW_BITS + 3); q[5 * 8] = DCT_DESCALE(s5, CONST_BITS + ROW_BITS + 3); q[6 * 8] = DCT_DESCALE(s6, CONST_BITS + ROW_BITS + 3); q[7 * 8] = DCT_DESCALE(s7, CONST_BITS + ROW_BITS + 3); + } + } + + struct sym_freq { uint m_key, m_sym_index; }; + + // Radix sorts sym_freq[] array by 32-bit key m_key. Returns ptr to sorted values. + static inline sym_freq* radix_sort_syms(uint num_syms, sym_freq* pSyms0, sym_freq* pSyms1) + { + const uint cMaxPasses = 4; + uint32 hist[256 * cMaxPasses]; clear_obj(hist); + for (uint i = 0; i < num_syms; i++) { uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; hist[256 * 2 + ((freq >> 16) & 0xFF)]++; hist[256 * 3 + ((freq >> 24) & 0xFF)]++; } + sym_freq* pCur_syms = pSyms0, * pNew_syms = pSyms1; + uint total_passes = cMaxPasses; while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; + for (uint pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) + { + const uint32* pHist = &hist[pass << 8]; + uint offsets[256], cur_ofs = 0; + for (uint i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } + for (uint i = 0; i < num_syms; i++) + pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; + sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; + } + return pCur_syms; + } + + // calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. + static void calculate_minimum_redundancy(sym_freq* A, int n) + { + int root, leaf, next, avbl, used, dpth; + if (n == 0) return; else if (n == 1) { A[0].m_key = 1; return; } + A[0].m_key += A[1].m_key; root = 0; leaf = 2; + for (next = 1; next < n - 1; next++) + { + if (leaf >= n || A[root].m_key < A[leaf].m_key) { A[next].m_key = A[root].m_key; A[root++].m_key = next; } + else A[next].m_key = A[leaf++].m_key; + if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) { A[next].m_key += A[root].m_key; A[root++].m_key = next; } + else A[next].m_key += A[leaf++].m_key; + } + A[n - 2].m_key = 0; + for (next = n - 3; next >= 0; next--) A[next].m_key = A[A[next].m_key].m_key + 1; + avbl = 1; used = dpth = 0; root = n - 2; next = n - 1; + while (avbl > 0) + { + while (root >= 0 && (int)A[root].m_key == dpth) { used++; root--; } + while (avbl > used) { A[next--].m_key = dpth; avbl--; } + avbl = 2 * used; dpth++; used = 0; + } + } + + // Limits canonical Huffman code table's max code size to max_code_size. + static void huffman_enforce_max_code_size(int* pNum_codes, int code_list_len, int max_code_size) + { + if (code_list_len <= 1) return; + + for (int i = max_code_size + 1; i <= MAX_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; + + uint32 total = 0; + for (int i = max_code_size; i > 0; i--) + total += (((uint32)pNum_codes[i]) << (max_code_size - i)); + + while (total != (1UL << max_code_size)) + { + pNum_codes[max_code_size]--; + for (int i = max_code_size - 1; i > 0; i--) + { + if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } + } + total--; + } + } + + // Generates an optimized offman table. + void jpeg_encoder::optimize_huffman_table(int table_num, int table_len) + { + sym_freq syms0[MAX_HUFF_SYMBOLS], syms1[MAX_HUFF_SYMBOLS]; + syms0[0].m_key = 1; syms0[0].m_sym_index = 0; // dummy symbol, assures that no valid code contains all 1's + int num_used_syms = 1; + const uint32* pSym_count = &m_huff_count[table_num][0]; + for (int i = 0; i < table_len; i++) + if (pSym_count[i]) { syms0[num_used_syms].m_key = pSym_count[i]; syms0[num_used_syms++].m_sym_index = i + 1; } + sym_freq* pSyms = radix_sort_syms(num_used_syms, syms0, syms1); + calculate_minimum_redundancy(pSyms, num_used_syms); + + // Count the # of symbols of each code size. + int num_codes[1 + MAX_HUFF_CODESIZE]; clear_obj(num_codes); + for (int i = 0; i < num_used_syms; i++) + num_codes[pSyms[i].m_key]++; + + const uint JPGE_CODE_SIZE_LIMIT = 16; // the maximum possible size of a JPEG Huffman code (valid range is [9,16] - 9 vs. 8 because of the dummy symbol) + huffman_enforce_max_code_size(num_codes, num_used_syms, JPGE_CODE_SIZE_LIMIT); + + // Compute m_huff_bits array, which contains the # of symbols per code size. + clear_obj(m_huff_bits[table_num]); + for (int i = 1; i <= (int)JPGE_CODE_SIZE_LIMIT; i++) + m_huff_bits[table_num][i] = static_cast<uint8>(num_codes[i]); + + // Remove the dummy symbol added above, which must be in largest bucket. + for (int i = JPGE_CODE_SIZE_LIMIT; i >= 1; i--) + { + if (m_huff_bits[table_num][i]) { m_huff_bits[table_num][i]--; break; } + } + + // Compute the m_huff_val array, which contains the symbol indices sorted by code size (smallest to largest). + for (int i = num_used_syms - 1; i >= 1; i--) + m_huff_val[table_num][num_used_syms - 1 - i] = static_cast<uint8>(pSyms[i].m_sym_index - 1); + } + + // JPEG marker generation. + void jpeg_encoder::emit_byte(uint8 i) + { + m_all_stream_writes_succeeded = m_all_stream_writes_succeeded && m_pStream->put_obj(i); + } + + void jpeg_encoder::emit_word(uint i) + { + emit_byte(uint8(i >> 8)); emit_byte(uint8(i & 0xFF)); + } + + void jpeg_encoder::emit_marker(int marker) + { + emit_byte(uint8(0xFF)); emit_byte(uint8(marker)); + } + + // Emit JFIF marker + void jpeg_encoder::emit_jfif_app0() + { + emit_marker(M_APP0); + emit_word(2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); + emit_byte(0x4A); emit_byte(0x46); emit_byte(0x49); emit_byte(0x46); /* Identifier: ASCII "JFIF" */ + emit_byte(0); + emit_byte(1); /* Major version */ + emit_byte(1); /* Minor version */ + emit_byte(0); /* Density unit */ + emit_word(1); + emit_word(1); + emit_byte(0); /* No thumbnail image */ + emit_byte(0); + } + + // Emit quantization tables + void jpeg_encoder::emit_dqt() + { + for (int i = 0; i < ((m_num_components == 3) ? 2 : 1); i++) + { + emit_marker(M_DQT); + emit_word(64 + 1 + 2); + emit_byte(static_cast<uint8>(i)); + for (int j = 0; j < 64; j++) + emit_byte(static_cast<uint8>(m_quantization_tables[i][j])); + } + } + + // Emit start of frame marker + void jpeg_encoder::emit_sof() + { + emit_marker(M_SOF0); /* baseline */ + emit_word(3 * m_num_components + 2 + 5 + 1); + emit_byte(8); /* precision */ + emit_word(m_image_y); + emit_word(m_image_x); + emit_byte(m_num_components); + for (int i = 0; i < m_num_components; i++) + { + emit_byte(static_cast<uint8>(i + 1)); /* component ID */ + emit_byte((m_comp_h_samp[i] << 4) + m_comp_v_samp[i]); /* h and v sampling */ + emit_byte(i > 0); /* quant. table num */ + } + } + + // Emit Huffman table. + void jpeg_encoder::emit_dht(uint8* bits, uint8* val, int index, bool ac_flag) + { + emit_marker(M_DHT); + + int length = 0; + for (int i = 1; i <= 16; i++) + length += bits[i]; + + emit_word(length + 2 + 1 + 16); + emit_byte(static_cast<uint8>(index + (ac_flag << 4))); + + for (int i = 1; i <= 16; i++) + emit_byte(bits[i]); + + for (int i = 0; i < length; i++) + emit_byte(val[i]); + } + + // Emit all Huffman tables. + void jpeg_encoder::emit_dhts() + { + emit_dht(m_huff_bits[0 + 0], m_huff_val[0 + 0], 0, false); + emit_dht(m_huff_bits[2 + 0], m_huff_val[2 + 0], 0, true); + if (m_num_components == 3) + { + emit_dht(m_huff_bits[0 + 1], m_huff_val[0 + 1], 1, false); + emit_dht(m_huff_bits[2 + 1], m_huff_val[2 + 1], 1, true); + } + } + + // emit start of scan + void jpeg_encoder::emit_sos() + { + emit_marker(M_SOS); + emit_word(2 * m_num_components + 2 + 1 + 3); + emit_byte(m_num_components); + for (int i = 0; i < m_num_components; i++) + { + emit_byte(static_cast<uint8>(i + 1)); + if (i == 0) + emit_byte((0 << 4) + 0); + else + emit_byte((1 << 4) + 1); + } + emit_byte(0); /* spectral selection */ + emit_byte(63); + emit_byte(0); + } + + // Emit all markers at beginning of image file. + void jpeg_encoder::emit_markers() + { + emit_marker(M_SOI); + emit_jfif_app0(); + emit_dqt(); + emit_sof(); + emit_dhts(); + emit_sos(); + } + + // Compute the actual canonical Huffman codes/code sizes given the JPEG huff bits and val arrays. + void jpeg_encoder::compute_huffman_table(uint* codes, uint8* code_sizes, uint8* bits, uint8* val) + { + int i, l, last_p, si; + uint8 huff_size[257]; + uint huff_code[257]; + uint code; + + int p = 0; + for (l = 1; l <= 16; l++) + for (i = 1; i <= bits[l]; i++) + huff_size[p++] = (char)l; + + huff_size[p] = 0; last_p = p; // write sentinel + + code = 0; si = huff_size[0]; p = 0; + + while (huff_size[p]) + { + while (huff_size[p] == si) + huff_code[p++] = code++; + code <<= 1; + si++; + } + + memset(codes, 0, sizeof(codes[0]) * 256); + memset(code_sizes, 0, sizeof(code_sizes[0]) * 256); + for (p = 0; p < last_p; p++) + { + codes[val[p]] = huff_code[p]; + code_sizes[val[p]] = huff_size[p]; + } + } + + // Quantization table generation. + void jpeg_encoder::compute_quant_table(int32* pDst, int16* pSrc) + { + int32 q; + if (m_params.m_quality < 50) + q = 5000 / m_params.m_quality; + else + q = 200 - m_params.m_quality * 2; + for (int i = 0; i < 64; i++) + { + int32 j = *pSrc++; j = (j * q + 50L) / 100L; + *pDst++ = JPGE_MIN(JPGE_MAX(j, 1), 255); + } + } + + // Higher-level methods. + void jpeg_encoder::first_pass_init() + { + m_bit_buffer = 0; m_bits_in = 0; + memset(m_last_dc_val, 0, 3 * sizeof(m_last_dc_val[0])); + m_mcu_y_ofs = 0; + m_pass_num = 1; + } + + bool jpeg_encoder::second_pass_init() + { + compute_huffman_table(&m_huff_codes[0 + 0][0], &m_huff_code_sizes[0 + 0][0], m_huff_bits[0 + 0], m_huff_val[0 + 0]); + compute_huffman_table(&m_huff_codes[2 + 0][0], &m_huff_code_sizes[2 + 0][0], m_huff_bits[2 + 0], m_huff_val[2 + 0]); + if (m_num_components > 1) + { + compute_huffman_table(&m_huff_codes[0 + 1][0], &m_huff_code_sizes[0 + 1][0], m_huff_bits[0 + 1], m_huff_val[0 + 1]); + compute_huffman_table(&m_huff_codes[2 + 1][0], &m_huff_code_sizes[2 + 1][0], m_huff_bits[2 + 1], m_huff_val[2 + 1]); + } + first_pass_init(); + emit_markers(); + m_pass_num = 2; + return true; + } + + bool jpeg_encoder::jpg_open(int p_x_res, int p_y_res, int src_channels) + { + m_num_components = 3; + switch (m_params.m_subsampling) + { + case Y_ONLY: + { + m_num_components = 1; + m_comp_h_samp[0] = 1; m_comp_v_samp[0] = 1; + m_mcu_x = 8; m_mcu_y = 8; + break; + } + case H1V1: + { + m_comp_h_samp[0] = 1; m_comp_v_samp[0] = 1; + m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1; + m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1; + m_mcu_x = 8; m_mcu_y = 8; + break; + } + case H2V1: + { + m_comp_h_samp[0] = 2; m_comp_v_samp[0] = 1; + m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1; + m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1; + m_mcu_x = 16; m_mcu_y = 8; + break; + } + case H2V2: + { + m_comp_h_samp[0] = 2; m_comp_v_samp[0] = 2; + m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1; + m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1; + m_mcu_x = 16; m_mcu_y = 16; + } + } + + m_image_x = p_x_res; m_image_y = p_y_res; + m_image_bpp = src_channels; + m_image_bpl = m_image_x * src_channels; + m_image_x_mcu = (m_image_x + m_mcu_x - 1) & (~(m_mcu_x - 1)); + m_image_y_mcu = (m_image_y + m_mcu_y - 1) & (~(m_mcu_y - 1)); + m_image_bpl_xlt = m_image_x * m_num_components; + m_image_bpl_mcu = m_image_x_mcu * m_num_components; + m_mcus_per_row = m_image_x_mcu / m_mcu_x; + + if ((m_mcu_lines[0] = static_cast<uint8*>(jpge_malloc(m_image_bpl_mcu * m_mcu_y))) == NULL) return false; + for (int i = 1; i < m_mcu_y; i++) + m_mcu_lines[i] = m_mcu_lines[i - 1] + m_image_bpl_mcu; + + if (m_params.m_use_std_tables) + { + compute_quant_table(m_quantization_tables[0], s_std_lum_quant); + compute_quant_table(m_quantization_tables[1], m_params.m_no_chroma_discrim_flag ? s_std_lum_quant : s_std_croma_quant); + } + else + { + compute_quant_table(m_quantization_tables[0], s_alt_quant); + memcpy(m_quantization_tables[1], m_quantization_tables[0], sizeof(m_quantization_tables[1])); + } + + m_out_buf_left = JPGE_OUT_BUF_SIZE; + m_pOut_buf = m_out_buf; + + if (m_params.m_two_pass_flag) + { + clear_obj(m_huff_count); + first_pass_init(); + } + else + { + memcpy(m_huff_bits[0 + 0], s_dc_lum_bits, 17); memcpy(m_huff_val[0 + 0], s_dc_lum_val, DC_LUM_CODES); + memcpy(m_huff_bits[2 + 0], s_ac_lum_bits, 17); memcpy(m_huff_val[2 + 0], s_ac_lum_val, AC_LUM_CODES); + memcpy(m_huff_bits[0 + 1], s_dc_chroma_bits, 17); memcpy(m_huff_val[0 + 1], s_dc_chroma_val, DC_CHROMA_CODES); + memcpy(m_huff_bits[2 + 1], s_ac_chroma_bits, 17); memcpy(m_huff_val[2 + 1], s_ac_chroma_val, AC_CHROMA_CODES); + if (!second_pass_init()) return false; // in effect, skip over the first pass + } + return m_all_stream_writes_succeeded; + } + + void jpeg_encoder::load_block_8_8_grey(int x) + { + uint8* pSrc; + sample_array_t* pDst = m_sample_array; + x <<= 3; + for (int i = 0; i < 8; i++, pDst += 8) + { + pSrc = m_mcu_lines[i] + x; + pDst[0] = pSrc[0] - 128; pDst[1] = pSrc[1] - 128; pDst[2] = pSrc[2] - 128; pDst[3] = pSrc[3] - 128; + pDst[4] = pSrc[4] - 128; pDst[5] = pSrc[5] - 128; pDst[6] = pSrc[6] - 128; pDst[7] = pSrc[7] - 128; + } + } + + void jpeg_encoder::load_block_8_8(int x, int y, int c) + { + uint8* pSrc; + sample_array_t* pDst = m_sample_array; + x = (x * (8 * 3)) + c; + y <<= 3; + for (int i = 0; i < 8; i++, pDst += 8) + { + pSrc = m_mcu_lines[y + i] + x; + pDst[0] = pSrc[0 * 3] - 128; pDst[1] = pSrc[1 * 3] - 128; pDst[2] = pSrc[2 * 3] - 128; pDst[3] = pSrc[3 * 3] - 128; + pDst[4] = pSrc[4 * 3] - 128; pDst[5] = pSrc[5 * 3] - 128; pDst[6] = pSrc[6 * 3] - 128; pDst[7] = pSrc[7 * 3] - 128; + } + } + + void jpeg_encoder::load_block_16_8(int x, int c) + { + uint8* pSrc1, * pSrc2; + sample_array_t* pDst = m_sample_array; + x = (x * (16 * 3)) + c; + for (int i = 0; i < 16; i += 2, pDst += 8) + { + pSrc1 = m_mcu_lines[i + 0] + x; + pSrc2 = m_mcu_lines[i + 1] + x; + pDst[0] = ((pSrc1[0 * 3] + pSrc1[1 * 3] + pSrc2[0 * 3] + pSrc2[1 * 3] + 2) >> 2) - 128; pDst[1] = ((pSrc1[2 * 3] + pSrc1[3 * 3] + pSrc2[2 * 3] + pSrc2[3 * 3] + 2) >> 2) - 128; + pDst[2] = ((pSrc1[4 * 3] + pSrc1[5 * 3] + pSrc2[4 * 3] + pSrc2[5 * 3] + 2) >> 2) - 128; pDst[3] = ((pSrc1[6 * 3] + pSrc1[7 * 3] + pSrc2[6 * 3] + pSrc2[7 * 3] + 2) >> 2) - 128; + pDst[4] = ((pSrc1[8 * 3] + pSrc1[9 * 3] + pSrc2[8 * 3] + pSrc2[9 * 3] + 2) >> 2) - 128; pDst[5] = ((pSrc1[10 * 3] + pSrc1[11 * 3] + pSrc2[10 * 3] + pSrc2[11 * 3] + 2) >> 2) - 128; + pDst[6] = ((pSrc1[12 * 3] + pSrc1[13 * 3] + pSrc2[12 * 3] + pSrc2[13 * 3] + 2) >> 2) - 128; pDst[7] = ((pSrc1[14 * 3] + pSrc1[15 * 3] + pSrc2[14 * 3] + pSrc2[15 * 3] + 2) >> 2) - 128; + } + } + + void jpeg_encoder::load_block_16_8_8(int x, int c) + { + uint8* pSrc1; + sample_array_t* pDst = m_sample_array; + x = (x * (16 * 3)) + c; + for (int i = 0; i < 8; i++, pDst += 8) + { + pSrc1 = m_mcu_lines[i + 0] + x; + pDst[0] = ((pSrc1[0 * 3] + pSrc1[1 * 3] + 1) >> 1) - 128; pDst[1] = ((pSrc1[2 * 3] + pSrc1[3 * 3] + 1) >> 1) - 128; + pDst[2] = ((pSrc1[4 * 3] + pSrc1[5 * 3] + 1) >> 1) - 128; pDst[3] = ((pSrc1[6 * 3] + pSrc1[7 * 3] + 1) >> 1) - 128; + pDst[4] = ((pSrc1[8 * 3] + pSrc1[9 * 3] + 1) >> 1) - 128; pDst[5] = ((pSrc1[10 * 3] + pSrc1[11 * 3] + 1) >> 1) - 128; + pDst[6] = ((pSrc1[12 * 3] + pSrc1[13 * 3] + 1) >> 1) - 128; pDst[7] = ((pSrc1[14 * 3] + pSrc1[15 * 3] + 1) >> 1) - 128; + } + } + + void jpeg_encoder::load_quantized_coefficients(int component_num) + { + int32* q = m_quantization_tables[component_num > 0]; + int16* pDst = m_coefficient_array; + for (int i = 0; i < 64; i++) + { + sample_array_t j = m_sample_array[s_zag[i]]; + if (j < 0) + { + if ((j = -j + (*q >> 1)) < *q) + *pDst++ = 0; + else + *pDst++ = static_cast<int16>(-(j / *q)); + } + else + { + if ((j = j + (*q >> 1)) < *q) + *pDst++ = 0; + else + *pDst++ = static_cast<int16>((j / *q)); + } + q++; + } + } + + void jpeg_encoder::flush_output_buffer() + { + if (m_out_buf_left != JPGE_OUT_BUF_SIZE) + m_all_stream_writes_succeeded = m_all_stream_writes_succeeded && m_pStream->put_buf(m_out_buf, JPGE_OUT_BUF_SIZE - m_out_buf_left); + m_pOut_buf = m_out_buf; + m_out_buf_left = JPGE_OUT_BUF_SIZE; + } + + void jpeg_encoder::put_bits(uint bits, uint len) + { + m_bit_buffer |= ((uint32)bits << (24 - (m_bits_in += len))); + while (m_bits_in >= 8) + { + uint8 c; +#define JPGE_PUT_BYTE(c) { *m_pOut_buf++ = (c); if (--m_out_buf_left == 0) flush_output_buffer(); } + JPGE_PUT_BYTE(c = (uint8)((m_bit_buffer >> 16) & 0xFF)); + if (c == 0xFF) JPGE_PUT_BYTE(0); + m_bit_buffer <<= 8; + m_bits_in -= 8; + } + } + + void jpeg_encoder::code_coefficients_pass_one(int component_num) + { + if (component_num >= 3) return; // just to shut up static analysis + int i, run_len, nbits, temp1; + int16* src = m_coefficient_array; + uint32* dc_count = component_num ? m_huff_count[0 + 1] : m_huff_count[0 + 0], * ac_count = component_num ? m_huff_count[2 + 1] : m_huff_count[2 + 0]; + + temp1 = src[0] - m_last_dc_val[component_num]; + m_last_dc_val[component_num] = src[0]; + if (temp1 < 0) temp1 = -temp1; + + nbits = 0; + while (temp1) + { + nbits++; temp1 >>= 1; + } + + dc_count[nbits]++; + for (run_len = 0, i = 1; i < 64; i++) + { + if ((temp1 = m_coefficient_array[i]) == 0) + run_len++; + else + { + while (run_len >= 16) + { + ac_count[0xF0]++; + run_len -= 16; + } + if (temp1 < 0) temp1 = -temp1; + nbits = 1; + while (temp1 >>= 1) nbits++; + ac_count[(run_len << 4) + nbits]++; + run_len = 0; + } + } + if (run_len) ac_count[0]++; + } + + void jpeg_encoder::code_coefficients_pass_two(int component_num) + { + int i, j, run_len, nbits, temp1, temp2; + int16* pSrc = m_coefficient_array; + uint* codes[2]; + uint8* code_sizes[2]; + + if (component_num == 0) + { + codes[0] = m_huff_codes[0 + 0]; codes[1] = m_huff_codes[2 + 0]; + code_sizes[0] = m_huff_code_sizes[0 + 0]; code_sizes[1] = m_huff_code_sizes[2 + 0]; + } + else + { + codes[0] = m_huff_codes[0 + 1]; codes[1] = m_huff_codes[2 + 1]; + code_sizes[0] = m_huff_code_sizes[0 + 1]; code_sizes[1] = m_huff_code_sizes[2 + 1]; + } + + temp1 = temp2 = pSrc[0] - m_last_dc_val[component_num]; + m_last_dc_val[component_num] = pSrc[0]; + + if (temp1 < 0) + { + temp1 = -temp1; temp2--; + } + + nbits = 0; + while (temp1) + { + nbits++; temp1 >>= 1; + } + + put_bits(codes[0][nbits], code_sizes[0][nbits]); + if (nbits) put_bits(temp2 & ((1 << nbits) - 1), nbits); + + for (run_len = 0, i = 1; i < 64; i++) + { + if ((temp1 = m_coefficient_array[i]) == 0) + run_len++; + else + { + while (run_len >= 16) + { + put_bits(codes[1][0xF0], code_sizes[1][0xF0]); + run_len -= 16; + } + if ((temp2 = temp1) < 0) + { + temp1 = -temp1; + temp2--; + } + nbits = 1; + while (temp1 >>= 1) + nbits++; + j = (run_len << 4) + nbits; + put_bits(codes[1][j], code_sizes[1][j]); + put_bits(temp2 & ((1 << nbits) - 1), nbits); + run_len = 0; + } + } + if (run_len) + put_bits(codes[1][0], code_sizes[1][0]); + } + + void jpeg_encoder::code_block(int component_num) + { + DCT2D(m_sample_array); + load_quantized_coefficients(component_num); + if (m_pass_num == 1) + code_coefficients_pass_one(component_num); + else + code_coefficients_pass_two(component_num); + } + + void jpeg_encoder::process_mcu_row() + { + if (m_num_components == 1) + { + for (int i = 0; i < m_mcus_per_row; i++) + { + load_block_8_8_grey(i); code_block(0); + } + } + else if ((m_comp_h_samp[0] == 1) && (m_comp_v_samp[0] == 1)) + { + for (int i = 0; i < m_mcus_per_row; i++) + { + load_block_8_8(i, 0, 0); code_block(0); load_block_8_8(i, 0, 1); code_block(1); load_block_8_8(i, 0, 2); code_block(2); + } + } + else if ((m_comp_h_samp[0] == 2) && (m_comp_v_samp[0] == 1)) + { + for (int i = 0; i < m_mcus_per_row; i++) + { + load_block_8_8(i * 2 + 0, 0, 0); code_block(0); load_block_8_8(i * 2 + 1, 0, 0); code_block(0); + load_block_16_8_8(i, 1); code_block(1); load_block_16_8_8(i, 2); code_block(2); + } + } + else if ((m_comp_h_samp[0] == 2) && (m_comp_v_samp[0] == 2)) + { + for (int i = 0; i < m_mcus_per_row; i++) + { + load_block_8_8(i * 2 + 0, 0, 0); code_block(0); load_block_8_8(i * 2 + 1, 0, 0); code_block(0); + load_block_8_8(i * 2 + 0, 1, 0); code_block(0); load_block_8_8(i * 2 + 1, 1, 0); code_block(0); + load_block_16_8(i, 1); code_block(1); load_block_16_8(i, 2); code_block(2); + } + } + } + + bool jpeg_encoder::terminate_pass_one() + { + optimize_huffman_table(0 + 0, DC_LUM_CODES); optimize_huffman_table(2 + 0, AC_LUM_CODES); + if (m_num_components > 1) + { + optimize_huffman_table(0 + 1, DC_CHROMA_CODES); optimize_huffman_table(2 + 1, AC_CHROMA_CODES); + } + return second_pass_init(); + } + + bool jpeg_encoder::terminate_pass_two() + { + put_bits(0x7F, 7); + flush_output_buffer(); + emit_marker(M_EOI); + m_pass_num++; // purposely bump up m_pass_num, for debugging + return true; + } + + bool jpeg_encoder::process_end_of_image() + { + if (m_mcu_y_ofs) + { + if (m_mcu_y_ofs < 16) // check here just to shut up static analysis + { + for (int i = m_mcu_y_ofs; i < m_mcu_y; i++) + memcpy(m_mcu_lines[i], m_mcu_lines[m_mcu_y_ofs - 1], m_image_bpl_mcu); + } + + process_mcu_row(); + } + + if (m_pass_num == 1) + return terminate_pass_one(); + else + return terminate_pass_two(); + } + + void jpeg_encoder::load_mcu(const void* pSrc) + { + const uint8* Psrc = reinterpret_cast<const uint8*>(pSrc); + + uint8* pDst = m_mcu_lines[m_mcu_y_ofs]; // OK to write up to m_image_bpl_xlt bytes to pDst + + if (m_num_components == 1) + { + if (m_image_bpp == 4) + RGBA_to_Y(pDst, Psrc, m_image_x); + else if (m_image_bpp == 3) + RGB_to_Y(pDst, Psrc, m_image_x); + else + memcpy(pDst, Psrc, m_image_x); + } + else + { + if (m_image_bpp == 4) + RGBA_to_YCC(pDst, Psrc, m_image_x); + else if (m_image_bpp == 3) + RGB_to_YCC(pDst, Psrc, m_image_x); + else + Y_to_YCC(pDst, Psrc, m_image_x); + } + + // Possibly duplicate pixels at end of scanline if not a multiple of 8 or 16 + if (m_num_components == 1) + memset(m_mcu_lines[m_mcu_y_ofs] + m_image_bpl_xlt, pDst[m_image_bpl_xlt - 1], m_image_x_mcu - m_image_x); + else + { + const uint8 y = pDst[m_image_bpl_xlt - 3 + 0], cb = pDst[m_image_bpl_xlt - 3 + 1], cr = pDst[m_image_bpl_xlt - 3 + 2]; + uint8* q = m_mcu_lines[m_mcu_y_ofs] + m_image_bpl_xlt; + for (int i = m_image_x; i < m_image_x_mcu; i++) + { + *q++ = y; *q++ = cb; *q++ = cr; + } + } + + if (++m_mcu_y_ofs == m_mcu_y) + { + process_mcu_row(); + m_mcu_y_ofs = 0; + } + } + + void jpeg_encoder::clear() + { + m_mcu_lines[0] = NULL; + m_pass_num = 0; + m_all_stream_writes_succeeded = true; + } + + jpeg_encoder::jpeg_encoder() + { + clear(); + } + + jpeg_encoder::~jpeg_encoder() + { + deinit(); + } + + bool jpeg_encoder::init(output_stream* pStream, int width, int height, int src_channels, const params& comp_params) + { + deinit(); + if (((!pStream) || (width < 1) || (height < 1)) || ((src_channels != 1) && (src_channels != 3) && (src_channels != 4)) || (!comp_params.check())) return false; + m_pStream = pStream; + m_params = comp_params; + return jpg_open(width, height, src_channels); + } + + void jpeg_encoder::deinit() + { + jpge_free(m_mcu_lines[0]); + clear(); + } + + bool jpeg_encoder::process_scanline(const void* pScanline) + { + if ((m_pass_num < 1) || (m_pass_num > 2)) return false; + if (m_all_stream_writes_succeeded) + { + if (!pScanline) + { + if (!process_end_of_image()) return false; + } + else + { + load_mcu(pScanline); + } + } + return m_all_stream_writes_succeeded; + } + + // Higher level wrappers/examples (optional). +#include <stdio.h> + + class cfile_stream : public output_stream + { + cfile_stream(const cfile_stream&); + cfile_stream& operator= (const cfile_stream&); + + FILE* m_pFile; + bool m_bStatus; + + public: + cfile_stream() : m_pFile(NULL), m_bStatus(false) { } + + virtual ~cfile_stream() + { + close(); + } + + bool open(const char* pFilename) + { + close(); + m_pFile = fopen(pFilename, "wb"); + m_bStatus = (m_pFile != NULL); + return m_bStatus; + } + + bool close() + { + if (m_pFile) + { + if (fclose(m_pFile) == EOF) + { + m_bStatus = false; + } + m_pFile = NULL; + } + return m_bStatus; + } + + virtual bool put_buf(const void* pBuf, int len) + { + m_bStatus = m_bStatus && (fwrite(pBuf, len, 1, m_pFile) == 1); + return m_bStatus; + } + + uint get_size() const + { + return m_pFile ? ftell(m_pFile) : 0; + } + }; + + // Writes JPEG image to file. + bool compress_image_to_jpeg_file(const char* pFilename, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params) + { + cfile_stream dst_stream; + if (!dst_stream.open(pFilename)) + return false; + + jpge::jpeg_encoder dst_image; + if (!dst_image.init(&dst_stream, width, height, num_channels, comp_params)) + return false; + + for (uint pass_index = 0; pass_index < dst_image.get_total_passes(); pass_index++) + { + for (int i = 0; i < height; i++) + { + const uint8* pBuf = pImage_data + i * width * num_channels; + if (!dst_image.process_scanline(pBuf)) + return false; + } + if (!dst_image.process_scanline(NULL)) + return false; + } + + dst_image.deinit(); + + return dst_stream.close(); + } + + class memory_stream : public output_stream + { + memory_stream(const memory_stream&); + memory_stream& operator= (const memory_stream&); + + uint8* m_pBuf; + uint m_buf_size, m_buf_ofs; + + public: + memory_stream(void* pBuf, uint buf_size) : m_pBuf(static_cast<uint8*>(pBuf)), m_buf_size(buf_size), m_buf_ofs(0) { } + + virtual ~memory_stream() { } + + virtual bool put_buf(const void* pBuf, int len) + { + uint buf_remaining = m_buf_size - m_buf_ofs; + if ((uint)len > buf_remaining) + return false; + memcpy(m_pBuf + m_buf_ofs, pBuf, len); + m_buf_ofs += len; + return true; + } + + uint get_size() const + { + return m_buf_ofs; + } + }; + + bool compress_image_to_jpeg_file_in_memory(void* pDstBuf, int& buf_size, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params) + { + if ((!pDstBuf) || (!buf_size)) + return false; + + memory_stream dst_stream(pDstBuf, buf_size); + + buf_size = 0; + + jpge::jpeg_encoder dst_image; + if (!dst_image.init(&dst_stream, width, height, num_channels, comp_params)) + return false; + + for (uint pass_index = 0; pass_index < dst_image.get_total_passes(); pass_index++) + { + for (int i = 0; i < height; i++) + { + const uint8* pScanline = pImage_data + i * width * num_channels; + if (!dst_image.process_scanline(pScanline)) + return false; + } + if (!dst_image.process_scanline(NULL)) + return false; + } + + dst_image.deinit(); + + buf_size = dst_stream.get_size(); + return true; + } + +} // namespace jpge + diff --git a/thirdparty/jpeg-compressor/jpge.h b/thirdparty/jpeg-compressor/jpge.h new file mode 100644 index 0000000000..d10510e553 --- /dev/null +++ b/thirdparty/jpeg-compressor/jpge.h @@ -0,0 +1,174 @@ +// jpge.h - C++ class for JPEG compression. +// Public Domain or Apache 2.0, Richard Geldreich <richgel99@gmail.com> +// Alex Evans: Added RGBA support, linear memory allocator. +#ifndef JPEG_ENCODER_H +#define JPEG_ENCODER_H + +namespace jpge +{ + typedef unsigned char uint8; + typedef signed short int16; + typedef signed int int32; + typedef unsigned short uint16; + typedef unsigned int uint32; + typedef unsigned int uint; + + // JPEG chroma subsampling factors. Y_ONLY (grayscale images) and H2V2 (color images) are the most common. + enum subsampling_t { Y_ONLY = 0, H1V1 = 1, H2V1 = 2, H2V2 = 3 }; + + // JPEG compression parameters structure. + struct params + { + inline params() : m_quality(85), m_subsampling(H2V2), m_no_chroma_discrim_flag(false), m_two_pass_flag(false), m_use_std_tables(false) { } + + inline bool check() const + { + if ((m_quality < 1) || (m_quality > 100)) return false; + if ((uint)m_subsampling > (uint)H2V2) return false; + return true; + } + + // Quality: 1-100, higher is better. Typical values are around 50-95. + int m_quality; + + // m_subsampling: + // 0 = Y (grayscale) only + // 1 = YCbCr, no subsampling (H1V1, YCbCr 1x1x1, 3 blocks per MCU) + // 2 = YCbCr, H2V1 subsampling (YCbCr 2x1x1, 4 blocks per MCU) + // 3 = YCbCr, H2V2 subsampling (YCbCr 4x1x1, 6 blocks per MCU-- very common) + subsampling_t m_subsampling; + + // Disables CbCr discrimination - only intended for testing. + // If true, the Y quantization table is also used for the CbCr channels. + bool m_no_chroma_discrim_flag; + + bool m_two_pass_flag; + + // By default we use the same quantization tables as mozjpeg's default. + // Set to true to use the traditional tables from JPEG Annex K. + bool m_use_std_tables; + }; + + // Writes JPEG image to a file. + // num_channels must be 1 (Y) or 3 (RGB), image pitch must be width*num_channels. + bool compress_image_to_jpeg_file(const char* pFilename, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params = params()); + + // Writes JPEG image to memory buffer. + // On entry, buf_size is the size of the output buffer pointed at by pBuf, which should be at least ~1024 bytes. + // If return value is true, buf_size will be set to the size of the compressed data. + bool compress_image_to_jpeg_file_in_memory(void* pBuf, int& buf_size, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params = params()); + + // Output stream abstract class - used by the jpeg_encoder class to write to the output stream. + // put_buf() is generally called with len==JPGE_OUT_BUF_SIZE bytes, but for headers it'll be called with smaller amounts. + class output_stream + { + public: + virtual ~output_stream() { }; + virtual bool put_buf(const void* Pbuf, int len) = 0; + template<class T> inline bool put_obj(const T& obj) { return put_buf(&obj, sizeof(T)); } + }; + + // Lower level jpeg_encoder class - useful if more control is needed than the above helper functions. + class jpeg_encoder + { + public: + jpeg_encoder(); + ~jpeg_encoder(); + + // Initializes the compressor. + // pStream: The stream object to use for writing compressed data. + // params - Compression parameters structure, defined above. + // width, height - Image dimensions. + // channels - May be 1, or 3. 1 indicates grayscale, 3 indicates RGB source data. + // Returns false on out of memory or if a stream write fails. + bool init(output_stream* pStream, int width, int height, int src_channels, const params& comp_params = params()); + + const params& get_params() const { return m_params; } + + // Deinitializes the compressor, freeing any allocated memory. May be called at any time. + void deinit(); + + uint get_total_passes() const { return m_params.m_two_pass_flag ? 2 : 1; } + inline uint get_cur_pass() { return m_pass_num; } + + // Call this method with each source scanline. + // width * src_channels bytes per scanline is expected (RGB or Y format). + // You must call with NULL after all scanlines are processed to finish compression. + // Returns false on out of memory or if a stream write fails. + bool process_scanline(const void* pScanline); + + private: + jpeg_encoder(const jpeg_encoder&); + jpeg_encoder& operator =(const jpeg_encoder&); + + typedef int32 sample_array_t; + + output_stream* m_pStream; + params m_params; + uint8 m_num_components; + uint8 m_comp_h_samp[3], m_comp_v_samp[3]; + int m_image_x, m_image_y, m_image_bpp, m_image_bpl; + int m_image_x_mcu, m_image_y_mcu; + int m_image_bpl_xlt, m_image_bpl_mcu; + int m_mcus_per_row; + int m_mcu_x, m_mcu_y; + uint8* m_mcu_lines[16]; + uint8 m_mcu_y_ofs; + sample_array_t m_sample_array[64]; + int16 m_coefficient_array[64]; + int32 m_quantization_tables[2][64]; + uint m_huff_codes[4][256]; + uint8 m_huff_code_sizes[4][256]; + uint8 m_huff_bits[4][17]; + uint8 m_huff_val[4][256]; + uint32 m_huff_count[4][256]; + int m_last_dc_val[3]; + enum { JPGE_OUT_BUF_SIZE = 2048 }; + uint8 m_out_buf[JPGE_OUT_BUF_SIZE]; + uint8* m_pOut_buf; + uint m_out_buf_left; + uint32 m_bit_buffer; + uint m_bits_in; + uint8 m_pass_num; + bool m_all_stream_writes_succeeded; + + void optimize_huffman_table(int table_num, int table_len); + void emit_byte(uint8 i); + void emit_word(uint i); + void emit_marker(int marker); + void emit_jfif_app0(); + void emit_dqt(); + void emit_sof(); + void emit_dht(uint8* bits, uint8* val, int index, bool ac_flag); + void emit_dhts(); + void emit_sos(); + void emit_markers(); + void compute_huffman_table(uint* codes, uint8* code_sizes, uint8* bits, uint8* val); + void compute_quant_table(int32* dst, int16* src); + void adjust_quant_table(int32* dst, int32* src); + void first_pass_init(); + bool second_pass_init(); + bool jpg_open(int p_x_res, int p_y_res, int src_channels); + void load_block_8_8_grey(int x); + void load_block_8_8(int x, int y, int c); + void load_block_16_8(int x, int c); + void load_block_16_8_8(int x, int c); + void load_quantized_coefficients(int component_num); + void flush_output_buffer(); + void put_bits(uint bits, uint len); + void code_coefficients_pass_one(int component_num); + void code_coefficients_pass_two(int component_num); + void code_block(int component_num); + void process_mcu_row(); + bool terminate_pass_one(); + bool terminate_pass_two(); + bool process_end_of_image(); + void load_mcu(const void* src); + void clear(); + void init(); + }; + +} // namespace jpge + +#endif // JPEG_ENCODER + diff --git a/thirdparty/openxr/include/openxr/openxr.h b/thirdparty/openxr/include/openxr/openxr.h index 8798e5a6e0..6c6a52d27e 100644 --- a/thirdparty/openxr/include/openxr/openxr.h +++ b/thirdparty/openxr/include/openxr/openxr.h @@ -25,12 +25,15 @@ extern "C" { ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL)) // OpenXR current version number. -#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 22) +#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 23) #define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL) #define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL) #define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL) +#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16 + + #if !defined(XR_NULL_HANDLE) #if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED #define XR_NULL_HANDLE nullptr @@ -120,7 +123,6 @@ XR_DEFINE_HANDLE(XrActionSet) #define XR_MAX_PATH_LENGTH 256 #define XR_MAX_STRUCTURE_NAME_SIZE 64 #define XR_MAX_RESULT_STRING_SIZE 64 -#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16 #define XR_MAX_ACTION_SET_NAME_SIZE 64 #define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128 #define XR_MAX_ACTION_NAME_SIZE 64 @@ -196,6 +198,10 @@ typedef enum XrResult { XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005, XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000, XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000, + XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB = -1000113000, + XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB = -1000113001, + XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB = -1000113002, + XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB = -1000113003, XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000, XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001, XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002, @@ -305,6 +311,9 @@ typedef enum XrStructureType { XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000, + XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT = 1000049001, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT = 1000049002, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT = 1000049003, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002, @@ -332,6 +341,7 @@ typedef enum XrStructureType { XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000, + XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT = 1000078000, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000, @@ -371,6 +381,12 @@ typedef enum XrStructureType { XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003, XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000, + XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB = 1000113004, + XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB = 1000113003, + XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB = 1000113007, + XR_TYPE_SPACE_COMPONENT_STATUS_FB = 1000113001, + XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB = 1000113005, + XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB = 1000113006, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002, @@ -388,12 +404,14 @@ typedef enum XrStructureType { XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022, + XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB = 1000118023, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030, XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000, XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001, XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004, + XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB = 1000119005, XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001, @@ -404,6 +422,17 @@ typedef enum XrStructureType { XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001, + XR_TYPE_SPACE_QUERY_INFO_FB = 1000156001, + XR_TYPE_SPACE_QUERY_RESULTS_FB = 1000156002, + XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB = 1000156003, + XR_TYPE_SPACE_UUID_FILTER_INFO_FB = 1000156054, + XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB = 1000156052, + XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB = 1000156103, + XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB = 1000156104, + XR_TYPE_SPACE_SAVE_INFO_FB = 1000158000, + XR_TYPE_SPACE_ERASE_INFO_FB = 1000158001, + XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB = 1000158106, + XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB = 1000158107, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000, @@ -411,7 +440,12 @@ typedef enum XrStructureType { XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000, + XR_TYPE_SPACE_CONTAINER_FB = 1000199000, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002, + XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB = 1000204000, + XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META = 1000227000, + XR_TYPE_PERFORMANCE_METRICS_STATE_META = 1000232001, + XR_TYPE_PERFORMANCE_METRICS_COUNTER_META = 1000232002, XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, @@ -487,6 +521,7 @@ typedef enum XrObjectType { XR_OBJECT_TYPE_ACTION = 6, XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000, XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000, + XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT = 1000049000, XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000, XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000, XR_OBJECT_TYPE_SCENE_MSFT = 1000097001, @@ -1424,7 +1459,7 @@ typedef struct XrCompositionLayerCubeKHR { #define XR_KHR_composition_layer_depth 1 -#define XR_KHR_composition_layer_depth_SPEC_VERSION 5 +#define XR_KHR_composition_layer_depth_SPEC_VERSION 6 #define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth" // XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView typedef struct XrCompositionLayerDepthInfoKHR { @@ -1766,7 +1801,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT( #define XR_EXT_eye_gaze_interaction 1 -#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 1 +#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 2 #define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction" // XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties typedef struct XrSystemEyeGazeInteractionPropertiesEXT { @@ -1977,8 +2012,10 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT( #define XR_MSFT_spatial_graph_bridge 1 -#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1 +XR_DEFINE_HANDLE(XrSpatialGraphNodeBindingMSFT) +#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 2 #define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge" +#define XR_GUID_SIZE_MSFT 16 typedef enum XrSpatialGraphNodeTypeMSFT { XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1, @@ -1989,11 +2026,34 @@ typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; XrSpatialGraphNodeTypeMSFT nodeType; - uint8_t nodeId[16]; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; XrPosef pose; } XrSpatialGraphNodeSpaceCreateInfoMSFT; +typedef struct XrSpatialGraphStaticNodeBindingCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialGraphStaticNodeBindingCreateInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpatialGraphNodeBindingPropertiesGetInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; + XrPosef poseInNodeSpace; +} XrSpatialGraphNodeBindingPropertiesMSFT; + typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT)(XrSession session, const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, XrSpatialGraphNodeBindingMSFT* nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialGraphNodeBindingMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding, const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, XrSpatialGraphNodeBindingPropertiesMSFT* properties); #ifndef XR_NO_PROTOTYPES #ifdef XR_EXTENSION_PROTOTYPES @@ -2001,6 +2061,19 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT( XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space); + +XRAPI_ATTR XrResult XRAPI_CALL xrTryCreateSpatialGraphStaticNodeBindingMSFT( + XrSession session, + const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, + XrSpatialGraphNodeBindingMSFT* nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialGraphNodeBindingMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpatialGraphNodeBindingPropertiesMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding, + const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, + XrSpatialGraphNodeBindingPropertiesMSFT* properties); #endif /* XR_EXTENSION_PROTOTYPES */ #endif /* !XR_NO_PROTOTYPES */ @@ -2056,6 +2129,7 @@ typedef enum XrHandJointEXT { typedef enum XrHandJointSetEXT { XR_HAND_JOINT_SET_DEFAULT_EXT = 0, + XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP = 1000149000, XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF } XrHandJointSetEXT; // XrSystemHandTrackingPropertiesEXT extends XrSystemProperties @@ -2454,6 +2528,25 @@ typedef struct XrCompositionLayerSecureContentFB { +#define XR_EXT_dpad_binding 1 +#define XR_EXT_dpad_binding_SPEC_VERSION 1 +#define XR_EXT_DPAD_BINDING_EXTENSION_NAME "XR_EXT_dpad_binding" +typedef struct XrInteractionProfileDpadBindingEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPath binding; + XrActionSet actionSet; + float forceThreshold; + float forceThresholdReleased; + float centerRegion; + float wedgeAngle; + XrBool32 isSticky; + const XrHapticBaseHeader* onHaptic; + const XrHapticBaseHeader* offHaptic; +} XrInteractionProfileDpadBindingEXT; + + + #define XR_VALVE_analog_threshold 1 #define XR_VALVE_analog_threshold_SPEC_VERSION 2 #define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold" @@ -3058,10 +3151,20 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC( #define XR_HTC_vive_focus3_controller_interaction 1 -#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 1 +#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 2 #define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction" +#define XR_HTC_hand_interaction 1 +#define XR_HTC_hand_interaction_SPEC_VERSION 1 +#define XR_HTC_HAND_INTERACTION_EXTENSION_NAME "XR_HTC_hand_interaction" + + +#define XR_HTC_vive_wrist_tracker_interaction 1 +#define XR_HTC_vive_wrist_tracker_interaction_SPEC_VERSION 1 +#define XR_HTC_VIVE_WRIST_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_wrist_tracker_interaction" + + #define XR_FB_color_space 1 #define XR_FB_color_space_SPEC_VERSION 2 #define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space" @@ -3103,7 +3206,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB( #define XR_FB_hand_tracking_mesh 1 -#define XR_FB_hand_tracking_mesh_SPEC_VERSION 1 +#define XR_FB_hand_tracking_mesh_SPEC_VERSION 2 #define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh" typedef struct XrVector4sFB { int16_t x; @@ -3132,7 +3235,7 @@ typedef struct XrHandTrackingMeshFB { int16_t* indices; } XrHandTrackingMeshFB; -// XrHandTrackingScaleFB extends XrHandJointsLocateInfoEXT +// XrHandTrackingScaleFB extends XrHandJointLocationsEXT typedef struct XrHandTrackingScaleFB { XrStructureType type; void* XR_MAY_ALIAS next; @@ -3154,7 +3257,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB( #define XR_FB_hand_tracking_aim 1 -#define XR_FB_hand_tracking_aim_SPEC_VERSION 1 +#define XR_FB_hand_tracking_aim_SPEC_VERSION 2 #define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim" typedef XrFlags64 XrHandTrackingAimFlagsFB; @@ -3169,7 +3272,7 @@ static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080; static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100; -// XrHandTrackingAimStateFB extends XrHandJointsLocateInfoEXT +// XrHandTrackingAimStateFB extends XrHandJointLocationsEXT typedef struct XrHandTrackingAimStateFB { XrStructureType type; void* XR_MAY_ALIAS next; @@ -3185,26 +3288,128 @@ typedef struct XrHandTrackingAimStateFB { #define XR_FB_hand_tracking_capsules 1 #define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2 -#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB #define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19 -#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB -#define XR_FB_hand_tracking_capsules_SPEC_VERSION 2 +#define XR_FB_hand_tracking_capsules_SPEC_VERSION 3 #define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules" +#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB +#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB typedef struct XrHandCapsuleFB { - XrVector3f points[XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT]; + XrVector3f points[XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB]; float radius; XrHandJointEXT joint; } XrHandCapsuleFB; -// XrHandTrackingCapsulesStateFB extends XrHandJointsLocateInfoEXT +// XrHandTrackingCapsulesStateFB extends XrHandJointLocationsEXT typedef struct XrHandTrackingCapsulesStateFB { XrStructureType type; void* XR_MAY_ALIAS next; - XrHandCapsuleFB capsules[XR_FB_HAND_TRACKING_CAPSULE_COUNT]; + XrHandCapsuleFB capsules[XR_HAND_TRACKING_CAPSULE_COUNT_FB]; } XrHandTrackingCapsulesStateFB; +#define XR_FB_spatial_entity 1 +XR_DEFINE_ATOM(XrAsyncRequestIdFB) +#define XR_UUID_SIZE_EXT 16 +#define XR_FB_spatial_entity_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_EXTENSION_NAME "XR_FB_spatial_entity" + +typedef enum XrSpaceComponentTypeFB { + XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB = 0, + XR_SPACE_COMPONENT_TYPE_STORABLE_FB = 1, + XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB = 7, + XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceComponentTypeFB; +// XrSystemSpatialEntityPropertiesFB extends XrSystemProperties +typedef struct XrSystemSpatialEntityPropertiesFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 supportsSpatialEntity; +} XrSystemSpatialEntityPropertiesFB; + +typedef struct XrSpatialAnchorCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialAnchorCreateInfoFB; + +typedef struct XrSpaceComponentStatusSetInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; + XrDuration timeout; +} XrSpaceComponentStatusSetInfoFB; + +typedef struct XrSpaceComponentStatusFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 enabled; + XrBool32 changePending; +} XrSpaceComponentStatusFB; + +typedef struct XrUuidEXT { + uint8_t data[XR_UUID_SIZE_EXT]; +} XrUuidEXT; + +typedef struct XrEventDataSpatialAnchorCreateCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; +} XrEventDataSpatialAnchorCreateCompleteFB; + +typedef struct XrEventDataSpaceSetStatusCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; +} XrEventDataSpaceSetStatusCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFB)(XrSession session, const XrSpatialAnchorCreateInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceUuidFB)(XrSpace space, XrUuidEXT* uuid); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSpaceSupportedComponentsFB)(XrSpace space, uint32_t componentTypeCapacityInput, uint32_t* componentTypeCountOutput, XrSpaceComponentTypeFB* componentTypes); +typedef XrResult (XRAPI_PTR *PFN_xrSetSpaceComponentStatusFB)(XrSpace space, const XrSpaceComponentStatusSetInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceComponentStatusFB)(XrSpace space, XrSpaceComponentTypeFB componentType, XrSpaceComponentStatusFB* status); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFB( + XrSession session, + const XrSpatialAnchorCreateInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceUuidFB( + XrSpace space, + XrUuidEXT* uuid); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSpaceSupportedComponentsFB( + XrSpace space, + uint32_t componentTypeCapacityInput, + uint32_t* componentTypeCountOutput, + XrSpaceComponentTypeFB* componentTypes); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetSpaceComponentStatusFB( + XrSpace space, + const XrSpaceComponentStatusSetInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceComponentStatusFB( + XrSpace space, + XrSpaceComponentTypeFB componentType, + XrSpaceComponentStatusFB* status); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_FB_foveation 1 XR_DEFINE_HANDLE(XrFoveationProfileFB) #define XR_FB_foveation_SPEC_VERSION 1 @@ -3346,7 +3551,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB( #define XR_FB_triangle_mesh 1 XR_DEFINE_HANDLE(XrTriangleMeshFB) -#define XR_FB_triangle_mesh_SPEC_VERSION 1 +#define XR_FB_triangle_mesh_SPEC_VERSION 2 #define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh" typedef enum XrWindingOrderFB { @@ -3420,7 +3625,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB( XR_DEFINE_HANDLE(XrPassthroughFB) XR_DEFINE_HANDLE(XrPassthroughLayerFB) XR_DEFINE_HANDLE(XrGeometryInstanceFB) -#define XR_FB_passthrough_SPEC_VERSION 1 +#define XR_FB_passthrough_SPEC_VERSION 2 #define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough" #define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256 @@ -3428,6 +3633,7 @@ typedef enum XrPassthroughLayerPurposeFB { XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0, XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1, XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001, + XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB = 1000203002, XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF } XrPassthroughLayerPurposeFB; typedef XrFlags64 XrPassthroughFlagsFB; @@ -3499,18 +3705,29 @@ typedef struct XrPassthroughStyleFB { XrColor4f edgeColor; } XrPassthroughStyleFB; +// XrPassthroughColorMapMonoToRgbaFB extends XrPassthroughStyleFB typedef struct XrPassthroughColorMapMonoToRgbaFB { XrStructureType type; const void* XR_MAY_ALIAS next; XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; } XrPassthroughColorMapMonoToRgbaFB; +// XrPassthroughColorMapMonoToMonoFB extends XrPassthroughStyleFB typedef struct XrPassthroughColorMapMonoToMonoFB { XrStructureType type; const void* XR_MAY_ALIAS next; uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; } XrPassthroughColorMapMonoToMonoFB; +// XrPassthroughBrightnessContrastSaturationFB extends XrPassthroughStyleFB +typedef struct XrPassthroughBrightnessContrastSaturationFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float brightness; + float contrast; + float saturation; +} XrPassthroughBrightnessContrastSaturationFB; + typedef struct XrEventDataPassthroughStateChangedFB { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -3584,12 +3801,14 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB( #define XR_NULL_RENDER_MODEL_KEY_FB 0 XR_DEFINE_ATOM(XrRenderModelKeyFB) -#define XR_FB_render_model_SPEC_VERSION 1 +#define XR_FB_render_model_SPEC_VERSION 2 #define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model" #define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64 typedef XrFlags64 XrRenderModelFlagsFB; // Flag bits for XrRenderModelFlagsFB +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB = 0x00000001; +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB = 0x00000002; typedef struct XrRenderModelPathInfoFB { XrStructureType type; @@ -3628,6 +3847,13 @@ typedef struct XrSystemRenderModelPropertiesFB { XrBool32 supportsRenderModelLoading; } XrSystemRenderModelPropertiesFB; +// XrRenderModelCapabilitiesRequestFB extends XrSystemProperties +typedef struct XrRenderModelCapabilitiesRequestFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrRenderModelFlagsFB flags; +} XrRenderModelCapabilitiesRequestFB; + typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths); typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties); typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer); @@ -3767,6 +3993,20 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO( #endif /* !XR_NO_PROTOTYPES */ +#define XR_VARJO_view_offset 1 +#define XR_VARJO_view_offset_SPEC_VERSION 1 +#define XR_VARJO_VIEW_OFFSET_EXTENSION_NAME "XR_VARJO_view_offset" +typedef XrResult (XRAPI_PTR *PFN_xrSetViewOffsetVARJO)(XrSession session, float offset); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetViewOffsetVARJO( + XrSession session, + float offset); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_MSFT_spatial_anchor_persistence 1 XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT) #define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256 @@ -3832,12 +4072,212 @@ XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT( #endif /* !XR_NO_PROTOTYPES */ +#define XR_ULTRALEAP_hand_tracking_forearm 1 + +#define XR_HAND_FOREARM_JOINT_COUNT_ULTRALEAP 27 + +#define XR_ULTRALEAP_hand_tracking_forearm_SPEC_VERSION 1 +#define XR_ULTRALEAP_HAND_TRACKING_FOREARM_EXTENSION_NAME "XR_ULTRALEAP_hand_tracking_forearm" + +typedef enum XrHandForearmJointULTRALEAP { + XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP = 0, + XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP = 1, + XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP = 2, + XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP = 3, + XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP = 4, + XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP = 5, + XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP = 6, + XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP = 7, + XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP = 8, + XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP = 9, + XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP = 10, + XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP = 11, + XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP = 12, + XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP = 13, + XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP = 14, + XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP = 15, + XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP = 16, + XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP = 17, + XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP = 18, + XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP = 19, + XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP = 20, + XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP = 21, + XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP = 22, + XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP = 23, + XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP = 24, + XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP = 25, + XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP = 26, + XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP = 0x7FFFFFFF +} XrHandForearmJointULTRALEAP; + + +#define XR_FB_spatial_entity_query 1 +#define XR_FB_spatial_entity_query_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_QUERY_EXTENSION_NAME "XR_FB_spatial_entity_query" + +typedef enum XrSpaceQueryActionFB { + XR_SPACE_QUERY_ACTION_LOAD_FB = 0, + XR_SPACE_QUERY_ACTION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceQueryActionFB; + +typedef enum XrSpaceStorageLocationFB { + XR_SPACE_STORAGE_LOCATION_INVALID_FB = 0, + XR_SPACE_STORAGE_LOCATION_LOCAL_FB = 1, + XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceStorageLocationFB; +typedef struct XR_MAY_ALIAS XrSpaceQueryInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceQueryInfoBaseHeaderFB; + +typedef struct XR_MAY_ALIAS XrSpaceFilterInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceFilterInfoBaseHeaderFB; + +typedef struct XrSpaceQueryInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceQueryActionFB queryAction; + uint32_t maxResultCount; + XrDuration timeout; + const XrSpaceFilterInfoBaseHeaderFB* filter; + const XrSpaceFilterInfoBaseHeaderFB* excludeFilter; +} XrSpaceQueryInfoFB; + +// XrSpaceStorageLocationFilterInfoFB extends XrSpaceFilterInfoBaseHeaderFB +typedef struct XrSpaceStorageLocationFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceStorageLocationFB location; +} XrSpaceStorageLocationFilterInfoFB; + +typedef struct XrSpaceUuidFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCount; + XrUuidEXT* uuids; +} XrSpaceUuidFilterInfoFB; + +typedef struct XrSpaceComponentFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; +} XrSpaceComponentFilterInfoFB; + +typedef struct XrSpaceQueryResultFB { + XrSpace space; + XrUuidEXT uuid; +} XrSpaceQueryResultFB; + +typedef struct XrSpaceQueryResultsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t resultCapacityInput; + uint32_t resultCountOutput; + XrSpaceQueryResultFB* results; +} XrSpaceQueryResultsFB; + +typedef struct XrEventDataSpaceQueryResultsAvailableFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; +} XrEventDataSpaceQueryResultsAvailableFB; + +typedef struct XrEventDataSpaceQueryCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSpaceQueryCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrQuerySpacesFB)(XrSession session, const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrRetrieveSpaceQueryResultsFB)(XrSession session, XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrQuerySpacesFB( + XrSession session, + const XrSpaceQueryInfoBaseHeaderFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrRetrieveSpaceQueryResultsFB( + XrSession session, + XrAsyncRequestIdFB requestId, + XrSpaceQueryResultsFB* results); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_storage 1 +#define XR_FB_spatial_entity_storage_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_STORAGE_EXTENSION_NAME "XR_FB_spatial_entity_storage" + +typedef enum XrSpacePersistenceModeFB { + XR_SPACE_PERSISTENCE_MODE_INVALID_FB = 0, + XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB = 1, + XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpacePersistenceModeFB; +typedef struct XrSpaceSaveInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; + XrSpacePersistenceModeFB persistenceMode; +} XrSpaceSaveInfoFB; + +typedef struct XrSpaceEraseInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; +} XrSpaceEraseInfoFB; + +typedef struct XrEventDataSpaceSaveCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceSaveCompleteFB; + +typedef struct XrEventDataSpaceEraseCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceEraseCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrSaveSpaceFB)(XrSession session, const XrSpaceSaveInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrEraseSpaceFB)(XrSession session, const XrSpaceEraseInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSaveSpaceFB( + XrSession session, + const XrSpaceSaveInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrEraseSpaceFB( + XrSession session, + const XrSpaceEraseInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_FB_space_warp 1 -#define XR_FB_space_warp_SPEC_VERSION 1 +#define XR_FB_space_warp_SPEC_VERSION 2 #define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp" typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB; // Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB +static const XrCompositionLayerSpaceWarpInfoFlagsFB XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB = 0x00000001; // XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView typedef struct XrCompositionLayerSpaceWarpInfoFB { @@ -3888,8 +4328,31 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE( #endif /* !XR_NO_PROTOTYPES */ +#define XR_FB_spatial_entity_container 1 +#define XR_FB_spatial_entity_container_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_CONTAINER_EXTENSION_NAME "XR_FB_spatial_entity_container" +typedef struct XrSpaceContainerFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCapacityInput; + uint32_t* uuidCountOutput; + XrUuidEXT* uuids; +} XrSpaceContainerFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceContainerFB)(XrSession session, XrSpace space, XrSpaceContainerFB* spaceContainerOutput); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceContainerFB( + XrSession session, + XrSpace space, + XrSpaceContainerFB* spaceContainerOutput); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_FB_passthrough_keyboard_hands 1 -#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 1 +#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 2 #define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands" typedef struct XrPassthroughKeyboardHandsIntensityFB { XrStructureType type; @@ -3909,14 +4372,92 @@ XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB( #endif /* !XR_NO_PROTOTYPES */ +#define XR_FB_composition_layer_settings 1 +#define XR_FB_composition_layer_settings_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_SETTINGS_EXTENSION_NAME "XR_FB_composition_layer_settings" +typedef XrFlags64 XrCompositionLayerSettingsFlagsFB; + +// Flag bits for XrCompositionLayerSettingsFlagsFB +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB = 0x00000001; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB = 0x00000002; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB = 0x00000004; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB = 0x00000008; + +// XrCompositionLayerSettingsFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerSettingsFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSettingsFlagsFB layerFlags; +} XrCompositionLayerSettingsFB; + + + +#define XR_META_performance_metrics 1 +#define XR_META_performance_metrics_SPEC_VERSION 1 +#define XR_META_PERFORMANCE_METRICS_EXTENSION_NAME "XR_META_performance_metrics" + +typedef enum XrPerformanceMetricsCounterUnitMETA { + XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META = 0, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META = 1, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META = 2, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META = 3, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META = 4, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META = 0x7FFFFFFF +} XrPerformanceMetricsCounterUnitMETA; +typedef XrFlags64 XrPerformanceMetricsCounterFlagsMETA; + +// Flag bits for XrPerformanceMetricsCounterFlagsMETA +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META = 0x00000001; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META = 0x00000002; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META = 0x00000004; + +typedef struct XrPerformanceMetricsStateMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 enabled; +} XrPerformanceMetricsStateMETA; + +typedef struct XrPerformanceMetricsCounterMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPerformanceMetricsCounterFlagsMETA counterFlags; + XrPerformanceMetricsCounterUnitMETA counterUnit; + uint32_t uintValue; + float floatValue; +} XrPerformanceMetricsCounterMETA; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePerformanceMetricsCounterPathsMETA)(XrInstance instance, uint32_t counterPathCapacityInput, uint32_t* counterPathCountOutput, XrPath* counterPaths); +typedef XrResult (XRAPI_PTR *PFN_xrSetPerformanceMetricsStateMETA)(XrSession session, const XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetPerformanceMetricsStateMETA)(XrSession session, XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrQueryPerformanceMetricsCounterMETA)(XrSession session, XrPath counterPath, XrPerformanceMetricsCounterMETA* counter); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePerformanceMetricsCounterPathsMETA( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetPerformanceMetricsStateMETA( + XrSession session, + const XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetPerformanceMetricsStateMETA( + XrSession session, + XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrQueryPerformanceMetricsCounterMETA( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_EXT_uuid 1 #define XR_EXT_uuid_SPEC_VERSION 1 #define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid" -#define XR_UUID_SIZE_EXT 16 -typedef struct XrUuidEXT { - uint8_t data[XR_UUID_SIZE_EXT]; -} XrUuidEXT; - #ifdef __cplusplus } diff --git a/thirdparty/openxr/include/openxr/openxr_platform.h b/thirdparty/openxr/include/openxr/openxr_platform.h index eb5e5f8c4b..f0fbf6955a 100644 --- a/thirdparty/openxr/include/openxr/openxr_platform.h +++ b/thirdparty/openxr/include/openxr/openxr_platform.h @@ -275,7 +275,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR( #ifdef XR_USE_GRAPHICS_API_D3D11 #define XR_KHR_D3D11_enable 1 -#define XR_KHR_D3D11_enable_SPEC_VERSION 8 +#define XR_KHR_D3D11_enable_SPEC_VERSION 9 #define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable" // XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingD3D11KHR { @@ -312,7 +312,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR( #ifdef XR_USE_GRAPHICS_API_D3D12 #define XR_KHR_D3D12_enable 1 -#define XR_KHR_D3D12_enable_SPEC_VERSION 8 +#define XR_KHR_D3D12_enable_SPEC_VERSION 9 #define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable" // XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingD3D12KHR { @@ -668,6 +668,21 @@ typedef struct XrSwapchainStateSamplerVulkanFB { #endif /* XR_USE_GRAPHICS_API_VULKAN */ +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_META_vulkan_swapchain_create_info 1 +#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1 +#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info" +// XrVulkanSwapchainCreateInfoMETA extends XrSwapchainCreateInfo +typedef struct XrVulkanSwapchainCreateInfoMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + VkImageCreateFlags additionalCreateFlags; + VkImageUsageFlags additionalUsageFlags; +} XrVulkanSwapchainCreateInfoMETA; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + #ifdef __cplusplus } #endif diff --git a/thirdparty/openxr/include/openxr/openxr_reflection.h b/thirdparty/openxr/include/openxr/openxr_reflection.h index 2bc14be600..163b54e4e4 100644 --- a/thirdparty/openxr/include/openxr/openxr_reflection.h +++ b/thirdparty/openxr/include/openxr/openxr_reflection.h @@ -100,6 +100,10 @@ XR_ENUM_STR(XrResult); _(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \ _(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \ _(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB, -1000113000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB, -1000113001) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB, -1000113002) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB, -1000113003) \ _(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \ _(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \ _(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \ @@ -208,6 +212,9 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \ _(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \ _(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \ + _(XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT, 1000049001) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT, 1000049002) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT, 1000049003) \ _(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \ _(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \ _(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \ @@ -235,6 +242,7 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \ _(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \ _(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \ + _(XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT, 1000078000) \ _(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \ _(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \ _(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \ @@ -274,6 +282,12 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \ _(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \ _(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \ + _(XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB, 1000113004) \ + _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB, 1000113003) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB, 1000113007) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_FB, 1000113001) \ + _(XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB, 1000113005) \ + _(XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB, 1000113006) \ _(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \ _(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \ _(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \ @@ -291,12 +305,14 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \ + _(XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB, 1000118023) \ _(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \ _(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \ _(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \ _(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \ _(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \ _(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \ + _(XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB, 1000119005) \ _(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \ _(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \ _(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \ @@ -307,6 +323,17 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \ _(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \ _(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \ + _(XR_TYPE_SPACE_QUERY_INFO_FB, 1000156001) \ + _(XR_TYPE_SPACE_QUERY_RESULTS_FB, 1000156002) \ + _(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB, 1000156003) \ + _(XR_TYPE_SPACE_UUID_FILTER_INFO_FB, 1000156054) \ + _(XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB, 1000156052) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB, 1000156103) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB, 1000156104) \ + _(XR_TYPE_SPACE_SAVE_INFO_FB, 1000158000) \ + _(XR_TYPE_SPACE_ERASE_INFO_FB, 1000158001) \ + _(XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB, 1000158106) \ + _(XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB, 1000158107) \ _(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \ _(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \ _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \ @@ -314,7 +341,12 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \ _(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \ _(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \ + _(XR_TYPE_SPACE_CONTAINER_FB, 1000199000) \ _(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \ + _(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, 1000204000) \ + _(XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META, 1000227000) \ + _(XR_TYPE_PERFORMANCE_METRICS_STATE_META, 1000232001) \ + _(XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, 1000232002) \ _(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF) #define XR_LIST_ENUM_XrFormFactor(_) \ @@ -379,6 +411,7 @@ XR_ENUM_STR(XrResult); _(XR_OBJECT_TYPE_ACTION, 6) \ _(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \ + _(XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT, 1000049000) \ _(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \ _(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \ _(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \ @@ -478,6 +511,7 @@ XR_ENUM_STR(XrResult); #define XR_LIST_ENUM_XrHandJointSetEXT(_) \ _(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \ + _(XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP, 1000149000) \ _(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF) #define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \ @@ -623,6 +657,12 @@ XR_ENUM_STR(XrResult); _(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \ _(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF) +#define XR_LIST_ENUM_XrSpaceComponentTypeFB(_) \ + _(XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB, 0) \ + _(XR_SPACE_COMPONENT_TYPE_STORABLE_FB, 1) \ + _(XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB, 7) \ + _(XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB, 0x7FFFFFFF) + #define XR_LIST_ENUM_XrFoveationLevelFB(_) \ _(XR_FOVEATION_LEVEL_NONE_FB, 0) \ _(XR_FOVEATION_LEVEL_LOW_FB, 1) \ @@ -645,8 +685,61 @@ XR_ENUM_STR(XrResult); _(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \ _(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \ _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB, 1000203002) \ _(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF) +#define XR_LIST_ENUM_XrHandForearmJointULTRALEAP(_) \ + _(XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP, 0) \ + _(XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP, 1) \ + _(XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP, 2) \ + _(XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP, 3) \ + _(XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP, 4) \ + _(XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP, 5) \ + _(XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP, 6) \ + _(XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP, 7) \ + _(XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP, 8) \ + _(XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP, 9) \ + _(XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP, 10) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP, 11) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP, 12) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP, 13) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP, 14) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP, 15) \ + _(XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP, 16) \ + _(XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP, 17) \ + _(XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP, 18) \ + _(XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP, 19) \ + _(XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP, 20) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP, 21) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP, 22) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP, 23) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP, 24) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP, 25) \ + _(XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP, 26) \ + _(XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceQueryActionFB(_) \ + _(XR_SPACE_QUERY_ACTION_LOAD_FB, 0) \ + _(XR_SPACE_QUERY_ACTION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceStorageLocationFB(_) \ + _(XR_SPACE_STORAGE_LOCATION_INVALID_FB, 0) \ + _(XR_SPACE_STORAGE_LOCATION_LOCAL_FB, 1) \ + _(XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpacePersistenceModeFB(_) \ + _(XR_SPACE_PERSISTENCE_MODE_INVALID_FB, 0) \ + _(XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB, 1) \ + _(XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerformanceMetricsCounterUnitMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META, 0) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META, 1) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META, 2) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META, 3) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META, 4) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META, 0x7FFFFFFF) + #define XR_LIST_BITS_XrInstanceCreateFlags(_) #define XR_LIST_BITS_XrSessionCreateFlags(_) @@ -763,13 +856,27 @@ XR_ENUM_STR(XrResult); _(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \ _(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \ -#define XR_LIST_BITS_XrRenderModelFlagsFB(_) +#define XR_LIST_BITS_XrRenderModelFlagsFB(_) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB, 0x00000001) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB, 0x00000002) \ -#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_) +#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB, 0x00000001) \ #define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \ _(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \ +#define XR_LIST_BITS_XrCompositionLayerSettingsFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB, 0x00000001) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB, 0x00000002) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB, 0x00000004) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrPerformanceMetricsCounterFlagsMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META, 0x00000001) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META, 0x00000002) \ + _(XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META, 0x00000004) \ + #define XR_LIST_STRUCT_XrApiLayerProperties(_) \ _(type) \ _(next) \ @@ -1568,6 +1675,23 @@ XR_ENUM_STR(XrResult); _(nodeId) \ _(pose) \ +#define XR_LIST_STRUCT_XrSpatialGraphStaticNodeBindingCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesGetInfoMSFT(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(nodeId) \ + _(poseInNodeSpace) \ + #define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \ _(type) \ _(next) \ @@ -1762,6 +1886,19 @@ XR_ENUM_STR(XrResult); _(next) \ _(flags) \ +#define XR_LIST_STRUCT_XrInteractionProfileDpadBindingEXT(_) \ + _(type) \ + _(next) \ + _(binding) \ + _(actionSet) \ + _(forceThreshold) \ + _(forceThresholdReleased) \ + _(centerRegion) \ + _(wedgeAngle) \ + _(isSticky) \ + _(onHaptic) \ + _(offHaptic) \ + #define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \ _(type) \ _(next) \ @@ -2047,6 +2184,52 @@ XR_ENUM_STR(XrResult); _(next) \ _(capsules) \ +#define XR_LIST_STRUCT_XrSystemSpatialEntityPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsSpatialEntity) \ + +#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +#define XR_LIST_STRUCT_XrSpaceComponentStatusSetInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + _(enabled) \ + _(timeout) \ + +#define XR_LIST_STRUCT_XrSpaceComponentStatusFB(_) \ + _(type) \ + _(next) \ + _(enabled) \ + _(changePending) \ + +#define XR_LIST_STRUCT_XrUuidEXT(_) \ + _(data) \ + +#define XR_LIST_STRUCT_XrEventDataSpatialAnchorCreateCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceSetStatusCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(componentType) \ + _(enabled) \ + #define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \ _(type) \ _(next) \ @@ -2157,6 +2340,13 @@ XR_ENUM_STR(XrResult); _(next) \ _(textureColorMap) \ +#define XR_LIST_STRUCT_XrPassthroughBrightnessContrastSaturationFB(_) \ + _(type) \ + _(next) \ + _(brightness) \ + _(contrast) \ + _(saturation) \ + #define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \ _(type) \ _(next) \ @@ -2193,6 +2383,11 @@ XR_ENUM_STR(XrResult); _(next) \ _(supportsRenderModelLoading) \ +#define XR_LIST_STRUCT_XrRenderModelCapabilitiesRequestFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + #define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \ _(type) \ _(next) \ @@ -2248,6 +2443,92 @@ XR_ENUM_STR(XrResult); _(spatialAnchorStore) \ _(spatialAnchorPersistenceName) \ +#define XR_LIST_STRUCT_XrSpaceQueryInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpaceFilterInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpaceQueryInfoFB(_) \ + _(type) \ + _(next) \ + _(queryAction) \ + _(maxResultCount) \ + _(timeout) \ + _(filter) \ + _(excludeFilter) \ + +#define XR_LIST_STRUCT_XrSpaceStorageLocationFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(location) \ + +#define XR_LIST_STRUCT_XrSpaceUuidFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(uuidCount) \ + _(uuids) \ + +#define XR_LIST_STRUCT_XrSpaceComponentFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + +#define XR_LIST_STRUCT_XrSpaceQueryResultFB(_) \ + _(space) \ + _(uuid) \ + +#define XR_LIST_STRUCT_XrSpaceQueryResultsFB(_) \ + _(type) \ + _(next) \ + _(resultCapacityInput) \ + _(resultCountOutput) \ + _(results) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceQueryResultsAvailableFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceQueryCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +#define XR_LIST_STRUCT_XrSpaceSaveInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + _(persistenceMode) \ + +#define XR_LIST_STRUCT_XrSpaceEraseInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceSaveCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceEraseCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + #define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \ _(type) \ _(next) \ @@ -2313,14 +2594,42 @@ XR_ENUM_STR(XrResult); _(next) \ _(flags) \ +#define XR_LIST_STRUCT_XrSpaceContainerFB(_) \ + _(type) \ + _(next) \ + _(uuidCapacityInput) \ + _(uuidCountOutput) \ + _(uuids) \ + #define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \ _(type) \ _(next) \ _(leftHandIntensity) \ _(rightHandIntensity) \ -#define XR_LIST_STRUCT_XrUuidEXT(_) \ - _(data) \ +#define XR_LIST_STRUCT_XrCompositionLayerSettingsFB(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + +#define XR_LIST_STRUCT_XrVulkanSwapchainCreateInfoMETA(_) \ + _(type) \ + _(next) \ + _(additionalCreateFlags) \ + _(additionalUsageFlags) \ + +#define XR_LIST_STRUCT_XrPerformanceMetricsStateMETA(_) \ + _(type) \ + _(next) \ + _(enabled) \ + +#define XR_LIST_STRUCT_XrPerformanceMetricsCounterMETA(_) \ + _(type) \ + _(next) \ + _(counterFlags) \ + _(counterUnit) \ + _(uintValue) \ + _(floatValue) \ @@ -2398,6 +2707,9 @@ XR_ENUM_STR(XrResult); _(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \ _(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \ _(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \ + _(XrSpatialGraphStaticNodeBindingCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) \ _(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \ _(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \ _(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \ @@ -2423,6 +2735,7 @@ XR_ENUM_STR(XrResult); _(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \ _(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \ _(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \ + _(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \ _(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \ _(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \ _(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \ @@ -2457,6 +2770,12 @@ XR_ENUM_STR(XrResult); _(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \ _(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \ _(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \ + _(XrSystemSpatialEntityPropertiesFB, XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) \ + _(XrSpatialAnchorCreateInfoFB, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) \ + _(XrSpaceComponentStatusSetInfoFB, XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) \ + _(XrSpaceComponentStatusFB, XR_TYPE_SPACE_COMPONENT_STATUS_FB) \ + _(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \ + _(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \ _(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \ _(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \ _(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \ @@ -2474,12 +2793,14 @@ XR_ENUM_STR(XrResult); _(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \ _(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \ _(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \ + _(XrPassthroughBrightnessContrastSaturationFB, XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) \ _(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \ _(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \ _(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \ _(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \ _(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \ _(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \ + _(XrRenderModelCapabilitiesRequestFB, XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) \ _(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \ _(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \ _(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \ @@ -2489,10 +2810,25 @@ XR_ENUM_STR(XrResult); _(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \ _(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \ _(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \ + _(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \ + _(XrSpaceStorageLocationFilterInfoFB, XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) \ + _(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \ + _(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \ + _(XrSpaceQueryResultsFB, XR_TYPE_SPACE_QUERY_RESULTS_FB) \ + _(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \ + _(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \ + _(XrSpaceSaveInfoFB, XR_TYPE_SPACE_SAVE_INFO_FB) \ + _(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \ + _(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \ + _(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \ _(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \ _(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \ _(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \ + _(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \ _(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \ + _(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \ + _(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \ + _(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \ @@ -2596,6 +2932,7 @@ XR_ENUM_STR(XrResult); _(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \ _(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \ _(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + _(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \ #else @@ -2698,6 +3035,7 @@ XR_ENUM_STR(XrResult); _(XR_FB_android_surface_swapchain_create, 71) \ _(XR_FB_swapchain_update_state, 72) \ _(XR_FB_composition_layer_secure_content, 73) \ + _(XR_EXT_dpad_binding, 79) \ _(XR_VALVE_analog_threshold, 80) \ _(XR_EXT_hand_joints_motion_range, 81) \ _(XR_KHR_loader_init, 89) \ @@ -2714,10 +3052,13 @@ XR_ENUM_STR(XrResult); _(XR_HTCX_vive_tracker_interaction, 104) \ _(XR_HTC_facial_tracking, 105) \ _(XR_HTC_vive_focus3_controller_interaction, 106) \ + _(XR_HTC_hand_interaction, 107) \ + _(XR_HTC_vive_wrist_tracker_interaction, 108) \ _(XR_FB_color_space, 109) \ _(XR_FB_hand_tracking_mesh, 111) \ _(XR_FB_hand_tracking_aim, 112) \ _(XR_FB_hand_tracking_capsules, 113) \ + _(XR_FB_spatial_entity, 114) \ _(XR_FB_foveation, 115) \ _(XR_FB_foveation_configuration, 116) \ _(XR_FB_keyboard_tracking, 117) \ @@ -2729,7 +3070,11 @@ XR_ENUM_STR(XrResult); _(XR_VARJO_composition_layer_depth_test, 123) \ _(XR_VARJO_environment_depth_estimation, 124) \ _(XR_VARJO_marker_tracking, 125) \ + _(XR_VARJO_view_offset, 126) \ _(XR_MSFT_spatial_anchor_persistence, 143) \ + _(XR_ULTRALEAP_hand_tracking_forearm, 150) \ + _(XR_FB_spatial_entity_query, 157) \ + _(XR_FB_spatial_entity_storage, 159) \ _(XR_OCULUS_audio_device_guid, 160) \ _(XR_FB_foveation_vulkan, 161) \ _(XR_FB_swapchain_update_state_android_surface, 162) \ @@ -2738,7 +3083,11 @@ XR_ENUM_STR(XrResult); _(XR_KHR_swapchain_usage_input_attachment_bit, 166) \ _(XR_FB_space_warp, 172) \ _(XR_ALMALENCE_digital_lens_control, 197) \ + _(XR_FB_spatial_entity_container, 200) \ _(XR_FB_passthrough_keyboard_hands, 204) \ + _(XR_FB_composition_layer_settings, 205) \ + _(XR_META_vulkan_swapchain_create_info, 228) \ + _(XR_META_performance_metrics, 233) \ _(XR_EXT_uuid, 300) \ diff --git a/thirdparty/openxr/src/common/xr_linear.h b/thirdparty/openxr/src/common/xr_linear.h index 9ffb49a4b6..1f0e803b7a 100644 --- a/thirdparty/openxr/src/common/xr_linear.h +++ b/thirdparty/openxr/src/common/xr_linear.h @@ -126,12 +126,12 @@ static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f}; static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f}; static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f}; -enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D }; +typedef enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D } GraphicsAPI; // Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience. -struct XrMatrix4x4f { +typedef struct XrMatrix4x4f { float m[16]; -}; +} XrMatrix4x4f; inline static float XrRcpSqrt(const float x) { const float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 ) diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.c b/thirdparty/openxr/src/xr_generated_dispatch_table.c index 79fbefc52a..91fa0c3ca0 100644 --- a/thirdparty/openxr/src/xr_generated_dispatch_table.c +++ b/thirdparty/openxr/src/xr_generated_dispatch_table.c @@ -202,6 +202,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table, // ---- XR_MSFT_spatial_graph_bridge extension commands (get_inst_proc_addr(instance, "xrCreateSpatialGraphNodeSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialGraphNodeSpaceMSFT)); + (get_inst_proc_addr(instance, "xrTryCreateSpatialGraphStaticNodeBindingMSFT", (PFN_xrVoidFunction*)&table->TryCreateSpatialGraphStaticNodeBindingMSFT)); + (get_inst_proc_addr(instance, "xrDestroySpatialGraphNodeBindingMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialGraphNodeBindingMSFT)); + (get_inst_proc_addr(instance, "xrGetSpatialGraphNodeBindingPropertiesMSFT", (PFN_xrVoidFunction*)&table->GetSpatialGraphNodeBindingPropertiesMSFT)); // ---- XR_EXT_hand_tracking extension commands (get_inst_proc_addr(instance, "xrCreateHandTrackerEXT", (PFN_xrVoidFunction*)&table->CreateHandTrackerEXT)); @@ -269,6 +272,13 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table, // ---- XR_FB_hand_tracking_mesh extension commands (get_inst_proc_addr(instance, "xrGetHandMeshFB", (PFN_xrVoidFunction*)&table->GetHandMeshFB)); + // ---- XR_FB_spatial_entity extension commands + (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFB", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFB)); + (get_inst_proc_addr(instance, "xrGetSpaceUuidFB", (PFN_xrVoidFunction*)&table->GetSpaceUuidFB)); + (get_inst_proc_addr(instance, "xrEnumerateSpaceSupportedComponentsFB", (PFN_xrVoidFunction*)&table->EnumerateSpaceSupportedComponentsFB)); + (get_inst_proc_addr(instance, "xrSetSpaceComponentStatusFB", (PFN_xrVoidFunction*)&table->SetSpaceComponentStatusFB)); + (get_inst_proc_addr(instance, "xrGetSpaceComponentStatusFB", (PFN_xrVoidFunction*)&table->GetSpaceComponentStatusFB)); + // ---- XR_FB_foveation extension commands (get_inst_proc_addr(instance, "xrCreateFoveationProfileFB", (PFN_xrVoidFunction*)&table->CreateFoveationProfileFB)); (get_inst_proc_addr(instance, "xrDestroyFoveationProfileFB", (PFN_xrVoidFunction*)&table->DestroyFoveationProfileFB)); @@ -316,6 +326,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table, (get_inst_proc_addr(instance, "xrGetMarkerSizeVARJO", (PFN_xrVoidFunction*)&table->GetMarkerSizeVARJO)); (get_inst_proc_addr(instance, "xrCreateMarkerSpaceVARJO", (PFN_xrVoidFunction*)&table->CreateMarkerSpaceVARJO)); + // ---- XR_VARJO_view_offset extension commands + (get_inst_proc_addr(instance, "xrSetViewOffsetVARJO", (PFN_xrVoidFunction*)&table->SetViewOffsetVARJO)); + // ---- XR_MSFT_spatial_anchor_persistence extension commands (get_inst_proc_addr(instance, "xrCreateSpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorStoreConnectionMSFT)); (get_inst_proc_addr(instance, "xrDestroySpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorStoreConnectionMSFT)); @@ -325,6 +338,14 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table, (get_inst_proc_addr(instance, "xrUnpersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->UnpersistSpatialAnchorMSFT)); (get_inst_proc_addr(instance, "xrClearSpatialAnchorStoreMSFT", (PFN_xrVoidFunction*)&table->ClearSpatialAnchorStoreMSFT)); + // ---- XR_FB_spatial_entity_query extension commands + (get_inst_proc_addr(instance, "xrQuerySpacesFB", (PFN_xrVoidFunction*)&table->QuerySpacesFB)); + (get_inst_proc_addr(instance, "xrRetrieveSpaceQueryResultsFB", (PFN_xrVoidFunction*)&table->RetrieveSpaceQueryResultsFB)); + + // ---- XR_FB_spatial_entity_storage extension commands + (get_inst_proc_addr(instance, "xrSaveSpaceFB", (PFN_xrVoidFunction*)&table->SaveSpaceFB)); + (get_inst_proc_addr(instance, "xrEraseSpaceFB", (PFN_xrVoidFunction*)&table->EraseSpaceFB)); + // ---- XR_OCULUS_audio_device_guid extension commands #if defined(XR_USE_PLATFORM_WIN32) (get_inst_proc_addr(instance, "xrGetAudioOutputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioOutputDeviceGuidOculus)); @@ -336,8 +357,17 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table, // ---- XR_ALMALENCE_digital_lens_control extension commands (get_inst_proc_addr(instance, "xrSetDigitalLensControlALMALENCE", (PFN_xrVoidFunction*)&table->SetDigitalLensControlALMALENCE)); + // ---- XR_FB_spatial_entity_container extension commands + (get_inst_proc_addr(instance, "xrGetSpaceContainerFB", (PFN_xrVoidFunction*)&table->GetSpaceContainerFB)); + // ---- XR_FB_passthrough_keyboard_hands extension commands (get_inst_proc_addr(instance, "xrPassthroughLayerSetKeyboardHandsIntensityFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetKeyboardHandsIntensityFB)); + + // ---- XR_META_performance_metrics extension commands + (get_inst_proc_addr(instance, "xrEnumeratePerformanceMetricsCounterPathsMETA", (PFN_xrVoidFunction*)&table->EnumeratePerformanceMetricsCounterPathsMETA)); + (get_inst_proc_addr(instance, "xrSetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->SetPerformanceMetricsStateMETA)); + (get_inst_proc_addr(instance, "xrGetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->GetPerformanceMetricsStateMETA)); + (get_inst_proc_addr(instance, "xrQueryPerformanceMetricsCounterMETA", (PFN_xrVoidFunction*)&table->QueryPerformanceMetricsCounterMETA)); } diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.h b/thirdparty/openxr/src/xr_generated_dispatch_table.h index 34e0de93f5..51d48bef43 100644 --- a/thirdparty/openxr/src/xr_generated_dispatch_table.h +++ b/thirdparty/openxr/src/xr_generated_dispatch_table.h @@ -205,6 +205,9 @@ struct XrGeneratedDispatchTable { // ---- XR_MSFT_spatial_graph_bridge extension commands PFN_xrCreateSpatialGraphNodeSpaceMSFT CreateSpatialGraphNodeSpaceMSFT; + PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT TryCreateSpatialGraphStaticNodeBindingMSFT; + PFN_xrDestroySpatialGraphNodeBindingMSFT DestroySpatialGraphNodeBindingMSFT; + PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT GetSpatialGraphNodeBindingPropertiesMSFT; // ---- XR_EXT_hand_tracking extension commands PFN_xrCreateHandTrackerEXT CreateHandTrackerEXT; @@ -272,6 +275,13 @@ struct XrGeneratedDispatchTable { // ---- XR_FB_hand_tracking_mesh extension commands PFN_xrGetHandMeshFB GetHandMeshFB; + // ---- XR_FB_spatial_entity extension commands + PFN_xrCreateSpatialAnchorFB CreateSpatialAnchorFB; + PFN_xrGetSpaceUuidFB GetSpaceUuidFB; + PFN_xrEnumerateSpaceSupportedComponentsFB EnumerateSpaceSupportedComponentsFB; + PFN_xrSetSpaceComponentStatusFB SetSpaceComponentStatusFB; + PFN_xrGetSpaceComponentStatusFB GetSpaceComponentStatusFB; + // ---- XR_FB_foveation extension commands PFN_xrCreateFoveationProfileFB CreateFoveationProfileFB; PFN_xrDestroyFoveationProfileFB DestroyFoveationProfileFB; @@ -319,6 +329,9 @@ struct XrGeneratedDispatchTable { PFN_xrGetMarkerSizeVARJO GetMarkerSizeVARJO; PFN_xrCreateMarkerSpaceVARJO CreateMarkerSpaceVARJO; + // ---- XR_VARJO_view_offset extension commands + PFN_xrSetViewOffsetVARJO SetViewOffsetVARJO; + // ---- XR_MSFT_spatial_anchor_persistence extension commands PFN_xrCreateSpatialAnchorStoreConnectionMSFT CreateSpatialAnchorStoreConnectionMSFT; PFN_xrDestroySpatialAnchorStoreConnectionMSFT DestroySpatialAnchorStoreConnectionMSFT; @@ -328,6 +341,14 @@ struct XrGeneratedDispatchTable { PFN_xrUnpersistSpatialAnchorMSFT UnpersistSpatialAnchorMSFT; PFN_xrClearSpatialAnchorStoreMSFT ClearSpatialAnchorStoreMSFT; + // ---- XR_FB_spatial_entity_query extension commands + PFN_xrQuerySpacesFB QuerySpacesFB; + PFN_xrRetrieveSpaceQueryResultsFB RetrieveSpaceQueryResultsFB; + + // ---- XR_FB_spatial_entity_storage extension commands + PFN_xrSaveSpaceFB SaveSpaceFB; + PFN_xrEraseSpaceFB EraseSpaceFB; + // ---- XR_OCULUS_audio_device_guid extension commands #if defined(XR_USE_PLATFORM_WIN32) PFN_xrGetAudioOutputDeviceGuidOculus GetAudioOutputDeviceGuidOculus; @@ -339,8 +360,17 @@ struct XrGeneratedDispatchTable { // ---- XR_ALMALENCE_digital_lens_control extension commands PFN_xrSetDigitalLensControlALMALENCE SetDigitalLensControlALMALENCE; + // ---- XR_FB_spatial_entity_container extension commands + PFN_xrGetSpaceContainerFB GetSpaceContainerFB; + // ---- XR_FB_passthrough_keyboard_hands extension commands PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB PassthroughLayerSetKeyboardHandsIntensityFB; + + // ---- XR_META_performance_metrics extension commands + PFN_xrEnumeratePerformanceMetricsCounterPathsMETA EnumeratePerformanceMetricsCounterPathsMETA; + PFN_xrSetPerformanceMetricsStateMETA SetPerformanceMetricsStateMETA; + PFN_xrGetPerformanceMetricsStateMETA GetPerformanceMetricsStateMETA; + PFN_xrQueryPerformanceMetricsCounterMETA QueryPerformanceMetricsCounterMETA; }; diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h index d96f2dacc0..184ee005d8 100644 --- a/thirdparty/vulkan/vk_mem_alloc.h +++ b/thirdparty/vulkan/vk_mem_alloc.h @@ -25,7 +25,7 @@ /** \mainpage Vulkan Memory Allocator -<b>Version 3.0.1-development (2022-03-28)</b> +<b>Version 3.0.1 (2022-05-26)</b> Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. \n License: MIT @@ -300,9 +300,9 @@ extern "C" { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// +// // INTERFACE -// +// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -488,7 +488,7 @@ typedef enum VmaMemoryUsage When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT), you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT in VmaAllocationCreateInfo::flags. - + It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g. vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo() and not with generic memory allocation functions. @@ -552,7 +552,7 @@ typedef enum VmaAllocationCreateFlagBits */ VMA_ALLOCATION_CREATE_MAPPED_BIT = 0x00000004, /** \deprecated Preserved for backward compatibility. Consider using vmaSetAllocationName() instead. - + Set this flag to treat VmaAllocationCreateInfo::pUserData as pointer to a null-terminated string. Instead of copying pointer value, a local copy of the string is made and stored in allocation's `pName`. The string is automatically @@ -579,14 +579,14 @@ typedef enum VmaAllocationCreateFlagBits */ VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT = 0x00000100, /** \brief Set this flag if the allocated memory will have aliasing resources. - + Usage of this flag prevents supplying `VkMemoryDedicatedAllocateInfoKHR` when #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified. Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors. */ VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT = 0x00000200, /** Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT). - + - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value, you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect. - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`. @@ -602,7 +602,7 @@ typedef enum VmaAllocationCreateFlagBits VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT = 0x00000400, /** Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT). - + - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value, you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect. - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`. @@ -724,7 +724,7 @@ typedef enum VmaDefragmentationFlagBits VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT = 0x8, /// A bit mask to extract only `ALGORITHM` bits from entire set of flags. - VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK = + VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK = VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT | VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT | VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT | @@ -980,7 +980,7 @@ typedef struct VmaVulkanFunctions #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000 /// Fetch "vkGetBufferMemoryRequirements2" on Vulkan >= 1.1, fetch "vkGetBufferMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension. PFN_vkGetBufferMemoryRequirements2KHR VMA_NULLABLE vkGetBufferMemoryRequirements2KHR; - /// Fetch "vkGetImageMemoryRequirements 2" on Vulkan >= 1.1, fetch "vkGetImageMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension. + /// Fetch "vkGetImageMemoryRequirements2" on Vulkan >= 1.1, fetch "vkGetImageMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension. PFN_vkGetImageMemoryRequirements2KHR VMA_NULLABLE vkGetImageMemoryRequirements2KHR; #endif #if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION >= 1001000 @@ -1117,19 +1117,19 @@ typedef struct VmaStatistics */ uint32_t blockCount; /** \brief Number of #VmaAllocation objects allocated. - + Dedicated allocations have their own blocks, so each one adds 1 to `allocationCount` as well as `blockCount`. */ uint32_t allocationCount; /** \brief Number of bytes allocated in `VkDeviceMemory` blocks. - + \note To avoid confusion, please be aware that what Vulkan calls an "allocation" - a whole `VkDeviceMemory` object (e.g. as in `VkPhysicalDeviceLimits::maxMemoryAllocationCount`) is called a "block" in VMA, while VMA calls "allocation" a #VmaAllocation object that represents a memory region sub-allocated from such block, usually for a single buffer or image. */ VkDeviceSize blockBytes; /** \brief Total number of bytes occupied by all #VmaAllocation objects. - + Always less or equal than `blockBytes`. Difference `(blockBytes - allocationBytes)` is the amount of memory allocated from Vulkan but unused by any #VmaAllocation. @@ -1387,9 +1387,9 @@ typedef struct VmaAllocationInfo */ void* VMA_NULLABLE pUserData; /** \brief Custom allocation name that was set with vmaSetAllocationName(). - + It can change after call to vmaSetAllocationName() for this allocation. - + Another way to set custom name is to pass it in VmaAllocationCreateInfo::pUserData with additional flag #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT set [DEPRECATED]. */ @@ -1429,7 +1429,7 @@ typedef struct VmaDefragmentationMove /// Allocation that should be moved. VmaAllocation VMA_NOT_NULL srcAllocation; /** \brief Temporary allocation pointing to destination memory that will replace `srcAllocation`. - + \warning Do not store this allocation in your data structures! It exists only temporarily, for the duration of the defragmentation pass, to be used for binding new buffer/image to the destination memory using e.g. vmaBindBufferMemory(). vmaEndDefragmentationPass() will destroy it and make `srcAllocation` point to this memory. @@ -1446,16 +1446,16 @@ typedef struct VmaDefragmentationPassMoveInfo /// Number of elements in the `pMoves` array. uint32_t moveCount; /** \brief Array of moves to be performed by the user in the current defragmentation pass. - + Pointer to an array of `moveCount` elements, owned by VMA, created in vmaBeginDefragmentationPass(), destroyed in vmaEndDefragmentationPass(). For each element, you should: - + 1. Create a new buffer/image in the place pointed by VmaDefragmentationMove::dstMemory + VmaDefragmentationMove::dstOffset. 2. Copy data from the VmaDefragmentationMove::srcAllocation e.g. using `vkCmdCopyBuffer`, `vkCmdCopyImage`. 3. Make sure these commands finished executing on the GPU. 4. Destroy the old buffer/image. - + Only then you can finish defragmentation pass by calling vmaEndDefragmentationPass(). After this call, the allocation will point to the new place in memory. @@ -1539,7 +1539,7 @@ typedef struct VmaVirtualAllocationCreateInfo typedef struct VmaVirtualAllocationInfo { /** \brief Offset of the allocation. - + Offset at which the allocation was made. */ VkDeviceSize offset; @@ -2364,7 +2364,7 @@ vkDestroyBuffer(device, buffer, allocationCallbacks); vmaFreeMemory(allocator, allocation); \endcode -It it safe to pass null as buffer and/or allocation. +It is safe to pass null as buffer and/or allocation. */ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyBuffer( VmaAllocator VMA_NOT_NULL allocator, @@ -2396,7 +2396,7 @@ vkDestroyImage(device, image, allocationCallbacks); vmaFreeMemory(allocator, allocation); \endcode -It it safe to pass null as image and/or allocation. +It is safe to pass null as image and/or allocation. */ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage( VmaAllocator VMA_NOT_NULL allocator, @@ -2555,9 +2555,9 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// +// // IMPLEMENTATION -// +// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -2578,6 +2578,9 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( #ifdef _MSC_VER #include <intrin.h> // For functions like __popcnt, _BitScanForward etc. #endif +#if __cplusplus >= 202002L || _MSVC_LANG >= 202002L // C++20 + #include <bit> // For std::popcount +#endif /******************************************************************************* CONFIGURATION SECTION @@ -3180,12 +3183,16 @@ But you need to check in runtime whether user's CPU supports these, as some old */ static inline uint32_t VmaCountBitsSet(uint32_t v) { +#if __cplusplus >= 202002L || _MSVC_LANG >= 202002L // C++20 + return std::popcount(v); +#else uint32_t c = v - ((v >> 1) & 0x55555555); c = ((c >> 2) & 0x33333333) + (c & 0x33333333); c = ((c >> 4) + c) & 0x0F0F0F0F; c = ((c >> 8) + c) & 0x00FF00FF; c = ((c >> 16) + c) & 0x0000FFFF; return c; +#endif } static inline uint8_t VmaBitScanLSB(uint64_t mask) @@ -3374,60 +3381,6 @@ static inline bool VmaStrIsEmpty(const char* pStr) return pStr == VMA_NULL || *pStr == '\0'; } -#if VMA_STATS_STRING_ENABLED -static const char* VmaAlgorithmToStr(uint32_t algorithm) -{ - switch (algorithm) - { - case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT: - return "Linear"; - case 0: - return "TLSF"; - default: - VMA_ASSERT(0); - return ""; - } -} -#endif // VMA_STATS_STRING_ENABLED - -#ifndef VMA_SORT -template<typename Iterator, typename Compare> -Iterator VmaQuickSortPartition(Iterator beg, Iterator end, Compare cmp) -{ - Iterator centerValue = end; --centerValue; - Iterator insertIndex = beg; - for (Iterator memTypeIndex = beg; memTypeIndex < centerValue; ++memTypeIndex) - { - if (cmp(*memTypeIndex, *centerValue)) - { - if (insertIndex != memTypeIndex) - { - VMA_SWAP(*memTypeIndex, *insertIndex); - } - ++insertIndex; - } - } - if (insertIndex != centerValue) - { - VMA_SWAP(*insertIndex, *centerValue); - } - return insertIndex; -} - -template<typename Iterator, typename Compare> -void VmaQuickSort(Iterator beg, Iterator end, Compare cmp) -{ - if (beg < end) - { - Iterator it = VmaQuickSortPartition<Iterator, Compare>(beg, end, cmp); - VmaQuickSort<Iterator, Compare>(beg, it, cmp); - VmaQuickSort<Iterator, Compare>(it + 1, end, cmp); - } -} - -#define VMA_SORT(beg, end, cmp) VmaQuickSort(beg, end, cmp) -#endif // VMA_SORT - /* Returns true if two memory blocks occupy overlapping pages. ResourceA must be in less memory offset than ResourceB. @@ -5073,7 +5026,7 @@ public: VmaIntrusiveLinkedList& operator=(VmaIntrusiveLinkedList&& src); VmaIntrusiveLinkedList& operator=(const VmaIntrusiveLinkedList&) = delete; ~VmaIntrusiveLinkedList() { VMA_HEAVY_ASSERT(IsEmpty()); } - + size_t GetCount() const { return m_Count; } bool IsEmpty() const { return m_Count == 0; } ItemType* Front() { return m_Front; } @@ -5485,7 +5438,7 @@ public: // Writes a string value inside "". // pStr can contain any ANSI characters, including '"', new line etc. - they will be properly escaped. void WriteString(const char* pStr); - + // Begins writing a string value. // Call BeginString, ContinueString, ContinueString, ..., EndString instead of // WriteString to conveniently build the string content incrementally, made of @@ -6463,7 +6416,7 @@ void VmaBlockMetadata::DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size (uint32_t)allocation->GetSuballocationType()); #endif // VMA_STATS_STRING_ENABLED } - + } #if VMA_STATS_STRING_ENABLED @@ -10941,7 +10894,7 @@ public: uint32_t GetAlgorithm() const { return m_Algorithm; } bool HasExplicitBlockSize() const { return m_ExplicitBlockSize; } float GetPriority() const { return m_Priority; } - void* const GetAllocationNextPtr() const { return m_pMemoryAllocateNext; } + const void* GetAllocationNextPtr() const { return m_pMemoryAllocateNext; } // To be used only while the m_Mutex is locked. Used during defragmentation. size_t GetBlockCount() const { return m_Blocks.size(); } // To be used only while the m_Mutex is locked. Used during defragmentation. @@ -12783,7 +12736,7 @@ void VmaBlockVector::IncrementallySortBlocks() void VmaBlockVector::SortByFreeSize() { VMA_SORT(m_Blocks.begin(), m_Blocks.end(), - [](auto* b1, auto* b2) + [](VmaDeviceMemoryBlock* b1, VmaDeviceMemoryBlock* b2) -> bool { return b1->m_pMetadata->GetSumFreeSize() < b2->m_pMetadata->GetSumFreeSize(); }); @@ -13029,7 +12982,7 @@ VmaDefragmentationContext_T::VmaDefragmentationContext_T( } } } - + switch (m_Algorithm) { case 0: // Default algorithm @@ -13155,7 +13108,7 @@ VkResult VmaDefragmentationContext_T::DefragmentPassEnd(VmaDefragmentationPassMo vector = m_pBlockVectors[vectorIndex]; VMA_ASSERT(vector != VMA_NULL); } - + switch (move.operation) { case VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY: @@ -13452,7 +13405,7 @@ bool VmaDefragmentationContext_T::ReallocWithinBlock(VmaBlockVector& vector, Vma case CounterStatus::Pass: break; } - + VkDeviceSize offset = moveData.move.srcAllocation->GetOffset(); if (offset != 0 && metadata->GetSumFreeSize() >= moveData.size) { @@ -13636,7 +13589,7 @@ bool VmaDefragmentationContext_T::ComputeDefragmentation_Balanced(VmaBlockVector prevFreeRegionSize = nextFreeRegionSize; } } - + // No moves perfomed, update statistics to current vector state if (startMoveCount == m_Moves.size() && !update) { @@ -13923,7 +13876,7 @@ void VmaDefragmentationContext_T::UpdateVectorStatistics(VmaBlockVector& vector, state.avgFreeSize /= freeCount; } -bool VmaDefragmentationContext_T::MoveDataToFreeBlocks(VmaSuballocationType currentType, +bool VmaDefragmentationContext_T::MoveDataToFreeBlocks(VmaSuballocationType currentType, VmaBlockVector& vector, size_t firstFreeBlock, bool& texturePresent, bool& bufferPresent, bool& otherPresent) { @@ -15919,6 +15872,7 @@ void VmaAllocator_T::UpdateVulkanBudget() void VmaAllocator_T::FillAllocation(const VmaAllocation hAllocation, uint8_t pattern) { if(VMA_DEBUG_INITIALIZE_ALLOCATIONS && + hAllocation->IsMappingAllowed() && (m_MemProps.memoryTypes[hAllocation->GetMemoryTypeIndex()].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0) { void* pData = VMA_NULL; @@ -16010,8 +15964,8 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json) json.ContinueString_Size(index++); if (pool->GetName()) { - json.WriteString(" - "); - json.WriteString(pool->GetName()); + json.ContinueString(" - "); + json.ContinueString(pool->GetName()); } json.EndString(); @@ -18427,7 +18381,7 @@ for(;;) VmaAllocationInfo allocInfo; vmaGetAllocationInfo(allocator, pMoves[i].srcAllocation, &allocInfo); MyEngineResourceData* resData = (MyEngineResourceData*)allocInfo.pUserData; - + // Recreate and bind this buffer/image at: pass.pMoves[i].dstMemory, pass.pMoves[i].dstOffset. VkImageCreateInfo imgCreateInfo = ... VkImage newImg; @@ -18439,7 +18393,7 @@ for(;;) // Issue a vkCmdCopyBuffer/vkCmdCopyImage to copy its content to the new place. vkCmdCopyImage(cmdBuf, resData->img, ..., newImg, ...); } - + // Make sure the copy commands finished executing. vkWaitForFences(...); @@ -18451,7 +18405,7 @@ for(;;) } // Update appropriate descriptors to point to the new places... - + res = vmaEndDefragmentationPass(allocator, defragCtx, &pass); if(res == VK_SUCCESS) break; @@ -18605,7 +18559,7 @@ To do that, fill VmaAllocationCreateInfo::pUserData field when creating an allocation. It is an opaque `void*` pointer. You can use it e.g. as a pointer, some handle, index, key, ordinal number or any other value that would associate the allocation with your custom metadata. -It it useful to identify appropriate data structures in your engine given #VmaAllocation, +It is useful to identify appropriate data structures in your engine given #VmaAllocation, e.g. when doing \ref defragmentation. \code @@ -18836,14 +18790,14 @@ To do it, define macro `VMA_DEBUG_INITIALIZE_ALLOCATIONS` to 1. #include "vk_mem_alloc.h" \endcode -It makes memory of all new allocations initialized to bit pattern `0xDCDCDCDC`. +It makes memory of new allocations initialized to bit pattern `0xDCDCDCDC`. Before an allocation is destroyed, its memory is filled with bit pattern `0xEFEFEFEF`. Memory is automatically mapped and unmapped if necessary. If you find these values while debugging your program, good chances are that you incorrectly read Vulkan memory that is allocated but not initialized, or already freed, respectively. -Memory initialization works only with memory types that are `HOST_VISIBLE`. +Memory initialization works only with memory types that are `HOST_VISIBLE` and with allocations that can be mapped. It works also with dedicated allocations. \section debugging_memory_usage_margins Margins @@ -19116,13 +19070,13 @@ so you need to create another "staging" allocation and perform explicit transfer VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; bufCreateInfo.size = 65536; bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - + VmaAllocationCreateInfo allocCreateInfo = {}; allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO; allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT; - + VkBuffer buf; VmaAllocation alloc; VmaAllocationInfo allocInfo; |